PHP表单验证和POST变量
我是PHP新手,我正在尝试一些表单验证。我有以下代码: 我提交一个表单,并在通过验证后将数据提交给SQL语句。如果表单有效,它将重定向到外部成功页面 我不能做的是将原始的post变量放到success页面上。请问我怎么做?我的代码如下: PHP:PHP表单验证和POST变量,php,post,Php,Post,我是PHP新手,我正在尝试一些表单验证。我有以下代码: 我提交一个表单,并在通过验证后将数据提交给SQL语句。如果表单有效,它将重定向到外部成功页面 我不能做的是将原始的post变量放到success页面上。请问我怎么做?我的代码如下: PHP: 使用prepared语句您应该考虑这样一种方法,而不是直接在sql中嵌入变量 <?php function user_input($data) { $data = trim($data); $data =
使用prepared语句
您应该考虑这样一种方法,而不是直接在sql中嵌入变量
<?php
function user_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$firstname = $email = $lastname = $grade = $role = false;
if( $_SERVER["REQUEST_METHOD"] == "POST" ) {
$errors=array();
if( empty($_POST["firstname"])) $errors[] = "First name is required";
else $firstname = user_input( $_POST["firstname"] );
if( empty($_POST["lastname"])) $errors[] = "Last mame is required";
else $lastname = user_input($_POST["lastname"]);
if( empty($_POST["email"])) $errors[] = "Email is required";
else $email = user_input($_POST["email"]);
if( empty($_POST["grade"]) ) $errors[] = "Grade is required";
else $grade = user_input($_POST["grade"]);
if( empty($_POST["role"])) $errors[] = "Role is required";
else $role = user_input( $_POST["role"] );
if( empty( $errors ) ){
$stmt = $conn->prepare("INSERT INTO `Tom`.`staff_details` (`first_name`, `surname`, `role`, `grade`,`email`) VALUES (?,?,?,?,?);");
if( $stmt ){
$stmt->bind_param('sssss',$firstname,$lastname,$role,$grade,$email);
$stmt->execute();
exit( header( 'Location: staff_added.php' ) );
} else { echo 'statement failed'; }
} else {
foreach( $errors as $error )echo $error . '<br />';
}
}
?>
使用准备好的语句
您应该考虑这样一种方法,而不是直接在sql中嵌入变量
<?php
function user_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$firstname = $email = $lastname = $grade = $role = false;
if( $_SERVER["REQUEST_METHOD"] == "POST" ) {
$errors=array();
if( empty($_POST["firstname"])) $errors[] = "First name is required";
else $firstname = user_input( $_POST["firstname"] );
if( empty($_POST["lastname"])) $errors[] = "Last mame is required";
else $lastname = user_input($_POST["lastname"]);
if( empty($_POST["email"])) $errors[] = "Email is required";
else $email = user_input($_POST["email"]);
if( empty($_POST["grade"]) ) $errors[] = "Grade is required";
else $grade = user_input($_POST["grade"]);
if( empty($_POST["role"])) $errors[] = "Role is required";
else $role = user_input( $_POST["role"] );
if( empty( $errors ) ){
$stmt = $conn->prepare("INSERT INTO `Tom`.`staff_details` (`first_name`, `surname`, `role`, `grade`,`email`) VALUES (?,?,?,?,?);");
if( $stmt ){
$stmt->bind_param('sssss',$firstname,$lastname,$role,$grade,$email);
$stmt->execute();
exit( header( 'Location: staff_added.php' ) );
} else { echo 'statement failed'; }
} else {
foreach( $errors as $error )echo $error . '<br />';
}
}
?>
您可以将变量存储在会话对象中,然后在任何地方都可以使用:
<?php
session_start();
//other code...
$_SESSION["role"] = $role;
//other code...
?>
您可以将变量存储在会话对象中,然后在任何地方都可以使用:
<?php
session_start();
//other code...
$_SESSION["role"] = $role;
//other code...
?>
您需要在会话中存储一些信息,或者在成功页面上存储用户ID并从数据库加载数据。-有多种方法可以做到这一点,但这只是其中的两种。通过在sql语句中直接嵌入变量而不是使用占位符来绑定变量,您完全忽略了准备语句的要点。我在很多地方看到了user\u input()
函数,就像这里一样,这有点被误解和误用。我在W3schools中看到了一个在线示例,可以让我开始学习,但其中的解释相当模糊。接下来,当我开始重构时,我会更加理解这些准备好的语句,我只是一步一步地进行。您需要在会话中存储一些信息,或者存储用户ID,并在成功页面上从数据库加载数据。-有多种方法可以做到这一点,但这只是其中的两种。通过在sql语句中直接嵌入变量而不是使用占位符来绑定变量,您完全忽略了准备语句的要点。我在很多地方看到了user\u input()
函数,就像这里一样,这有点被误解和误用。我在W3schools中看到了一个在线示例,可以让我开始学习,但其中的解释相当模糊。接下来,当我开始重构时,我会更加理解这些语句,我只是一步一步地进行重构,在应用这些代码时,我会遇到一个错误。我的连接使用PDO,它告诉我bind_params是PDOI找到的bindParam的一个未定义方法,该方法有效。感谢您对prepared Statement教授的帮助-我的错误~我以为您使用的是mysqli
,而不是PDO。我在应用此代码时出错了。我的连接使用PDO,它告诉我bind_params是PDOI找到的bindParam的一个未定义方法,该方法有效。感谢您对prepared Statement ssorry的帮助-我的错误~我以为您使用的是mysqli
而不是PDO。我需要在确认页面中声明会话结束吗?您应该使用session_destroy(),在您的情况下,我想您不应该在页面中调用它,您可以使用$\u session['formdata']=$\u POST
然后使用$\u SESSION['formdata']['role']
等而不是单个会话变量访问元素我需要在确认页面中声明会话结束吗?您应该使用SESSION\u destroy(),在您的情况下,我认为您不应该在页面中调用它,您可以使用$\u SESSION['formdata']=$\u POST
然后使用$\u会话['formdata']['role']
等而不是单个会话变量访问元素