我正在创建一个简单的聊天页面,用户可以在其中写下自己的姓名和信息,然后点击提交按钮,将其重定向到相同的表单页面,现在他可以在表单下方看到他的消息,请注意消息按最新排序。
我的问题是,当我在我的页面中写一个名字和一条消息并点击发送时,没有任何内容被添加到我的表中。但是,当我手动(从phpmyadmin)执行此操作时,将显示该消息。
我认为我的sql查询有问题,但我无法找到它,我知道请求帮助告诉我错误以及如何纠正它。
我的代码分为两个文件:chat.php和chat_post.php。
chat.php:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Mini chat</title>
<style>
body{
background-color: grey;
}
div#f, p{
text-align: center;
font-weight: bold;
}
input#mbox{
height: 300px;
width: 200px;
}
</style>
</head>
<body>
<p>Bienvenue à la page de chat</p>
<div id="f">
<form method="POST" action="chat_post.php">
pseudo : <br>
<input type="text" name="pseudo" ><br><br>
message : <br>
<input type="text" name="message" id="mbox" ><br><br>
<input type="submit" value="envoyer">
</form>
</div>
<?php
try{
$db = new PDO('mysql:host=localhost;dbname=learn','root','');
}
catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
$a=$db->query('SELECT pseudo,message FROM chat ORDER BY id DESC LIMIT 0,10');
while ($b=$a->fetch()) {
echo '<p>'.htmlspecialchars($b['pseudo']).' : '.htmlspecialchars($b['message']).'</p>';
}
$a->closeCursor();
?>
</body>
</html>
chat_post.php:
<?php
try{
$db = new PDO('mysql:host=localhost;dbname=learn','root','');
}
catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
if (isset($_POST['pseudo']) && isset($_POST['message'])) {
$a = $db->prepare('INSERT INTO chat(id,pseudo,message) VALUES(pseudo,message)');
$a ->execute(array('pseudo' =>$_POST['pseudo'],'message' => $_POST['message']));
header('Location : chat.php');
echo "message added";
}
?>
提前致谢
答案 0 :(得分:2)
正如我所说:
INSERT INTO chat(id,pseudo,message) VALUES(pseudo,message)
缺少值和缺少的冒号中的参数。
INSERT INTO chat(id,pseudo,message) VALUES('', :pseudo, :message)
或者,如Xorifelse所述
INSERT INTO chat(pseudo,message) VALUES(:pseudo, :message)
两者都有效。
需要删除Location
和冒号之间的额外空格。
header('Location : chat.php');
^ right there
到
header('Location: chat.php');
exit;
参考:http://php.net/manual/en/function.header.php
也删除回声并为其添加一个退出以防止进一步执行。
检查错误的参考链接:
PDO准备好的陈述的参考: