这是我第一次在这里发帖,但我一直在使用这个网站几次。
我遇到了一个我似乎无法解决的问题。 我想将文本输入发送到另一个名为connect的php文件。检查数据库是否存在于那里,当存在= true时,它将用户发送到同一页面但内容不同。
目前我有索引:
<form action ="connect.php" method = "get">
Name: <input type="text" class= "textfieldcss" style="width: 65%;" name = "name"><input type="submit" class= "button" value = "Connect!">
</form>
在连接中:
<?php
include 'folder/folder.php';
$conn = new mysqli($host,$username,$password,"name_database");
// check connection
if ($conn->connect_error)
{
echo "Connection failed: \n". $conn->connect_error;
}
$name = htmlspecialchars($_GET['name']);
$sql = "select * from table where name ='".$name."'";
$result = $conn->query($sql);
$numrows = mysqli_num_rows($result);
//echo $numrows." results found for ".$name."</br>"; random testin
while($row=mysqli_fetch_assoc($result)){
if($name == $row['name']){ //returns name in database
header('location: index.php?name='.$name);
}}
header('location: index.php?name=');
mysqli_close($conn);
?>
好吧我很喜欢if子句,我不知道如何正确地将值true / false编码到原始索引中。
我不打算使用href来创建多个站点,因为我打算在数据库中存储超过200个值
答案 0 :(得分:0)
好的,你的脚本中有很多错误。
在检查MySQL连接是否失败后,允许脚本继续运行,您需要通过添加die()
或类似语句退出。
您的最终if
语句在找到匹配后不会停止循环,以下header
调用将覆盖之前的break
调用,因为它们都设置了相同的标题,您需要插入在if
语句中设置标题后的$name
语句。
您尚未正确转义可用于执行SQL注入的变量htmlspecialchars
。 if (!empty($_GET['name'])) {
$name = $_GET['name'];
$query = "SELECT name FROM table WHERE name = '" . mysqli_real_escape_string($name) . "'";
$rs = mysqli_query($dbc, $query);
if (mysqli_num_rows($rs) > 0) {
header('Location: index.php?name=' . urlencode($name));
die();
}
}
header('Location: index.php');
die();
只是转义HTML字符,而不是诸如引号之类的恶意SQL字符,你需要使用MySQL转义方法。
最后,如果您只是检查记录的存在,则无需获取记录,您可以简单地执行此操作(注意我这里没有使用OOE方法,但逻辑是相同的)。
Jnetpcap