所以我正在构建一个简单的问题表单,允许用户提交问题,一旦问题被提交,它就会被发送到数据库。我无法弄清楚它为什么不起作用。这是我的代码,第一个是ask.html,第二个是ask.php。
<form action="ask.php" method="POST">
Name: (not your real name)<br/>
<input type="text" name="name" id="name"/>
<br/>
<br/>
Question: <br/>
<textarea name="question" cols="60" rows="10" id="question">
</textarea>
<br/>
<input type="submit" />
</form>
<?php
include('config.php');
include('open_connection.php');
if ((!$_POST[name]) || (!$_POST[question]))
{
header ("Location: ask.html");
exit;
}
//Select database and table
$db_name = "questionme";
$table_name = "questions";
//Insert data into database
$sql = "INSERT INTO $table_name
(name, question) VALUES
('$_POST[name]', '$_POST[question]')";
$result = @mysql_query($sql, $connection) or die(mysql_error());
?>
<html>
<head>
<title>Ask</title>
<head>
<body>
<h1>Question Submitted</h1>
<p><strong>Name:</strong>
<?php echo "$_POST[name]"; ?></p>
<p><strong>Question:</strong>
<?php echo "$_POST[question]"; ?></p>
</body>
</html>
答案 0 :(得分:1)
使用isset()检查你的帖子变量,并使用你正在检查的哈希的引号:
if (!isset($_POST['name']) || !isset($_POST['question']))
此外,永远不要直接插入$ _POST变量的值 - 改为做这样的事情:
$name = mysql_real_escape_string($_POST['name']);
$question = mysql_real_escape_string($_POST['question']);
答案 1 :(得分:1)
以下肯定会产生警告:
if ((!$_POST[name]) || (!$_POST[question]))
替换为
if (!isset($_POST[name]) || !isset($_POST[question]))
然后绝对考虑其他人的回答。在您的INSERT:
('$_POST[name]', '$_POST[question]')";
会更好(因为它们也会触发警告):
('{$_POST['name']}', '{$_POST['question']}')";
关于这些
<?php echo "$_POST[name]"; ?></p>
...
<?php echo "$_POST[question]"; ?></p>
将它们作为
<?php echo $_POST['name']; ?></p>
...
<?php echo $_POST['question']; ?></p>
答案 2 :(得分:0)
你启用了show_errors PHP配置吗? 尝试放置一些像 echo“[1]”; echo“[2]”; 等,以发现您的脚本终止的位置(调试一下); 永远不要直接在SQL查询中使用_POST和_GET变量(使用mysql_real_escape_string来逃避它们的值)...或者你的脚本容易受到SQL注入攻击!!!
答案 3 :(得分:0)
如果您在字符串中使用$ _POST ['name']等表格,则必须使用{}
包装它们 $sql = "INSERT INTO $table_name
(name, question) VALUES
('{$_POST[name]}', '{$_POST[question]}')";
<?php echo "{$_POST[name]}"; ?>
也