PHP$\u POST[]在重定向后未作废
我正在向诚实的批评和建议敞开心扉 问题在于函数$\u POST[void]在重定向后有效。Quotes.add.php是一个表单,它指向Quotes.done.php,提交到mysql并重定向回Quotes.add.php,带有echo$msg并重置以再次填写。PHP$\u POST[]在重定向后未作废,php,redirect,Php,Redirect,我正在向诚实的批评和建议敞开心扉 问题在于函数$\u POST[void]在重定向后有效。Quotes.add.php是一个表单,它指向Quotes.done.php,提交到mysql并重定向回Quotes.add.php,带有echo$msg并重置以再次填写。 是header();在这种情况下最好的方法是什么 quotes.done.php else{ include 'data.php'; $query = "INSERT INTO quotes (`id`, `quotes
是header();在这种情况下最好的方法是什么 quotes.done.php
else{
include 'data.php';
$query = "INSERT INTO quotes (`id`, `quotes`, `artist`, `date`) VALUES ('null', '$_POST[text]', '$_POST[artist]', 'null')";
$result = mysql_query($query) or die (mysql_error());
$_POST['void'] = "$_POST[artist] Was Added Successfully to database";
unset ($_POST['artist']);
//var_dump($_POST['void']);
//exit;
header ("location: quotes.add.php");
exit;
}
quotes.add.php
if (isset($_POST['void'])) {
$msg = $_POST['void'];
}else{
$msg = "Please insert artist";
}
如果要保留$\u POST变量,请不要重定向。重定向导致客户端浏览器仅使用$\u GET参数重新请求页面
将记录保存到数据库中。获取新的记录ID,重定向到一个页面并传入ID。然后使用ID获取并显示记录。如果进行重定向,我认为您必须使用$\u会话。 我会: 然后
session_start();
if (isset($_SESSION['msg'])) {
$msg = $_SESSION['msg'];
unset($_SESSION['msg'];
}else{
$msg = "Please insert artist";
}
重定向不会将值发布到页面。您可以使用session或GET
$message = urlencode("$_POST[artist] Was Added Successfully to database");
header ("location: quotes.add.php?message=" . $message);
在quotes.add.php页面上
echo $_GET['message'];
这是清洁、正确和安全的方法: quotes.done.php
<?php
else{
include 'data.php';
// escape the input, to avoid SQL injection
$text = mysql_real_escape_string($_POST['text']);
$artist = mysql_real_escape_string($_POST['artist']);
$query = "INSERT INTO quotes (`id`, `quotes`, `artist`, `date`) VALUES ('null', '{$text}', '{$artist}', 'null')";
$result = mysql_query($query);
// always set your variables to a default value
$success = false;
// did the query execute successfully?
if($result){
$success = true;
}
header('Location: quotes.add.php?result=addedquote&artist='.urlencode($_POST['artist']).'&success='.urlencode($success));
exit;
}
?>
<?php
$msg = '';
if(isset($_GET['result']) && $_GET['result'] == 'addedquote') {
$artist = htmlentities(urldecode($_GET['artist']), ENT_QUOTES, 'UTF-8', false);
$success = (bool) urldecode($_GET['success']);
if($success){
$msg = "$artist Was Added Successfully to database";
} else{
$msg = "Failed to Add $artist to database";
}
} else{
$msg = "Please insert artist";
}
?>
基于header()的重定向会导致浏览器对重定向到的URL发出GET请求。重定向时不发送POST值。此外,对_POST数组所做的任何更改(如在成功消息中所做的更改)都不会粘贴到表单或重定向中。这是一个无用的操作。您是否正在使用某种框架来通过会话持久化$\u POST数组?你在其他地方访问它吗?颤抖。。。厌倦了解释此类代码的漏洞:/有点离题了,但您需要在mysql查询上设置一些安全性!当我只是为了理解php功能而进行个人操作时,似乎没有理由添加安全性。你可以从书本中学到的东西只有这么多。它是有效的,但你有一个额外的查询,他只需要传递一条消息。要添加到你的答案中,你需要session\u start()
设置和阅读会话。为什么页面刷新$\u POST[]即使在未设置之后也可以为真,而$\u session[]保持为假?嗯,需要做研究。谢谢你的帮助!谢夫,我感谢你的耐心。您的评论已经被注意到了,希望我在以后的问题中不会再犯同样的错误。@crash\u cource:当然。我不想插嘴解释,因为代码有点“乱七八糟”,但我没有看到其他人注意到这些东西,所以我只好这么做。:)继续尝试和学习,但在部署某些东西之前,请您信任的有足够经验的人至少对安全问题进行一次快速审核。
<?php
$msg = '';
if(isset($_GET['result']) && $_GET['result'] == 'addedquote') {
$artist = htmlentities(urldecode($_GET['artist']), ENT_QUOTES, 'UTF-8', false);
$success = (bool) urldecode($_GET['success']);
if($success){
$msg = "$artist Was Added Successfully to database";
} else{
$msg = "Failed to Add $artist to database";
}
} else{
$msg = "Please insert artist";
}
?>