mysql — php echo exit () и необязательное поле

два тривиальных вопроса:

у меня есть этот скрипт управления PHP, используемый для обновления необязательных полей в базу данных:

if(strlen($nome) == ""){$_POST['nome'] = $nome_vecchio; }
elseif(strlen($nome) < 2 || strlen($nome) > 20 )
{echo('Se vuoi modificare il campo nome, assicurati che lo
stesso sia superiore ai 2 caratteri ed inferiore ai 20!</br>'); exit();}
  1. как распечатать содержимое сценария в эхо-формате на той же странице моей формы?

Если я удаляю выход, скрипт «Se vuoi modificare il campo nome …» печатается на той же странице, но база данных неправильно заполнена неверной информацией. как будто сценарий управления будет служить только для его печати,
без блокировки пользователя. это как если бы скрипт управления служил только для того, чтобы напечатать мне фразу, содержащуюся в echo, как я могу это исправить?

  1. скрипт для необязательного поля

if (strlen ($ nome) == «») {$ _ POST [‘nome’] = $ nome_vecchio; }

не работает: я хочу, чтобы, если пользователь хочет обновить это имя, он должен вставить слово, включающее 2 и 20 букв, но если он не хочет обновить поле, он также не может заполнить его, и база данных должна ничего не перезаписывать, сохраняя ранее введенное имя (например, на этапе регистрации)
Как я могу это сделать?

Редактировать:

спасибо за ваши ответы, я пытаюсь сделать метод @Michael Johnson и @Valkyrurr тоже, но ничего.

  1. сценарий:

    header (‘Расположение: «errore.php»‘)

не работает! на странице errore.php я положил:

<?php
// Includo la connessione al database
require('config.php');

if(!isset($_SESSION['login']))
{ header('Location: login.php'); exit; }

echo('Se vuoi modificare il campo nome, assicurati che lo
stesso sia superiore ai 2 caratteri ed inferiore ai 20!<br>');
?>

но это сравнивает: доступ запрещен! Ошибка 403 …

и 2. этот скрипт:

$nome = trim($nome);
if (strlen($nome) == 0) {
$_POST['nome'] = $nome_vecchio;}

перезаписывает поле в моей базе данных с помощью «».

Чтобы лучше объяснить, как я работаю над кодом, я отправлю вам все, что я пишу, возможно, это еще одна ошибка, которую я никогда не видел или я никогда не считал ошибкой! Я надеюсь, что вы понимаете мой английский спагетти! 🙂

    if(isset($_POST['modifica_dati']))
{
$nome = $_POST['nome'];
$query_nome =  mysql_query("SELECT nome FROM utenti WHERE id = '" .             $_SESSION['login'] . "' LIMIT 1");
$row_nome = mysql_fetch_array($query_nome);
$nome_vecchio = $row_nome['nome'];

$nome = trim($nome); // Make sure there are no extra spaces at beginning or end
if(strlen($nome) == 0){$_POST['nome'] = $nome_vecchio; }
if(strlen($nome) < 2 || strlen($nome) > 20 )
{
header('Location: "errore.php"')
echo('Se vuoi modificare il campo nome, assicurati che lo
stesso sia superiore ai 2 caratteri ed inferiore ai 20!</br>');      exit();}

if (is_numeric($nome))
{echo('Se vuoi modificare il campo nome, assicurati che lo
stesso non cntenga numeri al suo interno!<br>'); exit();}

// verifico che il nome non contenga caratteri nocivi
elseif (!preg_match('/^[A-Za-z \'-]+$/i',$nome)) {
echo 'Il nome contiene caratteri non ammessi!<br>'; exit();}
}

Где это не так?

2

Решение

Попробуйте это:

  1. Для вашего второго if() заявление, перед echo exit(), выполните вызов перенаправления. Вот так, header('Location: "script_name_here.php"')
  2. strlen() в условии возвращает int, поэтому сравните его с 0 и не "", Вот так, if(strlen($nome) == 0){ }
1

Другие решения

Вывести сообщение на странице формы можно несколькими способами. Если вы отображаете форму с тем же сценарием, который ее обрабатывает, вы можете поместить сообщение в переменную и отобразить его позже. Вам, конечно, понадобится дополнительный код для предотвращения изменения базы данных (возможно, что-то вроде добавления $_POST['nome'] = $nome_vecchio; вместо выхода.

Перенаправление, предложенное @Valkyrurr, также возможно, если ваши сценарии являются отдельными. Вам нужно будет предоставить способ указать на ошибку.

Как уже упоминалось, strlen() не используется правильно. Я бы предложил что-то вроде

$nome = trim($nome); // Make sure there are no extra spaces at beginning or end
if (strlen($nome) == 0) {
$_POST['nome'] = $nome_vecchio;
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector