php - 准备好的语句将列设置为空
问题描述
我正在尝试将我的代码从转义字符串设置为准备好的语句。我收到一条错误消息,指出列“名称”不能为空。'name' 列应该来自 post 方法。我不确定使用问号是否是一种好方法,但这就是他们在不同页面上写的内容。
<form action="inserttest.php" method="post">
我的插入代码:
<?php
session_start();
$link = mysqli_connect("localhost", "root", "", "reg");
// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Prepare an insert statement
$sql = "INSERT INTO cards (name, phone, phone2, email, zipcode, address, job, description, userid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
if($stmt = mysqli_prepare($link, $sql)){
// Bind variables to the prepared statement as parameters
mysqli_stmt_bind_param($stmt, "ssssisssi", $name, $phone, $phone2, $email, $zipcode, $address, $job, $description, $userid);
if(isset($_POST['name'])){
$name = $_POST['name'];
}
if(isset($_POST['phone'])){
$phone = $_POST['phone'];
}
if(isset($_POST['phone2'])){
$phone2 = $_POST['phone2'];
}
if(isset($_POST['email'])){
$email = $_POST['email'];
}
if(isset($_POST['zipcode'])){
$zipcode = $_POST['zipcode'];
}
if(isset($_POST['address'])){
$address = $_POST['address'];
}
if(isset($_POST['job'])){
$job = $_POST['job'];
}
if(isset($_POST['description'])){
$description = $_POST['description'];
}
if(isset($_SESSION['id'])){
$userid = $_SESSION['id'];
}
// Attempt to execute the prepared statement
if(mysqli_stmt_execute($stmt)){
echo "Records inserted successfully.";
} else{
echo "ERROR: Could not execute query: $sql. " . mysqli_error($link);
}
} else{
echo "ERROR: Could not prepare query: $sql. " . mysqli_error($link);
}
// Close statement
mysqli_stmt_close($stmt);
// Close connection
mysqli_close($link);
?>
解决方案
如果您要检查是否设置了 POST 参数,即 if(isset($_ ...
提供 else 语句。
if(isset($_POST['name'])){
$name = $_POST['name'];
} else {
$name = 'No name was provided';
}
如果名称很重要且必须提供:您可以在执行之前将其放在查询的顶部,如果未提供则退出结果
if(isset($_POST['name'])){
$name = $_POST['name'];
} else {
die('Name has to be provided to proceed');
}
其他检查:检查您的表单是否有名称字段并且名称是否正确。
推荐阅读
- javascript - 我对使用 javascript 将城市列表加载到下拉列表中有些困惑
- python - python中的语音翻译器
- typescript - “getManager().query()”在 TypeORM 中是如何工作的?
- google-chrome - 如何添加多命令行参数以在 android 中打开 chrome?
- c++ - 如何将 std::set_terminate 与 SetUnhandledExceptionFilter 一起使用?
- spring-cloud-dataflow - 如何在 Spring Cloud 数据流中使用过滤器?
- passwords - 类中的 Pimcore 密码数据类型
- function - Octave 的默认 LU 分解函数错误
- reactjs - React 中的 JWT 安全路由
- php - 我实施 2 因素授权有什么问题?