【问题标题】:PHP won't post form to databasePHP不会将表单发布到数据库
【发布时间】:2012-12-02 00:36:34
【问题描述】:

尝试向我的数据库发布一个简单的表单,但无法正常工作。我通过 XAMPP 激活了 PHP 和 MySQL。数据库“E-mail list”是用“Players”表建立的。

PHP 代码:

      <?php 
$mysqli = new mysqli('localhost', 'root', '', 'E-mail list');
    if(isset($_POST['save']))
    {
    $name = $mysqli->real_escape_string($_POST['name']);
    $email = $mysqli->real_escape_string($_POST['email']);
    $phone = $mysqli->real_escape_string($_POST['phone']);
    $other = $mysqli->real_escape_string($_POST['other']);
    $query = 'INSERT INTO Players (
    name,
    email,
    phone,
    other
    )
    VALUES ('.$name.', "'.$email.'", "'.$phone.'","'.$other.'")';
    if ($mysqli->query($query))
    {
    echo 'Data Saved Successfully.';
    }
    else
    {
    echo 'Cannot save data.';
    }}
    ?>

还有形式:

<form id="myForm" method="post">>
<div data-role="fieldcontain">
    <label for="name">Please enter your name:</label>
    <input type="text" name="name" id="name" class="required" value="" autocomplete="off" />
    <label for="email">Please enter your e-mail:</label>
    <input type="text" name="email" id="email" value="" class="required" autocomplete="off"  />
    <label for="phone">Please enter your phone number:</label>
    <input type="number" name="phone" id="phone" value="" class="required" autocomplete="off"  />

<br><br>    
<label for="other">Other comments</label>
<textarea name="other" id="other" autocomplete="off" placeholder="Anything else you'd like to add?">
</textarea>
</form>
<p><strong id="error"></strong></p>
<br><br>
<input type="button" id="save" name="save" value="Submit Form" />
<p id="response"></p>

【问题讨论】:

  • 我建议在$query 上使用print_r,以便您可以验证要发送到数据库的内容。我也强烈推荐使用参数化查询。
  • 查询中的所有字符串值都应该使用引号
  • &lt;form&gt; 中缺少action,而在&lt;form&gt; 之后还有一个>
  • 谢谢大家!我认为 INSERT 前面的 ' 可能是反派。

标签: php forms mysqli


【解决方案1】:

我对您的 PHP 和 HTML 部分的代码进行了一些更改。,

对于 PHP:

<?php 
$mysqli = new mysqli('localhost', 'root', '', 'E-mail list');
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
if(isset($_POST['save']))
{
$name = $mysqli->real_escape_string($_POST['name']);
$email = $mysqli->real_escape_string($_POST['email']);
$phone = $mysqli->real_escape_string($_POST['phone']);
$other = $mysqli->real_escape_string($_POST['other']);
$query = "INSERT INTO Players (`name`,`email`,`phone`,`other`) VALUES ('".$name."','".$email."','".$phone."','".$other."')";
if($mysqli->query($query))
{
echo 'Data Saved Successfully.';
}
else
{
echo 'Cannot save data.';
}
}
?>

对于 HTML:

<form id="myForm" method="post" action="">
<div data-role="fieldcontain">
    <label for="name">Please enter your name:</label>
    <input type="text" name="name" id="name" class="required" value="" autocomplete="off" /><br />
    <label for="email">Please enter your e-mail:</label>
    <input type="text" name="email" id="email" value="" class="required" autocomplete="off"  /><br />
    <label for="phone">Please enter your phone number:</label>
    <input type="number" name="phone" id="phone" value="" class="required" autocomplete="off"  />

<br><br>    
<label for="other">Other comments</label>
<textarea name="other" id="other" autocomplete="off" placeholder="Anything else you'd like to add?">
</textarea>
<p><strong id="error"></strong></p>
<br><br>
<input type="submit" id="save" name="save" value="Submit Form" />
<p id="response"></p>
</form>

我认为这可以帮助您解决问题。

【讨论】:

    【解决方案2】:

    SQL 中的名称值缺少双引号。

    VALUES ("'.$name.'", "'.$email.'", "'.$phone.'","'.$other.'")';
    

    【讨论】:

      【解决方案3】:

      使用Firefox/firebug查看参数和结果,并添加一个echo($query);所以你可以在 firebug 中看到它。

      【讨论】:

        【解决方案4】:

        “电子邮件列表”似乎不是方便的数据库名称,但应该没问题。
        无论如何,您的目标应该是显示所有可能发生的错误。

        因此,您必须始终检查错误并以更实用的形式报告它们,而不仅仅是“无法保存数据”。

        始终检查您的连接

        $mysqli = new mysqli('localhost', 'root', '', 'E-mail list');
        if ($mysqli->connect_error) {
            trigger_error($mysqli->connect_error);
        }
        

        查询相同

        if (!$mysqli->query($query)) {
            trigger_error($mysqli->error." ".$query);
        }
        

        如果您没有看到错误消息 - 请检查您的代码逻辑:如果您曾经运行过代码,是否运行过您编写的代码,PHP 是否正常工作,是否存在拼写错误等

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多