2011-08-19 100 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(); 
} 

//其他代码