我发现下面的脚本由于某种原因而挂起。它将加载并且PHP没有看到任何错误,但它不会处理数据(注意我们处于打开单独登录数据库的上下文中。)
在process.php中我们有以下内容:
<? PHP
//Process the POST data in prepration to write to SQL database.
$_POST['chat_input'] = $input;
$time = date("Y-m-d H:i:s");
$ip = $_SERVER['REMOTE_ADDR'];
$name = $_SESSION['username'];
$servername = "localhost";
$username = "id3263427_chat_user";
$password = "Itudmenif1!Itudmenif1!";
$dbname = "id3263427_chat_user";
$id = "NULL";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
$sql = 'INSERT INTO `chat` (`id`, `username`, `ip`, `timestamp`,
`message`) VALUES ('$id','$name', '$ip', '$time', '$input')';
if(mysqli_query($link, $sql)){
mysqli_close($conn);
header('Location: ../protected_page.php');
} else {
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
?>
传递给上面脚本的html表单如下:
<form action="/process.php" method="post" id="chat">
<b> Send A Message (500 Character Max):</b><br>
<textarea name="chat_input" form="chat" size="500"></textarea>
<input type="submit" value=submit>
</form>
不确定这是怎么回事。
答案 0 :(得分:2)
您遇到了语法错误,因为您在使用'
$ id之前关闭$ sql字符串。
你的$ id变量是什么?使用当前代码,您将插入字符串“NULL”。如果要将sql值设置为null,则应使用$id = null;
或者不要插入任何值。
如果您希望数据库设置ID,请将其留空。
$input = $_POST['chat_input'];
$id = null;
$conn = new mysqli($servername, $username, $password, $dbname);
if($conn->connect_error){
die("ERROR: Could not connect. " . $conn->connect_error);
}
第一个解决方案
如果这不是生产代码,您可以直接将变量插入到语句中,但是您应该使用"
而不是'
作为sql字符串,这样就可以插入变量和{ {1}}没有关闭字符串。
'
第二个解决方案
更好的方法是准备好的陈述。
$sql = "INSERT INTO chat (id, username, ip, timestamp, message) VALUES ('$id', '$name', '$ip', '$time', '$input')";
if($conn->query($sql) === true) {
$conn->close();
header('Location: ../protected_page.php');
} else {
echo "ERROR: Could not able to execute $sql. " .$conn->error;
$conn->close();
}
bind_param()
中的$stmt = $conn->prepare('INSERT INTO chat (username, ip, timestamp, message) VALUES (?, ?, ?, ?)');
$stmt->bind_param("ssss", $username, $ip, $time, $input);
if($stmt->execute()) {
$stmt->close();
$conn->close();
header('Location: ../protected_page.php');
} else {
echo "ERROR: Could not able to execute $stmt. " . $conn->error;
$stmt->close();
$conn->close();
}
定义了给定位置的字符串,如果要插入整数,请改用"s"
。
e.g。 "i"