我有一个页面,其形式如下:
<form method="POST" action="scripts/save-settings2.php">
<div id="posts">
<div class="post">
<div>
<label for="siteName">Site Name</label>
<div class="input-wrap">
<input value="<?php echo constant('siteName'); ?>" type="text" name="siteName" />
</div>
</div>
<input type="submit" value="Save" />
<a href="posts.php" class="cancel">Cancel</a>
</div> <!--Post-->
</div> <!--Posts-->
</form>
输入的值将发送到此脚本:
include '../includes/database-login.php';
if (isset($_POST['siteName'])) {
$siteName = mysql_real_escape_string($_POST['siteName']);
define("siteName", "$siteName");
header('Location: ../settings.php');
} else {
header( 'Location: ../newpost-error.php' );
}
我要做的是将用户填写的内容填入siteName输入字段,并将其定义为常量“siteName”,以便我可以在网站的其他位置回显常量。由于某种原因,这是行不通的。我在这里犯了一些明显的错误吗?
答案 0 :(得分:2)
仅定义脚本执行的最后生命,它们不会持续通过重定向
查看会话,并将会场名称存储在会话中
// store in session
$_SESSION['siteName'] = $siteName;
// retrieve from session
$siteName = $_SESSION['siteName']';
答案 1 :(得分:0)
如果你改变页面,我不相信常数会停留。
答案 2 :(得分:0)
改变这个:
define("siteName", "$siteName");
对此:
define("siteName", $siteName);
最好将siteName设置为大写,如果要选择常量的内容,请执行以下操作:
echo siteName;
答案 3 :(得分:0)
编程中的常量应该只用于在执行开始之前已知的事情,并且永远不会改变。像这个典型的例子一样:
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'database_name_here');
/** MySQL database username */
define('DB_USER', 'username_here');
/** MySQL database password */
define('DB_PASSWORD', 'password_here');
不要将常量用于用户输入。常量应始终使用THE_ALL_CAPS_NAMING_SCHEME
。
如果您真的只想在整个应用程序中使用变量,可以使用super global。
同样的常量就像变量一样,只在程序执行时存储在内存中 - 一旦执行完毕,值就会消失。
如果要在多个请求中使用值,则可以将其存储在数据库,Memcached或Redis等缓存机制或会话存储中。请注意,会话依赖于浏览器中的cookie,并且是vulnerable to many kinds of hacks。
如果您正在构建内容管理系统而不是将此数据保存在数据库中 - 而不是按照其他一些答案的建议在会话中。由于会话是一种个人存储,对于不同的用户来说不一样。
另外,在用于清理数据库输入时不要使用mysql_real_escape_string
does not properly prevent SQL injection attacks,并且不会阻止用户将恶意javascript注入页面的XSS攻击。