【问题标题】:Form wont submit data to MySQL Database表单不会将数据提交到 MySQL 数据库
【发布时间】:2017-08-05 05:37:42
【问题描述】:

我有一个包含我的 html 表单的文件和另一个包含以下代码的 php 文件。当我单击提交按钮时,我能够成功连接。但是当我在 phpMyAdmin 控制面板中刷新我的数据库时。没有数据被推送到我的数据库中。

HTML 表单

<form class="well" id="contactForm" name="sendMsg" novalidate="" action="contact_form.php" method="post">
        <div class="control-group">
            <div class="controls">
                <input class="form-control" name="fullname" id="name" type="text" placeholder="Full Name" required="" data-validation-required-message="Please enter your name" />
            </div>
        </div>
        <div class="control-group">
            <div class="controls">
                <input class="form-control" name="phonenumber" id="phone" type="text" placeholder="Phone Number" required="" data-validation-required-message="Please enter your phone number" />
            </div>
        </div>
        <div class="control-group">
            <div class="controls">
                <input class="form-control" name="emailaddress" id="email-address" type="email" placeholder="Email Address" required="" data-validation-required-message="Please enter your email" />
            </div>
        </div>
        <div class="control-group">
            <div class="controls">
                <textarea rows="6" class="form-control" name="message" id="msg" type="msg" placeholder="Enter detailed question/concern, and we will get back to you." required="" data-validation-required-message="Please enter your question/concern"></textarea>
            </div>
        </div>
        <div class="control-group">
            <div class="controls submit-btn">
                <button class="btn btn-primary" type="submit" value="Submit">Submit</button>
            </div>
        </div>
    </form>

CONTACT_FORM.PHP

<?php

define('DB_NAME', 'xxx');
define('DB_USER', 'xxx');
define('DB_PASSWORD', 'xxx');
define('DB_HOST', 'xxx');

$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD);

if(!$connection){
die('Database connection failed: ' . mysqli_connect_error());
}

$db_selected = mysqli_select_db($connection, DB_NAME);

if(!$db_selected){
die('Can\'t use ' .DB_NAME . ' : ' . mysqli_connect_error());
}

echo 'Connected successfully';

$name = @$_POST ['fullname'];
$phone = @$_POST ['phonenumber'];
$email = @$_POST ['emailaddress'];
$msg = @$_POST ['message'];

$sql = "INSERT INTO contact_form (fullname, phonenumber, emailaddress, message) VALUES ('$name',   '$phone', '$email', '$msg')";

if (!mysqli_query($connection, $sql)){
die('Error: ' . mysqli_connect_error($connection));
}
?>

【问题讨论】:

  • 无数据(有空字段的行),或无记录(无行)?
  • 先删除那些@
  • 在您打开&lt;?php标签error_reporting(E_ALL); ini_set('display_errors', 1);后立即将错误报告添加到文件顶部,看看它是否产生任何东西,以及or die(mysqli_error($connection))mysqli_query(),跨度>
  • 您的图片显示您正在查看database structure 而不是BROWSING the actual data这是你真正的问题?!?!只需点击BROWSE 标签。
  • 要检查您的 POST 数组中是否有一些数据,您可以使用 var_dump($_POST['fullname']);

标签: php html mysql forms


【解决方案1】:

首先使用那个结构:

if (isset($_POST['fullname'])) {
    $name = $_POST['fullname'];
}

其他值以此类推。

或者更好:-

$name = isset($_POST['fullname']) ? $_POST['fullname'] : '';

这样,$name 字段总是设置为某个值,这样您以后在代码中尝试使用它时就不会出错

