Form Action的PHP文件不起作用

时间:2012-01-20 17:51:52

标签: php mysql forms

我有一个简单的表单,它应该在MySQL数据库中输入提交,但是无论何时提交表单,我都会收到服务器500错误。我是PHP / MySQL的新手,所以我没有看到问题。有什么想法吗?

HTML表格摘录:

<form method="post" action="submit.php">
  <label for="fname">First Name *:</label>
    <input type="text" id="fname" name="fname" /><br />
  <label for="lname">Last Name *:</label>
    <input type="text" id="lname" name="lname" /><br />
  <label for="email">Email *:</label>
    <input type="email" id="email" name="email" /><br />
  <label for="phone">Phone Number:</label>
    <input type="tel" id="phone" name="phone" /><br />
  <input type="checkbox" id="ageverify" />
    <label for="ageverify">I am at least 18 years of age *</label><br />
  <input type="checkbox" id="terms" />
    <label for="terms">I agree to the Terms &amp; Conditions *</label><br />
  <input type="submit" value="Submit" />
</form>

submit.php的整体

<?
mysql_connect("localhost","USERNAME","PASSWORD");
mysql_select_db("DB_NAME");

$sql = "INSERT into entries (fname,lname,email,phone,ageverify,terms) "; 
$sql .= "VALUES ("; 
$sql .= $_POST['fname'] . ',' . $_POST['lname'] . ',' . $_POST['email'] . ','; 
$sql .= $_POST['phone'];

if (isset($_POST['ageverify']) // if checked will exist, otherwise it won't 
$sql .= 'yes' . ','; 
else 
$sql .= 'no' . ','; 

if (isset($_POST['terms']) 
$sql .= 'yes' . ','; 
else 
$sql .= 'no' . ','; 

$sql .= ')'; 

$result = mysql_query($sql); 

if($result){
    echo("Thanks");
} else{
    echo("Something went wrong");
}
?> 

更新:工作代码(尽可能简陋)

<?php 
mysql_connect("localhost","USERNAME","PASSWORD");
mysql_select_db("DB_NAME");

$sql = "INSERT into entries (fname,lname,email,phone,ageverify,terms) "; 
$sql .= "VALUES ("; 
$sql .= '"' . $_POST['fname'] . '"' . ',' . '"' . $_POST['lname'] . '"' . ',' . '"' . $_POST['email'] . '"' . ','; 
$sql .= '"' . $_POST['phone'] . '"'; 

if (isset($_POST['ageverify'])) // if checked will exist, otherwise it won't 
$sql .= ',' . '"yes"' ; 
else 
$sql .= ',' . '"no"'; 

if (isset($_POST['terms'])) 
$sql .= ',' . '"yes"'; 
else 
$sql .= ',' . '"no"'; 

$sql .= ')'; 

echo $sql; 

$result = mysql_query($sql); 

if($result){ 
echo("Thanks"); 
} else{ 
echo("Something went wrong"); 
} 
?> 

3 个答案:

答案 0 :(得分:3)

首先:阅读SQL注入!你绝对容易受到攻击!

其次,你应该enable error reporting在开发时 - 这会告诉我什么是错的。

状态500出现是因为服务器端出错了。发生这种情况时,您可以检查错误日志。

但是,如果启用错误报告,则会在屏幕上显示错误。这会告诉你你有语法错误 您缺少第11行和第16行的结束括号:

if (isset($_POST['ageverify'])

应该是

if (isset($_POST['ageverify']))

第16行也是如此。

第三,始终使用<?php而不仅仅<?启动PHP代码。尽量避免使用短标签。

答案 1 :(得分:1)

在这种情况下,错误日志极其有用,但在最后一次“是/否”之后怀疑“,”是问题所在:

if (isset($_POST['terms']) 
$sql .= 'yes'; 
else 
$sql .= 'no';

值的语法是(Value1,Value2,...,ValueN)。

编辑:你错过了第11行和第16行的结束括号。你应该得到一个编辑器来验证你编写的代码。为您省去了很多麻烦。

答案 2 :(得分:1)

500错误表示服务器已关闭或无法访问。 http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_Server_Error

我假设您发布的代码中的连接和数据库参数被故意放在这里作为通用条目,而不是您真正使用的,对吧?既然你说你是新手,那么USERNAME,PASSWORD和DB_NAME的参数就不是你真正使用的......你需要输入一个真实的用户,密码和数据库名称。