使用define()获取网站名称

时间:2011-04-16 20:23:48

标签: php forms

我有一个页面,其形式如下:

        <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”,以便我可以在网站的其他位置回显常量。由于某种原因,这是行不通的。我在这里犯了一些明显的错误吗?

4 个答案:

答案 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攻击。