表单和PHP函数将表单数据保存到同一文件中的mysql

表单和PHP函数将表单数据保存到同一文件中的mysql,php,html,mysql,forms,post,Php,Html,Mysql,Forms,Post,我一直在努力解决这个问题,但到目前为止我还没能让它发挥作用。没有抛出错误,提交时页面刷新。我有点不知所措,但我并不是一个真正的专家,对这方面还相当陌生 以下是代码(简化后用于发布): 首先我看到的是 $result = mysql_query($sql, $dbsel) or die(mysql_error().$sql); 我认为你应该写: $result = mysql_query($sql, $db) or die(mysql_error().$sql); 总结我的意见: 您的表单

我一直在努力解决这个问题,但到目前为止我还没能让它发挥作用。没有抛出错误,提交时页面刷新。我有点不知所措,但我并不是一个真正的专家,对这方面还相当陌生

以下是代码(简化后用于发布):

首先我看到的是

$result = mysql_query($sql, $dbsel) or  die(mysql_error().$sql);
我认为你应该写:

$result = mysql_query($sql, $db) or  die(mysql_error().$sql);

总结我的意见:

您的表单没有任何带有
name=“submit”
的表单元素,因此
(!isset($\u POST['submit'])
将始终为
true
,并且您的
else
块将永远不会执行。您可以通过添加
var\u dump($\u POST)来检查这一点
到脚本的开头(在
if
子句之前)
var_dump()
是PHP中最好的调试工具之一。使用它

$dbsel=mysql_select_db($database_name, $db);
将返回
true
false
,因此
$dbsel
将始终是这两个值之一。您不需要存储它,只需添加
或死亡(“无法选择数据库”)

您不知道这会返回什么信息。如果
$account\u id
包含一个数字id或字符串,则以后会很重要。如果是字符串,则可以;如果是数值,则应更改:

`account_id` = {$account_id}
下一步:

您在
$zip
中存储了
$\u POST['billingzip']
,因此应该是这样的:

`zip` = '{$zip}',
最后,但并非最不重要的是:

$result = mysql_query($sql, $dbsel)
如前所述,
$dbsel
包含
true
false
,因此这里是错误的,它应该是
$db
引用。此外,由于您不使用多个数据库连接,因此这里根本不需要引用任何数据库连接

$result = mysql_query($sql /* , $db */)
关于mysql问题的一般建议是:如果您编写了新代码,请不要使用
mysql.*
函数。它们正在被弃用,并将在PHP的未来版本中删除。立即使用
mysqli.*
或PDO学习。这两种方法都允许您使用准备好的语句,从而确保您的站点不受SQL注入的影响,而不必费心转义用户提供的内容


帮你自己一个忙,把完整的块注释掉,然后用PDO或
mysqli_*

重写它。我尝试了这个确切的方法,但没有成功。我意识到数据库名称没有被引用,所以我添加了dbsel来引用它。好吧,那么您的sql语法是错误的?我知道这应该像在表中插入名称([columns])值([VALUES]);这
INSERT
语法是有效的。@Arringar1
$dbsel
肯定是错误的,您必须引用
$db
(或者省略它,当您只有一个数据库连接时,这不是必需的)。不要使用
mysql.*
函数编写新代码,尤其是在学习时。它们正在被弃用,并将在PHP的未来版本中删除。立即使用
mysqli.*
或PDO学习。
{$billingzip}
应该是
{$zip}
,如果
$account\u id
是一个数值,则不需要在其周围的查询中使用引号。不确定这是否会导致无效查询。我在您的表单中没有看到任何名为
submit
的输入。我无意中将其从粘贴中漏掉,但它在那里。
type=“submit”
不是
name=“submit”
`zip` = '{$zip}',
$result = mysql_query($sql, $dbsel)
$result = mysql_query($sql /* , $db */)