Использование define () для названия сайта - PullRequest
0 голосов
/ 17 апреля 2011

У меня есть страница с такой формой:

        <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 ]

2 голосов
/ 17 апреля 2011

определяет только последний срок выполнения скрипта, они не будут длиться при перенаправлении

просмотр сеансов и сохранение имени сайта в сеансе

// store in session
$_SESSION['siteName'] = $siteName;

// retrieve from session
$siteName = $_SESSION['siteName']';
0 голосов
/ 28 ноября 2015

Константы в программировании должны действительно использоваться только для вещей, которые известны еще до начала выполнения и которые никогда не изменятся.Как этот типичный пример:

// ** 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.

Если вы действительно хотите использовать переменную во всем приложении, вы можете использовать суперглобальный .

Также константы простоподобно тому, как переменные хранятся только в памяти во время выполнения вашей программы - как только выполнение завершится, значения исчезают.

Если вы хотите использовать значение в нескольких запросах, вы либо сохраните его в базе данных, в кешетакой механизм, как Memcached или Redis или сессия хранения.Обратите внимание, что сеанс основан на файлах cookie в браузере и уязвим для многих видов хаков .

Если вы создаете систему управления контентом, чем сохранять эти данные в базе данных -не в сессии, как рекомендовано некоторыми другими ответами.Поскольку сеанс является своего рода персональным хранилищем и не будет одинаковым для разных пользователей.

Кроме того, не используйте mysql_real_escape_string, он не предотвращает должным образом атаки SQL-инъекций при использовании дляочищает ввод базы данных и не предотвращает XSS-атаки, когда пользователи вводят вредоносный JavaScript-код на страницу.

0 голосов
/ 17 апреля 2011

Измените это:

define("siteName", "$siteName");

На это:

define("siteName", $siteName);

Будет лучше установить верхний регистр siteName, и если вы хотите выбрать содержимое константы, сделайте это:

echo siteName;
0 голосов
/ 17 апреля 2011

Я не верю, что константа останется, если вы смените страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...