php - 将表单数据插入数据库

标签 php mysql

我正在尝试制作一个简单的联系表单并将数据插入数据库。我知道有很多与此非常相似的问题,但我只是无法找出我的代码出了什么问题。
当我填写所有表单字段并尝试提交时,我总是得到 !mysqli_query($con, $sql) == FALSE。换句话说,我无法将任何数据插入数据库。

<?php 

if(isset($_GET['send'])){

    $name= $_GET['name'];
    $email= $_GET['email'];
    $phone = $_GET['phone'];
    $message = $_GET['message'];

    if(isset($name) && isset($email) && isset($phone) && isset($message) && !empty($name) && !empty($email) && !empty($phone) && !empty($message)){
        echo '<div class="alert alert-success" role="alert"><p class="alert">Your message was sent successfully.</p></div>';

    $con = mysqli_connect('localhost', 'root', '') or die('Cannot connect to database.');

    if(!mysqli_select_db($con, 'users')){
        echo 'Database is not choosen.';
    }

    $sql = "INSERT INTO person(Name, Email, Phone, Message) VALUES ('$name', '$email', '$phone', '$message')";

        if(!mysqli_query($con, $sql)){
            echo "Data is not inserted.";
        }
    } 

    else{
        echo '<div class="alert alert-danger" role="alert"><p class="alert">Some fields are empty.</p></div>';
    }
}

?>

<form action = "contact.php" method="get">
    <div class="form-group">
        <input type="text" class="form-control" placeholder="Name" name="name">
    </div>
    <div class="form-group">
        <input type="email" class="form-control"  placeholder="Email" name="email">
    </div>
    <div class="form-group">
        <input type="number_format" class="form-control"  placeholder="Phone" name="phone">
    </div>
    <div class="form-group">
        <textarea class="form-control" rows="8" placeholder="Message" name="message"></textarea>
    </div>
    <div class="form-group">
        <button class = "btn btn-primary" style="width: 100%; height: 70px" type="submit" name="send"><span class="glyphicon glyphicon-send"></span></button>
    </div>
</form>

最佳答案

注意:作为社区 wiki 发布。不是因为我对答案没有信心,而是因为我已经投票决定结束这个问题,当然是诚实的;-)

type="number_format" 是无效类型。

如果 HTML5 可供您使用并且确实是一个整数,则可以使用 type="number",或者使用 type="text" 以使其跨域兼容浏览器。无论哪种方式,您的 MySQL 都会处理它。

这就是您的代码在这里失败的原因。

有关有效输入类型的信息,请参阅以下内容:

另外,作为奖励:

您当前的代码已开放给 SQL injection 。使用prepared statements ,或PDOprepared statements .

<小时/>

请参阅以下链接 http://php.net/manual/en/mysqli.error.phphttp://php.net/manual/en/function.error-reporting.php 并将其应用到您的代码中。

您还应该检查空字段,而不是使用 isset():

否则,您可能会遇到错误/问题; 如果您正在检查/寻找它们。

关于php - 将表单数据插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36989527/

相关文章:

php - 如何从关系型数据库中进行选择?

mysql - 如何将 python mysql.connector 包含到 AWS Chalice 部署中?

php - 仅更新 MySQL 查询中的特定列(如果设置了特定值)

php - 我可以在 html 页面中显示 <?PHP ?>, <SCRIPT> 标签吗

javascript - 从 ajax 接收结果后打开一个弹出框

javascript - 如何将 javascript 变量设置为静态 json 数据?

php - 需要设置Braintree\Configuration::merchantId(或者需要将accessToken传给Braintree\Gateway)

MySQL创建表和更改(添加)表查询

php - 1 小时后和 24 小时后更改状态

php - 一个js文件在另一个php文件中的Javascript : calling document. ready()函数