2011-08-19 181 views
1

我試圖插入到數據庫使用此代碼之前驗證自己的狀態,但我一直printin 「你錯過了一個值。我想請你幫忙解決問題。驗證輸入的形式在PHP

感謝

<?php 
$username = mysql_real_escape_string($_POST['username']); 
$pword  = mysql_real_escape_string($_POST['passwd']); 
$fname  = mysql_real_escape_string($_POST['firstname']); 
$lname  = mysql_real_escape_string($_POST['lastname']); 
$email  = mysql_real_escape_string($_POST['email']); 
$telephone = mysql_real_escape_string($_POST['telephone']); 
$ad1  = mysql_real_escape_string($_POST['ad1']); 
$ad2  = mysql_real_escape_string($_POST['street']); 
$ad3  = mysql_real_escape_string($_POST['town']); 
$pcode  = mysql_real_escape_string($_POST['pcode']); 


if($username == " " || $pword == " " || $fname == " " || $lname == " " || $email == " ") 

    echo 'You missed a value'; 
    exit(); 

    $con = mysql_connect("localhost","root",""); 
    if (!$con) 
    { 
     die('Could not connect: ' . mysql_error()); 
    } 

    mysql_select_db("people", $con); 

//$description = mysql_real_escape_string($_POST[description]); 
    $pword = md5($pword); 
    $sql="INSERT INTO members (username, pword, fname, lname, email, telephone, ad1, ad2, ad3, pcode) 
VALUES 
('$username','$pword','$fname', '$lname', '$email','$telephone','$ad1','$ad2','$ad3','$pcode')"; 


    if (!mysql_query($sql,$con)){ 
    die('Error: ' . mysql_error()); 
    } 
    echo "1 record added"; 

mysql_close($con) 
?> 
+0

正在分配值('='),而不是對它們進行比較(''==)。而且我想你想用空字符串「」「'和空格'」「'來比較。 –

+0

不應該是'$ username ==「」':)? P.S:我以前經常犯這個錯誤。 –

+0

它似乎沒有工作。這一次,即使丟失了一些值,它也會插入數據:( – Julie

回答

3
if($username == '' || $pword == '' || $fname == '' || $lname == '' || $email == '') 

你做$var = ""分配的,而不是用比較操作$var == ''一個比較空的空間變量,或更嚴格的$var === ''


這將是一個有點更乾淨的代碼遵循和維護:

function sqlEscape($string){ 
    return "'".mysql_real_escape_string($string)."'"; 
} 

if( $_POST['username'] == '' 
    || $_POST['passwd'] == '' 
    || $_POST['firstname'] == '' 
    || $_POST['lastname'] == '' 
    || $_POST['email']  == '') 
{ 
    exit('You missed a value'); 
} 

$con = mysql_connect('localhost', 'root', ''); 
if (!$con){ 
    die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db('people', $con); 

//$description = mysql_real_escape_string($_POST[description]); 
$pword = md5($_POST['passwd']); 
$sql = sprintf('INSERT INTO members (username, pword, fname, lname, email, telephone, ad1, ad2, ad3, pcode) 
       VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)', 
       sqlEscape($_POST['username']), 
       sqlEscape($pword), 
       sqlEscape($_POST['firstname']), 
       sqlEscape($_POST['lastname']), 
       sqlEscape($_POST['email']), 
       sqlEscape($_POST['telephone']), 
       sqlEscape($_POST['ad1']), 
       sqlEscape($_POST['street']), 
       sqlEscape($_POST['town']), 
       sqlEscape($_POST['pcode'])); 

if (!mysql_query($sql,$con)){ 
    die('Error: ' . mysql_error()); 
} 

echo '1 record added'; 

mysql_close($con) 

我在一個函數(sqlEscape)加入到運行的所有mysql_real_escape_string,只是爲了讓逃逸小菜一碟。請注意,我在MySQL連接建立後調用了這個函數,因爲mysql_real_escape_string在沒有連接的情況下無法工作。

+0

- 感謝一百萬。我一定會使用這個代碼 – Julie

+0

@Julie:很高興我幫了忙。如果您的問題得到解決,請隨時接受答案。 – Shef

+1

- 偉大的東西。我甚至沒有改變任何東西......像魅力一樣工作。再次感謝:) – Julie

2

在您的if中使用==而不是=。

if($username == " " || $pword == " " || $fname == " " || $lname == " " || $email == " ") 
4

您應該驗證原始POST值,而不是mysql_real_escape_string。你也比較(空格)不是空字符串,並指定他們不比較它們。

+0

這是很好的建議:) –

+0

爲什麼-1 ????? –

+0

謝謝你現在就改變它,好建議 – Julie

2

取出該行的空間,你需要雙等於

if($username = " " || $pword = " " || $fname = " " || $lname = " " || $email = " ") 

變化

if($username == "" || $pword == "" || $fname == "" || $lname == "" || $email == "") 
2

if($username = " ")不比較,但是分配,使用if($username == " ")代替 - 這還是檢查,是否輸入是單個空格字符,可能大多數不是。檢查變量是否有內容或不使用if(empty($username))

而且它可能更好地爲您使用array_map的$ _POST陣列上逃跑的值:

array_map(function($value) { 
    return mysql_real_escape_string($value); 
}, $_POST); 

(如果你之前PHP 5.3的時候,你需要使用一個單獨的函數聲明,而不是的anonymous callback

0
if($username == " " || $pword == " " || $fname == " " || $lname == " " || $email == " ") 
{ 
echo 'You missed a value'; 
exit(); 
} 
3

檢查,如果條件使用==即時 =

錯誤 if($ username =「」|| $ pword =「」|| $ fname =「」|| $ lname =「」|| $ email =「」)

1

Yeap,符號「=」是設置一個變量,比較符號在PHP中是「==」或「===」。

順便說一句,儘量減少你的代碼,你可以使用 「array_map」 應用 「mysql_real_escape_string」 功能,您的POST數組:

$post = array_map("mysql_real_escape_string", $_POST);

1

=是賦值運算符。它給了一個價值。 ==是比較運算符。它比較了兩件事。 ===也是一個比較運算符,但它比較了值和變量類型是否相同。你需要記住這一點。

此外,你也可以讓你像這樣的代碼更清晰(這只是一個例子,不要複製粘貼,因爲它可以改善,它不完全是安全的):

foreach($_POST as $key => $value) 
{ 
    $columns[] = $key; 
    $value = mysql_real_escape_string($value); 
    $values[] = "'" . $value ."'"; 

    if(empty($value)) 
    { 
     $errors[] = 'POST with key '. $key .' was not filled in'; 
    } 
} 

if(!isset($errors)) 
{ 
    $query = "INSERT INTO (". implode(',', $columns .") VALUES (". implode(',', $values .")"; 

} 
else 
{ 
    echo implode('<br />', $errors); 
} 

,同時學習如何程序,如果你發現自己拷貝了某些代碼 - 那麼你就知道這是你可以更智能地編碼的東西。

0

我想你應該分配的變量後,加入這行:

if($_SERVER['REQUEST_METHOD']== 'POST'){if($username == " " || $pword == " " || $fname == " " || $lname == " " || $email == " ") 

echo 'You missed a value'; 
exit(); 
} 

//其他代碼