如何使用php将用户输入的信息传递给我的数据库?

时间:2017-07-06 17:11:24

标签: php mysql database mysqli

用户在文本字段中输入他们的姓名和号码。传递此信息然后发送到data.php文件,我试图让它写入我的数据库。数据库名称称为hello。

<!-- connect to database -->
<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "hello";

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

//<!-- post added information to database -->
if ($_POST['name']) {
 if ($_POST['number']) {

 $sql = "INSERT INTO hello (id, name, number)
VALUES ('', '$_POST['name']', '$_POST['number'')";
if(mysqli_query($conn, $sql)){
echo "Records inserted successfully.";
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
  }
 } 
} ?>

通过查看我的代码,我认为问题在于这一行。

   $sql = "INSERT INTO hello (id, name, number)
VALUES ('', '$_POST['name']', '$_POST['number']')";

我在phpmyadmin中设置的自动增加ID的星号左侧有一个空白。 我可以硬编码一个条目,如:

$sql = "INSERT INTO hello (id, name, number)
VALUES ('', 'john', '12345)";

这些硬编码条目被放入数据库但我无法获得用户输入的数据。

4 个答案:

答案 0 :(得分:2)

$_POST值创建变量并添加变量以便于理解代码:

$name = $_POST['name'];
$number = $_POST['number'];
$sql = "INSERT INTO hello (id, name, number) VALUES ('', $name, $number)";

您的代码可能无法正常工作的一个原因是因为您在$_POST值附近有单引号,那么您也可以执行Jasbeer Rawal建议的内容。

更新

基于善意评论......我个人会采用不同的方法将数据添加到您的数据库,而不是使用预准备语句。我使用MySQLi,但您也可以使用PDO。

首先创建连接:

<?php
define("HOST", "localhost");
define("USER", "");
define("PASSWORD", "");
define("DATABASE", "");

$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
if ($mysqli->connect_error) {
    echo "There was a slight problem, please contact your webmaster before continuing.";
    exit();
}

然后,当用户提交表单处理时:

if(isset($_POST['submit']
{
    $name = $_POST['name'];
    $number = $_POST['number'];

    if ($stmt = $mysqli->prepare("INSERT hello (name, number) VALUES (?, ?)"))
    {
            $stmt->bind_param("ss", $name, $number);
            $stmt->execute();
            $stmt->close();
    }
    else
    {
        echo "ERROR: Could not prepare SQL statement.";
    }
}

这将添加$name$number,您的ID角色必须是主要角色,并设置为auto_increment。 ID将自动生成。

答案 1 :(得分:1)

从$ _POST ['name']和$ _POST ['number']中删除单引号,如下所示

$sql = "INSERT INTO hello (id, name, number) 
VALUES ('', $_POST['name'], $_POST['number'])";

答案 2 :(得分:1)

你正准备使用mysqli进入滑坡。我建议您尝试使用PDO进行查询。现在,有人可以轻松地将SQL放入name POST数据中,实际上会对数据库造成损害。

无论如何,你手头的问题,你有一个缺失的括号和一个问题:

VALUES ('', '$_POST['name']', '$_POST['number'')";

它不会按照预期的方式使用嵌套的单引号。

VALUES ('', '$_POST[name]', '$_POST[number]')";

答案 3 :(得分:0)

您的插入代码是这样的

$sql = "INSERT INTO hello (id, name, number) 
VALUES ('','{$_POST['name']}', '{$_POST['number']}')";

然后你的价值将在数据库中 如果字段id是主键并且自动递增,则插入语句应该类似于

试试这个:

$sql = "INSERT INTO hello ( name, number) 
VALUES ('{$_POST['name']}', '{$_POST['number']}')";