【讨论】:

  • @RiggsFolly,它有什么改变吗?我不认为它更好,这只是另一种方式。恕我直言,无法编辑答案
  • 我可以回答这个问题。使用三元运算符有助于避免使用else 语句,这会增加代码大小,而且您可以使用默认值。即:$name = isset($_POST['fullname']) ? $_POST['fullname'] : 'no_name';
  • 您的方式,如果$_POST['fullname'] 中没有任何内容,则永远不会创建变量$name。所以稍后在你的代码中,当你对它做一些事情时,你会得到一个variable does not exist 错误。这样做可以确保变量存在 PLUS 允许您在 $_POST['fullname'] 不存在时设置默认值。
  • 另一种方式,您看不到任何错误,因为您的变量等于 void,并且您什么都不插入到 db 中。
  • 不,在我的站点中我使用 Java=) 我的意思是,最好使用 else 语句添加额外的代码行以防止出现空变量。
【解决方案2】:

很明显,您没有为列 ID 传递值,而是您更改了 AUTO_INCREMENT 列, 第 1 步:点击更改列 ID 第 2 步:检查 A_I (AUTO_INCREMENT)

第 3 步:点击保存

或者您也可以通过其他方式传递 ID 值,如下所示:

$name = @$_POST ['fullname'];
$phone = @$_POST ['phonenumber'];
$email = @$_POST ['emailaddress'];
$msg = @$_POST ['message'];
$id = 1 // Set value for ID

$sql = "INSERT INTO contact_form (ID, fullname, phonenumber, emailaddress, message) VALUES ($id, '$name',   '$phone', '$email', '$msg')";

【讨论】:

  • 这应该没关系,不是从我可以通过 OP 的数据库架构/图像判断的。
  • ID 不会接受 NULL,那么如何按照模式插入呢?解释@Fred-ii-
  • OP 正在使用 die('Error: ' . mysqli_connect_error($connection)) 应该使用 or die(mysqli_error($connection)) - mysqli_connect_error 用于连接错误,而不是查询错误。可能是 OP 没有收到错误回复说“不能为 NULL”的原因。
  • 肯定会打印“错误:”至少:)
  • 根据模式,他没有传递 ID 的值,这是插入不起作用的唯一原因,其余所有列除了 ID 将接受 NULL。
【解决方案3】:

$_POST 变量中删除@ 符号,您还需要删除空格。我想让您知道,您很容易受到 SQL 注入的影响,而无需在插入这些值之前对其进行清理/验证,请使用 ctypefilter_var。最后,我建议您将排序规则从 latin1 更改为 utf8,除非您对该字符集有特定原因。

$phone 之前的插入值中有一些额外的空格,这可能导致它失败

VALUES ('$name',   '$phone', '$email', '$msg')

正如另一个答案中所述,在尝试使用变量之前,您始终需要验证变量中是否存在数据。此外,如果您在 `contact_form.php 中重定向,请务必在退出时显示失败消息,否则您可能永远看不到它们。

if($_POST['fullname']){
    $name = $_POST['fullname']
}else{
    echo "name not received";
    exit;
}
if($_POST['phonenumber']){
    $phone = $_POST['phonenumber']
}else{
    echo "phone not received";
    exit;
}
if($_POST['emailaddress']){
    $email = $_POST['emailaddress']
}else{
    echo "email not received";
    exit;
}
if($_POST['message']){
    $msg = $_POST['message']
}else{
    echo "message not received";
    exit;
}

$sql = "INSERT INTO contact_form (fullname, phonenumber, emailaddress, message) 
        VALUES ('$name', '$phone', '$email', '$msg')";

if (!mysqli_query($connection, $sql)){
die('Error: ' . mysqli_connect_error($connection));
}

【讨论】:

    【解决方案4】:
    $sql = "INSERT INTO contact_form 
            (fullname, phonenumber, emailaddress, message) 
            VALUES ('$name',   '$phone', '$email', '$msg')";
    

    使用" 而不是'

    【讨论】:

    • 这就是 OP 正在使用的$sql = "INSERT INTO contact_form (fullname, phonenumber, emailaddress, message) VALUES ('$name', '$phone', '$email', '$msg')";
    • 确保在重新发布之前发现 OP 的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 2016-10-04
    • 1970-01-01
    • 2018-03-11
    • 2014-05-25
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多