PHP 表单未插入 mySQL 数据库

Posted

技术标签:

【中文标题】PHP 表单未插入 mySQL 数据库【英文标题】:PHP form not inserting into mySQL database 【发布时间】:2014-04-04 00:40:12 【问题描述】:

我试图将表单中的两个文本字段拉到一个基本的 mysql 数据库中,这给我带来了麻烦。所以这是我的两个文件,首先是 html 表单:

<!DOCTYPE html>

<html>
  <body>
    <title>Home Page</title>
    <h3>Please Place your Order Below:</h3>
    <form action="tacoOrder.php" method="POST" />
        <p>Name: <input type="text" name="name" /></p>
        <p>Taco Order: <input type="text" name="tacoOrder" /></p>
        <input type="submit" value="Submit" />
    </form>
  </body>
</html>

和 PHP:

<?php

define('DB_NAME', 'tacoPractice');
define('DB_USER', 'root');
define('DB_PASS', 'root');
define('DB_HOST', 'localhost');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASS);

if(!$link)

    die('Could not connect to database: ' . mysql_error());


$db_select = mysql_select_db(DB_NAME);

if(!$db_select)

    die('Can\'t use ' . DB_NAME . ': ' . mysql_error());


echo "HOLY EFF";
$name = $_POST('name');
$tacoOrder = $_POST('tacoOrder');

$query = "INSERT INTO orders ('name', 'tacoOrder') VALUES ('$name', '$tacoOrder')";
if(!mysql_query($query)

    die("DAMMIT");


$mysql_close();

?>

它没有给出连接错误,但没有数据插入到我的数据库中。有什么想法吗?

谢谢。

【问题讨论】:

【参考方案1】:

不需要 '' 和 $_POST('name')

$name =      $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];
$query = "INSERT INTO orders ('name', 'tacoOrder') VALUES ('$name','$tacoOrder')";

【讨论】:

复制答案是坏习惯:) 我没有复制我先给出了答案,外星人先生 您在阅读了我和 marcs 的答案后编辑了您的答案,您只是回答不要使用花括号,我到处都有眼睛 我没有看到你的答案我看到了代码并编辑了它。 没错。 ?.无论如何,您的答案仍然是错误的,表名没有引号,没有看到吗?【参考方案2】:

基本 PHP:$_POST 是一个数组。这不是一个函数:

$name = $_POST('name');
              ^------^--- should be []

【讨论】:

【参考方案3】:

所有$_POST('var_name')都应该是$_POST['var_name']

替换

$name = $_POST('name');
$tacoOrder = $_POST('tacoOrder');

作者:

$name =mysql_real_escape_string($_POST['name']);
$tacoOrder = mysql_real_escape_string($_POST['tacoOrder']);

【讨论】:

【参考方案4】:

其他人已经给了你答案。要添加,您在列名周围使用引号,这些引号应该是反引号或完全删除引号。

变化:

INSERT INTO orders ('name', 'tacoOrder')
                    ^    ^  ^         ^

INSERT INTO orders (`name`, `tacoOrder`)

INSERT INTO orders (name, tacoOrder)

或者作为一个完整的答案:

$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];

$query = "INSERT INTO orders (`name`, `tacoOrder`) VALUES ('$name', '$tacoOrder')";

旁注:反引号不是必需的,但列名不能使用单引号。我自己在列名周围使用反引号只是一种习惯。

另外,这个$mysql_close(); 不应该在mysql_close 前面有一个$,而是在括号内有一个$link

更改为mysql_close($link);

正如 Alien 先生所说,mysql_close() 的变量是可选的(谢谢)

if(!mysql_query($query) 中还缺少一个),应该读作if(!mysql_query($query))

请考虑使用准备好的语句或 PDO 切换到 mysqli_* 函数。 mysql_* 函数已弃用,将从未来的版本中删除。


完全重写:(测试并在我的服务器上工作)

<?php

define('DB_NAME', 'tacoPractice');
define('DB_USER', 'root');
define('DB_PASS', 'root');
define('DB_HOST', 'localhost');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASS);

if(!$link)

    die('Could not connect to database: ' . mysql_error());


$db_select = mysql_select_db(DB_NAME);

if(!$db_select)

    die('Can\'t use ' . DB_NAME . ': ' . mysql_error());


echo "HOLY EFF";
$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];

$query = "INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')";
if(!mysql_query($query))

    die("DAMMIT");

else echo "Success"; 

mysql_close();

?>

你也可以使用这个稍有不同的方法:

$query = mysql_query("INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')");
if (!$query) 
    die('Invalid query: ' . mysql_error());

else echo "Success"; 

脚注:

您可能会获得空数据条目,因为您没有检查表单元素是否为空。

您可以使用条件语句来实现:

if(!empty($_POST['name']) || !empty($_POST['tacoOrder']))

// continue with code processing

另外,使用 Awlad 在 his answer 中提到的关于使用 mysql_real_escape_string() 的内容

您还可以在 SO How can I prevent SQL injection in PHP? 上阅读一篇好文章


这是一个(基本)基于mysqli_* 的方法,带有mysqli_real_escape_string() 函数和一个条件语句,用于检查是否有任何字段为空。

如果其中一个字段为空,则不会执行查询。

<?php
define('DB_NAME', 'tacoPractice');
define('DB_USER', 'root');
define('DB_PASS', 'root');
define('DB_HOST', 'localhost');

