我一直试图解决这个问题,但到目前为止我还没有能够解决这个问题。不会抛出任何错误,页面会在提交时刷新。我很茫然,但我不是一个专家,对此我是一个新手。
以下是代码(简化发布):
<?php if (!isset($_POST['submit'])) {
echo "<!-- Form starts here -->
<form id=\"billing\" action=\"\" method=\"post\">
<!-- Name -->
<div class=\"control-group\">
<label class=\"control-label\"><b>Name</b></label>
<div class=\"controls\">
<input type=\"text\" id=\"name\" name=\"name\" placeholder=\"your name\" class=\"input-large\">
</div>
</div>
<!-- Zip -->
<div class=\"control-group\">
<label class=\"control-label\"><b>Zip Code</b></label>
<div class=\"controls\">
<input type=\"text\" id=\"billingzip\" name=\"billingzip\" placeholder=\"5 digit zip\" class=\"input-large\">
</div>
</div>
<!-- Submit -->
<div class=\"control-group\">
<div class=\"controls\">
<button class=\"button save small_green_button\" type=\"submit\">
Save
</button>
</div>
</div>
</form>";
}
else
{
$host="localhost";
$user_name="user";
$pwd="password";
$database_name="database";
$db=mysql_connect($host, $user_name, $pwd) or die(mysql_error());
$dbsel=mysql_select_db($database_name, $db);
if (mysql_error() > "") print mysql_error() . "<br>";
if (mysql_error() > "") print mysql_error() . "<br>";
$account_id = users::getAttr('Account', 'account_id');
$zip = mysql_real_escape_string($_POST['billingzip']);
$name = mysql_real_escape_string($_POST['name']);
$sql = "INSERT INTO `billing`
SET `account_id` = '{$account_id}',
`zip` = '{$billingzip}',
`name` = '{$name}',
`updated_at` = NOW()";
$result = mysql_query($sql, $dbsel)
or die(mysql_error().$sql);
mysql_close($db);
}
?>
答案 0 :(得分:1)
首先我看到的是
$result = mysql_query($sql, $dbsel) or die(mysql_error().$sql);
在我看来你应该写道:
$result = mysql_query($sql, $db) or die(mysql_error().$sql);
答案 1 :(得分:1)
总结我的评论:
您的表单没有name="submit"
的任何表单元素,因此(!isset($_POST['submit']))
始终为true
,您的else
块永远不会执行。您可以通过将var_dump($_POST);
添加到脚本的开头(if
子句之前)来检查这一点。 var_dump()
是PHP中最好的调试工具之一。使用它。
$dbsel=mysql_select_db($database_name, $db);
将返回true
或false
,因此$dbsel
将始终是这两个值中的一个。您无需存储它,只需添加or die("cannot select database");
。
$account_id = users::getAttr('Account', 'account_id');
您没有任何信息返回。如果$account_id
包含数字id或字符串,则稍后重要。如果它是一个字符串就没关系,如果它是一个数值,你应该改变它:
`account_id` = {$account_id}
下一步:
`zip` = '{$billingzip}',
您已将$_POST['billingzip']
存储在$zip
中,因此应该是:
`zip` = '{$zip}',
最后,但并非最不重要:
$result = mysql_query($sql, $dbsel)
如前所述,$dbsel
要么包含true
或false
,所以这里错了,它应该是$db
引用。此外,由于您不使用多个数据库连接,因此您无需在此处引用任何数据库连接。
$result = mysql_query($sql /* , $db */)
关于mysql问题的常见建议:如果你编写新代码,根本不要使用mysql_*
函数。它们正在被弃用,将在未来的PHP版本中删除。立即与mysqli_*
或PDO学习。这两种方法都允许您使用预准备语句,这使您可以确保您的站点不受SQL注入的影响,而无需担心转义用户提供的内容。
帮自己一个忙,评论完整的区块并用PDO或mysqli_*
重写。