Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Очистка массива в PHP
Форумы портала PHP.SU » » HTTP и PHP » Очистка массива в PHP

Страниц (1): [1]
 

1. BigBoss2012 - 16 Октября, 2012 - 09:17:39 - перейти к сообщению
Ребята, помогите пожалуйста. Проблема следующая.

Бэкграунд:

Написал скриптяку регистрации пользователей на сайте. Все нормально работает практически. Пользователь заполняет форму --> Форма проходит валидацию -- >Если все хорошо - пишем в базу, если нет -- возращает ошибки валидации.

Беда:
1. При обновлении страницы или сразу после старта сценария форма выдает ошибки. Т.е пользователь зашел на страницу, ничего не вводил, а ему уже пишут, что введи мол правильно то-то и то.

2. При каждом обновлении страницы (после ввода правильных или неправльных данных) записи падают в базы. Auto-increment выдает новые ид-шники и пишет пустые значения в поля.

Полагаю, что все дело в том, что в суперглобаольной переменной $_POST остаются невалидные данные и интерпретатор молотит их, пока не получит новые. Писал такое условие, но оно не помогло:

if (!empty ($_POST[action])) {
$_POST[action] ="";
validation ();
}
else {
array_splice($_POST, 0);
}

Пояснение:

action - hidden поле с value='register'
validation () - подпрограмма валидации, Там ничего суперского нет, одни ифы для проверки значений
array_splice - вроде бы как бы функция для очистки массива, но походу тоже не помогла.

Ребята, помогите плиз! Я знаю что это легко. Может, посоветуйте что-нить на JavaScript.

Заранее огромное спасибо!
2. eai - 16 Октября, 2012 - 09:21:48 - перейти к сообщению
ниче не понял!
3. AlexAnder - 16 Октября, 2012 - 09:23:12 - перейти к сообщению
Цитата:
Беда:
1. При обновлении страницы или сразу после старта сценария форма выдает ошибки. Т.е пользователь зашел на страницу, ничего не вводил, а ему уже пишут, что введи мол правильно то-то и то.

проверka отправлены ли данные кнопкой Submit
PHP:
скопировать код в буфер обмена
  1. if(isset($_POST['nameofbuttonsubmit'])){
  2.  // validate
  3. }
4. BigBoss2012 - 16 Октября, 2012 - 09:25:20 - перейти к сообщению
AlexAnder, спасибо за мыслю!!

eai, ну че тут непонятного? валидация срабатывает раньше положенного события, вслдествии чего в базу пишкться пустые значения.
5. eai - 16 Октября, 2012 - 09:26:20 - перейти к сообщению
Еще вариант, на сабмит заполнять какое то невидимое поле в TRUE и проверять тока если оно заполнено
6. BigBoss2012 - 16 Октября, 2012 - 09:30:11 - перейти к сообщению
eai пишет:
Еще вариант, на сабмит заполнять какое то невидимое поле в TRUE и проверять тока если оно заполнено


eai, делаю такую проверку. Не помогает.

if (!empty ($_POST[action])) {
$_POST[action] ="";
validation ();
}
7. AlexAnder - 16 Октября, 2012 - 09:32:01 - перейти к сообщению
CODE (html):
скопировать код в буфер обмена
  1. <form action="index.php" method="POST">
  2. <p><label for="log">Login:</label></p>
  3. <p><input id="log" type="text" name="login"></p>
  4. <p><label for="pass">Password:</label></p>
  5. <p><input id="pass" type="password" name="password"></p>
  6. <p><input type="submit" value="Отправить" name="submit"></p>
  7. </form>



Что такое?
8. eai - 16 Октября, 2012 - 09:40:41 - перейти к сообщению
BigBoss2012 пишет:
eai пишет:
Еще вариант, на сабмит заполнять какое то невидимое поле в TRUE и проверять тока если оно заполнено


eai, делаю такую проверку. Не помогает.

if (!empty ($_POST[action])) {
$_POST[action] ="";
validation ();
}


А как ACTION заполняешь ?
Покажи код HTML/JS

Вариант который Alex предлагает мне не знаком но выглядит интересным
9. BigBoss2012 - 16 Октября, 2012 - 09:48:33 - перейти к сообщению
eai пишет:
А как ACTION заполняешь ?


<input type="hidden" value="register" name="action">
10. eai - 16 Октября, 2012 - 10:28:07 - перейти к сообщению
BigBoss2012 пишет:
eai пишет:
А как ACTION заполняешь ?


<input type="hidden" value="register" name="action">


А где код его заполнения на сабмит?
11. BigBoss2012 - 18 Октября, 2012 - 08:16:09 - перейти к сообщению
AlexAnder пишет:
CODE (html):
скопировать код в буфер обмена
<form action="index.php" method="POST">
<p><label for="log">Login:</label></p>
<p><input id="log" type="text" name="login"></p>
<p><label for="pass">Password:</label></p>
<p><input id="pass" type="password" name="password"></p>
<p><input type="submit" value="Отправить" name="submit"></p>
</form>

PHP:
скопировать код в буфер обмена
if(isset($_POST['submit'])) {
validate
}


Спасибо, попробовал. Результат такой же.

Кстати, немного поресерчил этот вопрос и нашел такой же баг на формах некоторых крупных сайтов.
(Добавление)
eai пишет:
А где код его заполнения на сабмит?


Вот тут пожалуйста поподробнее, если можно.
12. eai - 18 Октября, 2012 - 08:58:26 - перейти к сообщению
BigBoss2012 пишет:

Вот тут пожалуйста поподробнее, если можно.


Что бы заполнить какое либо поле на нажатие кнопки Сабмит надо на клиенте (браузере) использовать JavaScript

Рекомендую покопать в сем направлении, к примеру посмотреть либу jQuery
13. BigBoss2012 - 18 Октября, 2012 - 09:06:30 - перейти к сообщению
eai пишет:
Что бы заполнить какое либо поле на нажатие кнопки Сабмит надо на клиенте (браузере) использовать JavaScript

Рекомендую покопать в сем направлении, к примеру посмотреть либу jQuery


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

В принципе, на ПХП это реально осуществимо, но уж больно геморно - необходимо вычищать\перезаписывать хттп-заголовки, итд
14. eai - 18 Октября, 2012 - 09:12:40 - перейти к сообщению
Еще можешь предварительно проверять если от клиента пришел запрос где все поля или часть важных полей не заполнена то значит игнорировать этот запрос

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. if(isset($_POST['login']) and isset($_POST['password']))
  4. {
  5. // понеслась
  6. }
  7. else
  8. {
  9. // ниче не делать
  10. }
  11.  
  12.  
  13.  
15. BigBoss2012 - 21 Октября, 2012 - 17:37:19 - перейти к сообщению
Всем большое спаибо. Проблему практически решил.
Опишу в новой теме!

 

Powered by ExBB FM 1.0 RC1