用户在文本字段中输入他们的姓名和号码。传递此信息然后发送到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)";
这些硬编码条目被放入数据库但我无法获得用户输入的数据。
答案 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']}')";