【发布时间】:2017-06-21 08:01:08
【问题描述】:
我在 php 上制作一个表单,将数据保存到数据库中 这是我将数据从 php 表单发送到数据库的代码:
<?php
$users_name = $_POST['name'];
$users_email = $_POST['email'];
$users_phoneNumber = $_POST['phNo'];
$users_cnic = $_POST['cnic'];
$users_voucherNumber = $_POST['vNum'];
$users_modelNumber = $_POST['prod'];
if( $_POST )
{
$dbhost = "localhost";
$dbuser = "root";
$dbpassword = "";
$dbname = "dany";
$query = "";
$sqlQuery = "";
$conn = new mysqli($dbhost, $dbuser, $dbpassword, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo ("Variables values: " . " " . $users_cnic . " " .
$users_phoneNumber . "<br>");
$query = "INSERT INTO customer( c_name, c_phoneNumber, c_cnic,
c_email, c_voucherNumber, c_modelNumber) VALUES
('$users_name','$users_phoneNumber', '$users_cnic',
'$users_email', $users_voucherNumber,
'$users_modelNumber')";
if ($conn->query($query) === TRUE) {
//if successful
echo ("Variables values after success: " . " " . $users_cnic .
" " . $users_phoneNumber . "<br>");
} else {
//if data not successfully entered
echo "Error: " . $query . "<br>" . $conn->error;
}
$conn->close();
}
?>
但问题是当我尝试发送数据时,“c_phoneNumber”和“c_cnic”每次发送相同的值,即“2147483647”。即表中的每一行都有两列,每一列都有值“2147483647”。
如果您看到我已经准备好检查值是否正确的行:
echo ("Variables values: " . " " . $users_cnic . " " . $users_phoneNumber .
"<br>");
在这里,它们的值与从表单的文本框发送的值完全相同。但是当在下一行代码中进行查询时:
$query = "INSERT INTO customer( c_name, c_phoneNumber, c_cnic,
c_email, c_voucherNumber, c_modelNumber) VALUES
('$users_name','$users_phoneNumber', '$users_cnic',
'$users_email', $users_voucherNumber,
'$users_modelNumber')";
这两个变量都包含“2147483647”。
当成功将数据输入表后运行if语句时:
if ($conn->query($query) === TRUE) {
//if successful
echo ("Variables values after success: " . " " . $users_cnic .
" " . $users_phoneNumber . "<br>");
}
它具有从文本框中传递的相同值。 我无法弄清楚变量数据在整个程序运行状态中保持不变但插入数据库时发生变化的问题。
我试过了:
1- 创建一个新表
2- 创建两个新列
3- 发送硬编码值。
$query = "INSERT INTO customer( c_name, c_phoneNumber, c_cnic,
c_email, c_voucherNumber, c_modelNumber) VALUES
('$users_name',123, 456,
'$users_email', $users_voucherNumber,
'$users_modelNumber')";
当我执行第 4 步时,完美发送和插入的值为 123、456。
4- 创建一个新查询,将其保存在另一个变量中,运行查询 = 相同的结果。(错误)
【问题讨论】:
-
了解prepared Statement以防止SQL注入
-
Jens 是对的,你的代码很容易被黑客入侵。恶意用户可能会输入可能窃取、删除或损坏您的数据的数据。使用准备好的语句和参数来保护您的数据库。在网上很容易找到这方面的教程。
-
您说它在两个字段中都插入了“2147483647”。
'$users_phoneNumber', '$users_cnic'表示您正在插入字符串(由于引号围绕变量)。但是您的硬编码示例插入了整数。数据库中每个字段的数据类型是什么?插入时每个文本框的值是多少?可能是字符串/整数不匹配。如果您按照应有的方式使用了参数,那么这种数据类型不匹配就会消失。 -
@Jens 我已经尝试按照您的提示进行操作。它适用于 2 到 3 个条目,但随后又开始出现同样的问题
-
@ADyson,这两个字段中的每一个都是数据库中的整数。我试过删除引号,它确实输入整数,但只输入“2147483647”。当我进行插入时,每次的值都是不同的整数。我不重复输入。文本框输入类型在 html 代码中声明为“数字”。它不允许除数字之外的任何字符串/按键。