我认为我的问题相当简单,但经过一整天尝试不同的变化后,我已经开始打扰你们了,请原谅我,如果这已经被覆盖但我找不到足够接近的例子
我有一个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
有人可以请我提供一些建议吗?
到目前为止,谢谢你的帮助答案 0 :(得分:2)
&#34;无论在form.html中输入什么号码,它都会显示html按钮。黑名单上有一个号码但输入时仍显示按钮&#34;
原因是:
在此if($member = $ban['member'])
中,您assigning =
而不是comparing ==
将$member
与&#34;进行比较构件&#34;行。
将其更改为if($member == $ban['member'])
mysqli
with prepared statements或PDO with prepared statements,他们更安全。脚注:
</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命令以确保空格不是问题。