X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Проверяем переменную с помощью isset(), установлена ли переменная
Banderas
Banderas
Topic Starter сообщение 4.1.2011, 14:21; Ответить: Banderas
Сообщение #1


Проверяю данные на заполнение через isset(var string, var string, ...). В функцию isset() можно ввести несколько переменных, и если хотябы одна из них не работает (её нет) то функция выдает ELSE. Если все переменные есть - TRUE.

Почему тогда функция не работает. если я не заполнил хотябы одно поле? Сам код (обработчик)
[php]<?php
$D_ROOT = $_SERVER['DOCUMENT_ROOT'];
require('functions.txt');
$fio = $_POST['fio'];
$mail = $_POST['mail'];
$text = $_POST['text'];
$but_on = $_POST['good'];

if (!isset($but_on, $fio, $mail, $text)) {
echo 'Вы попытались зайти на сайт напрямую или не заполнили поля ввода.';
form('feedback.php.', 'Заполнить данные'); # самописная функция для создания кнопок, полей
exit;
} else {
$date = date('H:i:s jS');
echo 'Сообщение отправлено в '.$date;
}

if (isset($date)) {
if (!preg_match("/^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$/", $mail)) {
echo 'Не правильно ввели адрес элекстронной почты';
exit;
}
$data = $date.' || '.
$fio.' || '.
$mail.' || '.
$text."\r\n";
}
$fp = fopen("$D_ROOT/../www/orders/feedback.txt", 'a+b');
fwrite($fp, trim($data), strlen($data));
fclose($fp);
?>[/php]

Формы
<html>
<head>
<title>Обзор заказов</title>
</head>
<body>
<h2>Автозапчасти от Боди;)</h2>
<h3>Обратная связь</h3>
<form action='fb_handler.php' method='post'>
Введите свои инициалы
<br><input type='text' name='fio' />

<br>Адресс e-mail
<br><input type='text' name='mail' />

<br>Введите текст сообщения
<br><textarea name='text'></textarea>

<p><input type='submit' name='good' value='Отправить' />
<input type='reset' value='Резетнуть?' />
</form>
</body>
</html>


пс. знаю что код не рациональный, но я ещё не приступал к оптимизации и отладки
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 4.1.2011, 16:25; Ответить: matroskin8
Сообщение #2


Ф-ция isset() проверяет существование переменной. А немного выше такие переменные были назначены:

[php]$fio = $_POST['fio'];

$mail = $_POST['mail'];

$text = $_POST['text'];

$but_on = $_POST['good'][/php]

Соответственно, данные переменные существуют (и не важно пусты они или нет) ;) и, соответственно, будет срабатывать блок условия иначе. Правильнее будет проверять переменные на пустоту. Например, так:

[php]if (!empty($_POST['fio']))$fio = $_POST['fio'];;

if (!empty($_POST['mail']))$mail = $_POST['mail'];

if (!empty($_POST['text']))$text = $_POST['text'];[/php]

$good (нажата ли кнопка) вообще лучше проверять на существование в самом начале скрипта и, если ее не существует, т.е., кнопка не нажата, то просто делать редирект с выводом соответствующего сообщения и прерывать выполнение скрипта:

[php]if(!isset($_POST['good'])){

header('Refresh: 3; URL=адрес перенаправления');

echo 'Вход сюда только со страницы с формой.';

exit;

}

$D_ROOT = $_SERVER['DOCUMENT_ROOT'];

require('functions.txt');

if (!empty($_POST['fio']))$fio = $_POST['fio'];;

if (!empty($_POST['mail']))$mail = $_POST['mail'];

if (!empty($_POST['text']))$text = $_POST['text'];

...[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yury_mw
yury_mw
сообщение 4.1.2011, 16:30; Ответить: yury_mw
Сообщение #3


Banderas,
Почему тогда функция не работает. если я не заполнил хотябы одно поле?

Ну так вы же сами заполнили переменные, которые проверяете:
$fio = $_POST['fio'];
$mail = $_POST['mail'];
$text = $_POST['text'];
$but_on = $_POST['good'];
они не могут быть не установлены, после этих присваиваний.
Вам следует проверять установлены ли $_POST['fio'], $_POST['mail'] и т.д. и пустая или нет передана строка через них.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
Topic Starter сообщение 5.1.2011, 3:17; Ответить: Banderas
Сообщение #4


Всем спасибо, забыл об empty()
Вопросик, почему не перекидывает но новую строку при записи в файл? Вроде должно все правильно работать, в $data указал переход строки \r\n, но записывает все вот так вот
00:09:32 5th || Дроворуб Виктор Медведевич || medvedev@yandex.ru || Я сейчас смотрю фильм Елки!01:07:56 5th || Вольский Владислав Сергеевич || vladserg@mail.ru || Печальная история...((01:09:34 5th || Вольский Владислав Сергеевич || vladserg@mail.ru || Печальная история...((01:09:36 5th || Вольский Владислав Сергеевич || vladserg@mail.ru || Печальная история...((


В чем проблема?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 5.1.2011, 12:15; Ответить: matroskin8
Сообщение #5


Проблема вот в этой строке:
[php]fwrite($fp, trim($data), strlen($data));[/php]
Данная ф-ция - fwrite() - должна иметь 2 параметра: куда записываем (дескриптор) и что записываем, а здесь указано 3. К тому же, первый обработан ф-цией trim(), которая обрежет строку и уже, скорее всего, сделает невозможным перенос, поскольку он будет также вырезан (это надо будет проверить, но скорее всего так). strlen($data) - вот это вообще не понятно к чему? Мало того, что этот параметр лишний, так он к тому же еще и бесполезен, поскольку просто возвращается длина строки безо всякого вывода. В общем, правильно так:
[php]fwrite($fp, $data);[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
Topic Starter сообщение 5.1.2011, 12:28; Ответить: Banderas
Сообщение #6


matroskin8, спасибо!

trim() действительно удаляла символы переноса строки и символ возврата карeтки. Зато можно использовать ltrim() который работает аналогично trim(), но удаляет все символы слева, тоесть в конце \r\n не удалиться ;)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 5.1.2011, 12:44; Ответить: matroskin8
Сообщение #7


Пожалуйста ;)
Если так боишься пробелов, то лучше их сначала удалить функцией trim(), а затем добавить к переменной перенос, потому как ltrim() выглядит тогда как полумера:
[php]$data = $date. ' || ' . $fio. ' || ' .$mail. ' || ' .$text;
$data = trim($data);
$data .= "\r\n";
...
fwrite($fp, $data);[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 19.1.2011, 12:57; Ответить: ZiTosS
Сообщение #8


Banderas, немного пооффтопим, но по делу.

Можно уже приучать себя не выносить обработку действий в отдельный файл, а перенаправлять пользователя на эту же страницу или на основной скрипт с параметрами. Обработка данных идет перед выводом, вот и всё. В обработке данных могут выставляться нужные данные, формироваться ошибки. А скрипт ниже уже при выводе сам должен определить, что ему вывести - ошибки, форму, текст и т.д. В зависимости от сложившейся ситуации.
Пойми, структура перенаправлений она конечно хороша, но вот незадача, ты отправил пользователя на файл с обработкой, но после обработки ты точно не знаешь куда направить пользователя. Конечно ты можешь прямо в файле обработчике сформировать путь на возвратную страницу. Но тут не будет никакой логики - почему, куда и зачем.
Возможно я не прав, тогда меня кто-нибудь поправит ;)

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Раскройте свой потенциал заработка с помощью 2x2 Media Network — вашего пути к выгодным предложениям CPA!
Присоединяйтесь к 2x2 Media Network, вашему надежному партнеру в мире
9 2x2MediaLimited 2794 20.3.2024, 4:33
автор: 2x2MediaLimited
Горячая тема (нет новых ответов) Проверка позиций сайтов в поисковых системах с помощью Positon.ru
Мониторинг продвижения сайтов
182 Positon 178934 23.2.2024, 9:53
автор: Positon
Открытая тема (нет новых ответов) WEB и SMM дизайн — решение ваших бизнес задач с помощью дизайна
8 justburger 5297 6.7.2020, 9:18
автор: justburger
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыЦелевой трафик +30% за 4 месяца с помощью SEO продвижения у Хачатура - отзывы и кейсы в топике
6 Mikejones 3420 9.7.2019, 10:47
автор: Mikejones
Открытая тема (нет новых ответов) Гарантированно привлечем от 1000 подписчиков за 1 месяц с помощью комплексного продвижения
8 masija_coke 3156 1.1.2019, 0:59
автор: masija_coke


 



RSS Текстовая версия Сейчас: 28.3.2024, 16:57
Дизайн