$link = mysqli_connect(DB_HOST, DB_USER, DB_PASS);

if(!$link)

    die('Could not connect to database: ' . mysqli_error());


$db_select = mysqli_select_db($link,DB_NAME);

if(!$db_select)

    die('Can\'t use ' . DB_NAME . ': ' . mysqli_error());


echo "HOLY EFF";
$name = mysqli_real_escape_string($link,$_POST['name']);
$tacoOrder = mysqli_real_escape_string($link,$_POST['tacoOrder']);


if(!empty($_POST['name']) || !empty($_POST['tacoOrder']))
$query = "INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')";
if(!mysqli_query($link,$query))

    die("DAMMIT");

else echo "Success"; 

mysqli_close($link);



?>

【讨论】:

它们都不是 sql 保留关键字,因此您不需要反引号,此外,变量对于 mysql_close () in1.php.net/mysql_close 和 aaaah 是可选的,我没有看到表名周围的引号,将删除我的并赞成你的,但你可以删除你的答案中不必要的部分 我说的是列名,而不是保留字。它们不能用引号括起来,而是用反引号括起来。 @Mr.Alien 值是但不是列名。 是的,但这里不需要反引号,如果我们使用 mysql 保留关键字作为列名,则使用它们 你的意思是$link里面的mysql_close? @Mr.Alien 是的,我同意反引号,但我倾向于认为使用它们更安全。但你是对的,反引号不是必需的,但引号不能使用。 @Mr.Alien 这只是我的一种习惯。【参考方案5】:

嗨@user2839411,即使我遇到了同样的问题,值没有被插入到mysql数据库中,所以尝试在许多相关网站中搜索,但最后w3schools帮助我获得了结果。 这是将值插入数据库的波纹管代码。

PHP 代码:

<?php
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "dbitb";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) 
    die("Connection failed: " . $conn->connect_error);
 

if(isset($_POST['btn-signup']))

 $name = ($_POST['name']);
 $address = ($_POST['address']);
 $email = ($_POST['email']);
 $mobile = ($_POST['mobile']);
 $highest_degree = ($_POST['highest_degree']);
 $relavant_exp = ($_POST['relavant_exp']);

$sql = "INSERT INTO dbitb.volunteer_reg (name,address,email,mobile,highest_degree,relavant_exp)
VALUES ('$name','$address','$email','$mobile','$highest_degree','$relavant_exp')";

if ($conn->query($sql) === TRUE) 

    echo "New record created successfully";
 
else 

    echo "Error: " . $sql . "<br>" . $conn->error;

$conn->close();

?>

HTML 代码:

<form method="post" action ="register.php" id="contact-form">

<input type="text" name="name" placeholder="name"  required />

<textarea id = "address" name="address" placeholder="address"  required /></textarea>


<input type="email" name="email"  placeholder="email" required />


<input type="mobile" name="mobile"  placeholder="mobile" required />


<input type="highest_degree" name="highest_degree"  placeholder="highest degree" required />

<textarea id = "relavant_exp" name="relavant_exp"  placeholder="relavant experience" required /></textarea>

<div class="btn-group" role="group">
<input type="submit" class="btn btn-default" name="btn-signup" value="Enter the box" style="margin-top: 15px; margin-right: 15px; border-radius: 4px;">
 <a href="index.html"><button type="button" class="btn btn-default" style="margin-top: 15px;">&laquo; Back</button></a>
  </div>

</form>

【讨论】:

【参考方案6】:

我也有同样的挑战。这就是我在 12 个令人沮丧的小时后解决它的方法。

<?php
if(isset($_POST['button']))
    // echo "hi";
    $username = $_POST['username'];
    $password = $_POST['password'];

    //TO ALERT SUBMISSION OF BLANK FIELDS(IT DOESN'T PREVENT SUBMISSION OF BLANK FIELD THOUGH)
    if (!$username && !$password)
        echo "can't submit blank fields";
    

    //TO CONFIRM YOU ARE CONNECTED TO YOUR DATABASE (OPTIONAL)
    $connection = mysqli_connect('localhost', 'root', '', 'berrybells');
    if ($connection)
        echo "we are connected";
    else
        die("connection failed");
    

    //TO INSERT username and password from field to jossyusers database
    $query = "INSERT INTO jossyusers(username,password) VALUES('$username','$password')";
    $result = mysqli_query($connection, $query);
    if(!$result)
        die("OOPPS! query failed".mysqli_error($connection)); 
    

?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login Page</title>

</head>
<body>
    <form action="login_create.php" method="post">
        <div class="myclass">
            <h1>Username</h1>
            <input placeholder="Name" name="username" type="text">
            <input placeholder="Password" name="password" type="password">
            <input type="submit" name="button" value="submit">
            <?php

            ?>
        </div>
    </form>  
</body>
</html>

【讨论】:

【参考方案7】:

检查数据库和插入 INTO 中的字段是否相同:

ejm: BD: fiel1 varchar...

插入(字段1)

【讨论】:

以上是关于PHP 表单未插入 mySQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

PHP脚本未将表单数据插入数据库

MySQL / PHP 数据库连接以从 Web 表单输入文本

将html表单中的数据插入sql数据库(html,php,sql)时未保存输入的值

为啥这个 PHP 脚本不会在 MySQL 数据库中插入表单数据?

使用 PDO 和 PHP 将表单中的数据插入 MySQL 数据库

使用 PDO 从 php 页面将具有更多列的表单数据插入 mysql 数据库