变量不适用于SQL

时间:2015-01-16 00:39:11

标签: php mysql forms variables mysqli

我认为我的问题相当简单,但经过一整天尝试不同的变化后,我已经开始打扰你们了,请原谅我,如果这已经被覆盖但我找不到足够接近的例子

我有一个php文件,它是一个简单的html表单的处理文件

Process.php:

<?php
error_reporting(E_ALL); ini_set('display_errors', 1);
$host="1.2.3.4:3306"or die("wrong server");  // Host name 
$username="username"or die("wrong Username");  // Mysql username 
$password="password"or die("Wrong Password");  // Mysql password 
$db_name="db-name"or die("wrong DB");  // Database name 
$tbl_name="banned"or die("Wrong table");  // Table name 
$member = isset($_REQUEST['member']) ? $_REQUEST['member'] : "";

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$find_member = mysql_query("SELECT member FROM banned WHERE member='$member'")or 
die(mysql_error());
$ban = mysql_fetch_array($find_member);

if($member == $ban['member']){ 
echo ("this member is banned");
}
else {
echo ("<form method='post' action='http://example.com/access.php'>
<input type='text' style='display:none;' value='<?php echo
htmlspecialchars($member);?'/>'
<button type='submit'>Continue</button>");
}
?>

Form.html:

<form method="post" action="http://example.com/process.php">
<input type="text" name="member">
<input type="submit">
</form>

我想要完成的任务:

用户可以在form.html中键入其成员编号,然后单击“提交”,process.php将捕获POST并回显文本&#34;此成员被禁止&#34;或者如果成员编号不在禁止的sql表中,则显示带有隐藏输入字段的html按钮,该字段将$ member变量带到下一页

实际发生的事情

无论在form.html中输入什么号码,它都会显示html按钮。黑名单上有一个号码,但输入时仍显示按钮

报告错误

php和sql错误报告显示没有错误

旁注 数据库结构

成员VARCHAR(20)/ id(自动增量)/时间(时间戳 - defalt:当前时间戳)

会员编号为字母数字,最多15个字符 示例:+ ayw7394

使用的初始错误:

if($member = $ban['member']){ 

替换为:

if($member == $ban['member']){ 

但产生相反的效果,即回应被禁止的成员&#34;消息,无论输入的是哪个号码

好像是

if  statements are being ignored

有人可以请我提供一些建议吗?

到目前为止,谢谢你的帮助

3 个答案:

答案 0 :(得分:2)

  

&#34;无论在form.html中输入什么号码,它都会显示html按钮。黑名单上有一个号码但输入时仍显示按钮&#34;

原因是:

在此if($member = $ban['member'])中,您assigning =而不是comparing ==$member与&#34;进行比较构件&#34;行。

将其更改为if($member == $ban['member'])


脚注:

  • </input>不是有效的结束标记,可以安全删除。

修改

此代码块也是:

echo ("<form method='post' action='http://example.com/access.php'>
<input type='text' style='display:none;' value='<?php echo
htmlspecialchars($member);?'/>'
<button type='submit'>Continue</button>");

您已使用PHP,因此无需<?php echo?>

将其更改为:

echo ("<form method='post' action='http://example.com/access.php'>
<input type='text' value='".htmlspecialchars($member)."'/>
<button type='submit'>Continue</button>");

这可以解释为什么它显示&#34;被禁止&#34;因为你可能会在之后重新点击它。

  • 我建议您删除它并改为重定向。

示例,并将其替换为echo&#39; d按钮:

else{
header("Location: your_form.html");
exit;
}

答案 1 :(得分:1)

您的问题在

if($member = $ban['member']){ 

实际上这是真的,因为您将$member设置为等于$ban['member']。你的意思是?

if($member == $ban['member']){

答案 2 :(得分:0)

Echo $ member和$ ban ['member']查看它们是否相同或不同。

除了像其他人所说的那样防止SQL注入之外的另一个步骤是在输入和MYSQL字段上运行TRIM命令以确保空格不是问题。