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

时间:2013-12-05 08:12:14

标签: php html mysql forms post

我一直试图解决这个问题,但到目前为止我还没有能够解决这个问题。不会抛出任何错误,页面会在提交时刷新。我很茫然,但我不是一个专家,对此我是一个新手。

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

<?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\">
                  &nbsp;Save&nbsp;
                  </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);


   }
  ?>

2 个答案:

答案 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);

将返回truefalse,因此$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要么包含truefalse,所以这里错了,它应该是$db引用。此外,由于您不使用多个数据库连接,因此您无需在此处引用任何数据库连接。

$result = mysql_query($sql /* , $db */)

关于mysql问题的常见建议:如果你编写新代码,根本不要使用mysql_*函数。它们正在被弃用,将在未来的PHP版本中删除。立即与mysqli_*或PDO学习。这两种方法都允许您使用预准备语句,这使您可以确保您的站点不受SQL注入的影响,而无需担心转义用户提供的内容。

帮自己一个忙,评论完整的区块并用PDO或mysqli_*重写。