在PHP中验证输入表单

时间:2011-08-19 12:48:18

标签: php html

我在尝试使用此代码插入数据库之前验证我的表单,但我保持打印 '您错过了一个值 ' 。我希望你帮忙解决问题。

由于

<?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)
?> 

10 个答案:

答案 0 :(得分:4)

您应该验证原始POST值,而不是mysql_real_escape_string。您还要比较(空格)而不是空字符串,并指定它们不比较它们。

答案 1 :(得分: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在没有连接的情况下将无法工作。

答案 2 :(得分:3)

检查您的if条件是否使用 == = 的瞬间

错     if($ username =“”|| $ pword =“”|| $ fname =“”|| $ lname =“”|| $ email =“”)

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

取出这一行中的空格,你需要双等于

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

更改为

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

答案 5 :(得分:2)

if( $username = " ")不进行比较,但是分配,使用if( $username == " ")代替 - 仍然检查输入是否是单个空格字符,这可能主要不是。要检查变量是否包含内容,请使用if(empty($username))

也许你可以更好地在$ _POST-array上使用array_map来转义值:

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

(如果您在PHP 5.3之前,则需要使用单独的函数声明而不是anonymous callback。)

答案 6 :(得分:1)

是的,符号“=”是设置一个变量,比较符号是PHP中的“==”或“===”。

btw,为了最小化你的代码,你可以使用“array_map”将“mysql_real_escape_string”函数应用到你的POST数组:

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

答案 7 :(得分: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);
}

在学习如何编程的过程中,如果你发现自己会复制某些代码,那么你就会知道它可以更聪明地编写代码。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

我认为你应该在分配变量后加上这一行:

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

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

//其他代码