您是否可以扫描下面的代码,找出表单未成功将记录插入MySql表'用户'的原因?
insert.php:
<?php // insert.php
require_once 'login.php';
$con = mysqli_connect($db_hostname, $db_username, $db_password, $db_database);
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySql: " . mysqli_connect_error();
}
$sql = "INSERT INTO users (name, email)
VALUES
('$_POST[name]]','$_POST[email]')";
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
mysqli_close($con;)
?>
的index.html:
<html>
<body>
<h1>Hello!</h1>
<form action="insert.php" method="post">
Name: <input type="text" name="name">
Email <input type="text" name="email">
<input type="submit">
</form>
</body>
</html>
登录凭证存储在单独的login.php文件中。 谢谢!
答案 0 :(得分:2)
这里有一个额外的方括号
('$_POST[name]]',
^------- //Remove this from your SQL Query
您需要认真切换到PreparedStatements
,因为您的上述代码直接倾向于SQL注入。
答案 1 :(得分:0)
尝试做: VALUES('“。$ $ POST [name]。”','“。$ _ POST [email]。”')“; 所以......使用mysqli_real_escape_string进行sql注入: 例: $ name = mysqli_real_escape_string($ _ POST ['name']);
它是mysqli_close($ con);不是mysqli_close($ con;)
答案 2 :(得分:0)
首先,这一行mysqli_close($con;)
有一个错位的分号,应该是mysqli_close($con);
错字与否,它是以这种方式发布的,但我不打赌我的底部美元。
另外,您现有的方法对SQL injection开放。
$_POST[name]]
中有一个轻微的语法错误,应该读作$_POST[name]
但正如Patrick Evans在comment
中所述:
“虽然这是一个错字,但它不会导致sql失败,它只会在列的名称末尾添加一个]。”
请改用此方法:( PDO ) - 它更安全。
<?php
/* Your Database Credentials */
$dbname = 'your_database';
$username = 'username';
$password = 'password';
$pdo = new PDO("mysql:host=localhost;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO users (name,
email
) VALUES (
:name,
:email)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':name', $_POST['name'], PDO::PARAM_STR);
$stmt->bindParam(':email', $_POST['email'], PDO::PARAM_STR);
$stmt->execute(array(':name' => $_POST['name'],':email' => $_POST['email']));
if($stmt != false) {
echo "Success!";
} else {
echo "An error occured saving your data!";
}
?>
现有的,只需做一些修改:
<?php // insert.php
require_once 'login.php';
$con = mysqli_connect($db_hostname, $db_username, $db_password, $db_database);
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySql: " . mysqli_connect_error();
}
$name=mysqli_real_escape_string($con,$_POST['name']);
$email=mysqli_real_escape_string($con,$_POST['email']);
$sql = "INSERT INTO users (name, email)
VALUES
('$name','$email')";
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
mysqli_close($con);
?>