我有一个表单,为用户提供了在 3 列中的 1 列中发布的选项。如果用户决定他们想在第一列中发布,那么他们单击第 1 列按钮,我的 jquery 脚本将删除其他 2 个输入字段。
问题是这些列中的每一列都链接到数据库中它自己的表,因此每次用户在其中 1 列中输入信息时,它都会被发送到着陆页,并在其中更新所有 3 个表。
如果用户选择第 1 列,那么他们的信息将被插入到第 1 列表中,但空白行也会被插入到表 2 和表 3 中。
<?php
$con=mysqli_connect("URL", "DB", "password","DB_Name");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// escape variables for security
$Main= mysqli_real_escape_string($con, $_POST['Column_1']);
$storyn1 = mysqli_real_escape_string($con, $_POST['storyn1']);
$sql="INSERT INTO Column_1 (Link1, storyn1)
VALUES ('$Main', '$storyn1')";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
mysqli_close($con);
$con=mysqli_connect("URL", "DB", "password","DB_Name");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// escape variables for security
$MLB= mysqli_real_escape_string($con, $_POST['MLB']);
$storyn2 = mysqli_real_escape_string($con, $_POST['storyn2']);
$sql="INSERT INTO Column_2 (Link, storyn2)
VALUES ('$MLB', '$storyn2')";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
mysqli_close($con);
$con=mysqli_connect("URL", "DB", "password","DB_Name");;
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// escape variables for security
$Column_3= mysqli_real_escape_string($con, $_POST['Column_3']);
$storyn3 = mysqli_real_escape_string($con, $_POST['storyn3']);
$sql="INSERT INTO Column_3 (Link3, storyn3)
VALUES ('$Column_3', '$storyn3')";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
mysqli_close($con);
?>
我觉得我将空白行插入表格的原因是因为此页面包含所有 3 个表格的插入代码。最好的做法是什么?我是否需要 3 个单独的着陆页来容纳这些插入代码?
这是根据以下建议更新后的代码:
// escape variables for security
$Main= mysqli_real_escape_string($con, $_POST['Column_1']);
$storyn1 = mysqli_real_escape_string($con, $_POST['storyn1']);
$MLB= mysqli_real_escape_string($con, $_POST['MLB']);
$storyn2 = mysqli_real_escape_string($con, $_POST['storyn2']);
$Column_3= mysqli_real_escape_string($con, $_POST['Column_3']);
$storyn3 = mysqli_real_escape_string($con, $_POST['storyn3']);
if(!empty($_POST['Column_1']) && !empty($_POST['storyn1'])) {
$sql="INSERT INTO Column_1 (Link1, storyn1)
VALUES ('$Main', '$storyn1')";
}
if(!empty($_POST['MLB']) && !empty($_POST['storyn2'])) {
$sql="INSERT INTO Column_2 (Link, storyn2)
VALUES ('$MLB', '$storyn2')";
}
if(!empty($_POST['Link3']) && !empty($_POST['storyn3'])) {
$sql="INSERT INTO Column_3 (Link3, storyn3)
VALUES ('$Column_3', '$storyn3')";
}
?>
最佳答案
一个简单的方法是使用 PHP empty()在执行插入操作之前检查用户提交的值是否为空的方法。所以你的代码可能看起来像:
<?php
if(!empty($_POST['Column_1']) && !empty($_POST['storyn1'])) {
// insert into table Column_1
}
if(!empty($_POST['MLB']) && !empty($_POST['storyn2'])) {
// insert into table Column_2
}
if(!empty($_POST['Link3']) && !empty($_POST['storyn3'])) {
// insert into table Column_3
}
?>
至于是否需要有3个独立的landing page(或者forms,views等),不是必须的;这实际上取决于您的 3 列是否形成一个有凝聚力的逻辑分组。我的建议绝对是重构您的 PHP 代码以使用 classes and objects .
关于php - 防止空数据插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25152290/