• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Помогите с остановкой скрипта в Php

  • Автор темы emeraudx
  • Дата начала
E

emeraudx

Помогите кто может. Проблема в следующем.

Когда посетитель отправляет письмо с сайта, он заполняет форму, если он, допустим, заполнил не все поля, то обработчик (дан ниже) выводит ошибку "ОШИБКА". Но поскольку функция exit() завершает скрипт, то остальные тэги HTML, которые идут следом за скриптом, не обрабатываются. А это не есть хорошо . Можно ли сделать так, чтобы работу завершил только скрипт, не трогая оставшиеся тэги страницы?

PHP:
<? 
include ("blocks/bd.php");

if (isset($_POST['id'])) {$id = $_POST['id'];}
if (isset($_POST['login'])) {$login = $_POST['login'];}
if (isset($_POST['email'])) {$email = $_POST['email'];}
if (isset($_POST['author'])) {$author = $_POST['author'];} if ($author == '') { unset($author);}
if (isset($_POST['name'])) {$name = $_POST['name'];} if ($name == '') { unset($name);}
if (isset($_POST['mail_submit'])) {$mail_submit = $_POST['mail_submit'];}


if (empty($author) or empty($name) or empty($mail_submit))
{
exit ("ОШИБКА");
}
else
{
$name = stripslashes($name);

$author = stripslashes($author);



$name = htmlspecialchars($name);

$author = htmlspecialchars($author);


$subject = "текст";
$to = "кому письмо";
$from='откуда письмо';
$message = "текст письма";
$verify = mail($to,$subject,$message,'From:'.$from."\nContent-type:text/plain; Charset=windows-1251\r\n");
}

if ($verify == 'true')
{
exit ("Успешно");
}
else 
{
echo ("Ошибка при отправлении");
}
?>


Если можете объясните поподробее и попроще, т.к. я тока начинаю осваивать php.
 
K

kr0k

PHP:
<?
include ("blocks/bd.php");

/**
* Проверка на корректность данных
*/
function checkData(){
// Всевозможные проверка добавляем суда
if (isset($_POST['id'])) $id = $_POST['id'];
if (isset($_POST['login'])) $login = $_POST['login'];
if (isset($_POST['email'])) $email = $_POST['email'];
if (isset($_POST['author'])) $author = $_POST['author'];
if ($author == '') unset($author); // смысл этой строчки поясните
if (isset($_POST['name'])) $name = $_POST['name'];
if ($name == '') unset($name); // и этой тоже
if (isset($_POST['mail_submit'])) $mail_submit = $_POST['mail_submit'];

if ($author && $name && $mail_submit){
$dataCorrect = true;
} else {
$dataCorrect = false;
}
return $dataCorrect;
}

/**
* Пользовательсякая функция для отправления сообщений
*/
function mailer(){
// Всевозможные варианты формирования письма добавляем суда
$name = stripslashes($name);
$name = htmlspecialchars($name);
$author = stripslashes($author);
$author = htmlspecialchars($author);

$subject = "текст";
$to = "кому письмо";
$from='откуда письмо';
$message = "текст письма";

$verify = mail($to,$subject,$message,'From:'.$from."\nContent-type:text/plain; Charset=windows-1251\r\n");
return $verify;
}

/**
* Точка входа(главная функция с которой все начинаеться)
*/
function main(){
if(checkData()){
if(mailer())
{
echo "Успешно";
}
else
{
echo ("Ошибка при отправлении");
}
}else{
echo 'ОШИБКА';
}
}

main();
?>

Работоспособность не проверял, надеюсь будет пару ошибочек что бы и Вы немножко поработали;)
По коду общие рекомендации, всю логику старайтесь оформлять в функции. Что бы одна функция делала одно дело.
Код конечно можно было настолько досканально не переписывать а просто заменить пару строк.

PS: все вопросы касательно web-программирования задавайте в соответствующий раздел. Я каждый день буду стараться по часику уделять ответам на вопросы пользователей.
 
E

emeraudx

if ($author == '') unset($author); // смысл этой строчки поясните

Если автор не вписал имя, а тупо поставил пробел, скрипт посчитает это как будто автор ввел свое имя, т.к. это символ. Это функция обрезает такие пробелы и не считает их за символы
 
K

kr0k

Если автор не вписал имя, а тупо поставил пробел, скрипт посчитает это как будто автор ввел свое имя, т.к. это символ. Это функция обрезает такие пробелы и не считает их за символы
Но тогда вероятней лучше бы было if ($author == ' ') unset($author);// пробел внутри кавычек.
И важно не забыть про два и три пробела, в итоге у нас бы получилось что-то вроде. :)
PHP:
if ($author == ' ') unset($author);
if ($author == ' ') unset($author);
if ($author == '  ') unset($author);
Ну а я бы посоветовал использовать что-то вроде $var = ;
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!