我在尝试使用此代码插入数据库之前验证我的表单,但我保持打印 '您错过了一个值 ' 。我希望你帮忙解决问题。
由于
<?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 :(得分: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();
}
//其他代码