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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: как создать массив с содержанием ошибок

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: оптимизация готового скрипта
teddy
Отправлено: 08 Апреля, 2013 - 23:09:30
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Всем привет. Очень нужна помощь для оптимизации данного скрипта. На сколько я понимаю он написан "криво", как начинающий не совсем понимаю как его оптимизировать. В добавок ко всему хочу выводить ошибки(если логин или другие поля не соответствует требованиям кода - писать типа "Неверный логин или пароль). Как сделать массив ошибок и вываливать его в нужное время что бы не писать кучу if-ов? Т.е сегодня у меня 3 поля, а завтра 10... пол страницы if-ами придется заполнить... Очень буду рад подробному объяснению. Из за этого не могу продолжать обучение дальше затем и решил попросить помощи на форуме. Да и ещё один момент, при вводе запрещенных символов мд5 конвертирует их в хеш из за чего запрещенные символы не блокируются. А без мд5 блокируются...
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. mysql_connect(localhost,root) or die(mysql_error());
  3. if(isset($_POST['submit'])){
  4.  
  5. $login = trim(strip_tags(preg_replace("/[^a-z0-9]/i", "",$_POST['login'])));
  6. $password = trim(strip_tags(md5(preg_replace("/[^a-z0-9]/i", "",$_POST['password']))));
  7. $confimp = trim(strip_tags(md5(preg_replace("/[^a-z0-9]/i", "",$_POST['confimp']))));
  8. if($password === $confimp and strlen($login)<3 and strlen($password)<3 and strlen($confimp)<3){
  9. $sql = "INSERT INTO mybases(login,password,confimp)VALUES('$login','$password','$confimp')";
  10. }
  11. else{
  12. echo "Что то не так";
  13. }
  14. }
  15.  
  16. ?>
  17. <center>
  18. <pre>
  19. <form action='<?PHP $_SERVER['PHP_SELF']?>' method='post'>
  20. Укажите ваш логин:&nbsp <input type='text' name='login' maxlength='16'>
  21. <?PHP echo $error_name;?><br>
  22. Введите ваш пароль: <input type='text' name='password' maxlength='32'>
  23. Подтвердите пароль: <input type='text' name='confimp' maxlength='32'>
  24. <input type='submit' value='Регистрация' name='submit'>
  25. </form>

</pre>
</center>
(Добавление)
Переменная $error_name изначально предназначалась для того, что бы в разных if-ах туда добавлялись разные предложения которые сообщают об ошибке...
 
 Top
preproger
Отправлено: 09 Апреля, 2013 - 09:14:54
Post Id


Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Так или иначе, но каждое поле вводимое будет проверятся отдельно, следовательно на каждое поле придется сделать if, если ты хочешь, чтобы человек получил сообщения ввиде

    Не верный пароль
    Не верный логин
    Кажется, Вы совсем дурак


Тогда код будет иметь примерно такой вид:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $err = array(); // Создадим пустой масси
  4. if(!проверка логина)
  5.   $err[] = "Не верный логин"; // Нашли ошибку - добавили в массив
  6.  
  7. if(!проверка пароля)
  8.   $err[] = "Не верный пароль"; // Нашли ошибку - добавили в массив
  9.  
  10.  
  11. // Если массив не пустой
  12. if(count($err))
  13. {
  14.  
  15.    echo "<ul>";
  16.  
  17.    foreach($err as $err)
  18.    {
  19.        echo "<li>{$err}</li>";
  20.    }
  21.  
  22.    echo "</ul>";
  23. }
  24.  


Можно в массив заносить ID ошибок, и создать доп. массив со всеми ошибками,
дергать из него уже по ID, так даже правильнее.

Код, написанный выше (мой) - тоже безграмотный) но суть примерно такая.
Я сам сейчас с ошибками разбираюсь, но немного в другой степи - http://forum.php.su/topic.php?forum=71&topic=9911

(Отредактировано автором: 09 Апреля, 2013 - 09:16:06)

 
 Top
teddy
Отправлено: 09 Апреля, 2013 - 10:07:11
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Спасибо вам огромное! Идею уловил глядя на ваш код, а по id-не совсем понял реализацию, если можно напишите простой пример а код я дальше уже сам напишу, спасибо ещё раз!!!
(Добавление)
Кстати по ошибкам я так как вы сказали делал но только без массива Улыбка

Про мд5 если тоже кто знает скажите плз буду благодарен Улыбка

(Отредактировано автором: 09 Апреля, 2013 - 10:13:14)

 
 Top
preproger
Отправлено: 09 Апреля, 2013 - 10:57:28
Post Id


Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Что именно по md5 интересует?

По ID имеется ввиду, что при загрузке приложения (сайта) подключаются различные конфиги, а один из подключаемых файлов, скажем, lang.php который содержит код:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $lang = array(
  4.  1 => array(
  5.     "Ошибка","Внимание","Критическая ошибка"
  6.  ),
  7.  2 => array(
  8.     "Страница не найдена, вернитесь.","Введены ошибочные данные","Не верный пароль","Не верный логин"
  9.  )
  10. );


Изменяем наш пример:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $err = array(); // Создадим пустой масси
  5.  
  6. if(!проверка логина)
  7.   $err[] = 3; // Нашли ошибку - добавили в массив
  8.  
  9.  
  10. if(!проверка пароля)
  11.   $err[] = 2; // Нашли ошибку - добавили в массив
  12.  
  13.  
  14.  
  15. // Если массив не пустой
  16.  
  17. if(count($err))
  18. {
  19.    // Выведет заголовок "Внимание"
  20.    echo "<h1>".$lang[0][1]."</h1><ul>";
  21.  
  22.    // Выведет поочередно про логин и пароль
  23.    foreach($err as $err)
  24.    {
  25.        echo "<li>".$lang[1][$err]."</li>";
  26.    }
  27.    echo "</ul>";
  28.  
  29. }



Писалось на коленке, скорее всего с опечатками.
Массив $lang имеет 2 элемента с массивами. Это не с проста,
в 0 элементе - массив с заголовками, а в 1ом - уже непосредственно сообщения.

p.s. все это пример плохого кода, т.к. глобальные переменные это зло и от них нужно уходить) но сразу через голову не перепрыгнуть и нужно с чего-то начинать.
лично я совсем недавно начал уходить от этого и смотреть на php 5

p.p.s. для спасибо тут предусмотрели кнопку, слева)

(Отредактировано автором: 09 Апреля, 2013 - 11:02:12)

 
 Top
teddy
Отправлено: 09 Апреля, 2013 - 11:13:49
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




а нельзя сделать вывод ошибок таким? <?php
PHP:
скопировать код в буфер обмена
  1. if(isset($_POST['send'])){
  2. if($_POST['sender'] != ""){
  3. $_POST['sender'] = filter_var($_POST['sender'], FILTER_SANITIZE_STRING);
  4. if($_POST['sender'] == ""){
  5. $error_name = 'Пожалуйста введите корректное имя<br>';
  6. }
  7. }
  8. else{
  9. $error_name = 'Пожалуйста укажите ваше имя <br>';
  10. }
  11. if($_POST['email'] != ""){
  12. $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
  13. if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
  14. $error_email = "$email не является корректным E-mail адресом";
  15. }
  16. }
  17. else{
  18. $error_email = 'Введите ваш E-mail адрес <br>';
  19. }
  20. if($_POST['content'] != ""){
  21. $_POST['content'] = filter_var($_POST['content'], FILTER_SANITIZE_STRING);
  22. if($_POST['content'] == ""){
  23. $error_content = 'Пожалуйста введите сообщение без использования спец.символов <br>';
  24. }
  25. }
  26. else{
  27. $error_content = 'Пожалуйста, введите текст сообщения <br>';
  28. }
  29. if(!$error_name && !$error_email && !$error_content){
  30. $success = 'Ваше сообщение успешно отправлено <br>';
  31. }
  32.  
  33. }
  34.  
  35. ?>
  36. <html>
  37. <form action='formz.php' method='post'>
  38. <pre>
  39. Имя: <input type="text" name="sender" value="<?PHP echo $_POST['sender']; ?>">
  40. <span class="warning"><?PHP echo $error_name;?></span>
  41. Почта: <input type='text' name='email' value='<?PHP echo $_POST["email"]; ?>'>
  42. <span class="warning"><?PHP echo $error_email;?></span>
  43. Сообщение <textarea name="content"><?PHP echo $_POST['content']; ?></textarea>
  44. <span class="warning"><?PHP echo $error_content;?></span>
  45. <input type="submit" value="Отправить" name="send">
  46. <span class='warning'><?PHP echo $success;?></span>
  47. </pre>


Так мне даже больше нравится и все нормально работает ) А если с массивом выводить ошибки то их не получается упорядочить так как упорядочено в этом примере, во всяком случае у меня ) Хотя можно попробовать по ключам выводить под каждым соответствующем полем, вот только где их достать... по мд5 ведь есть вопрос в шапке топика Улыбка

п.с: не разрешают мне нажимать кнопку спасибо, сообщений маловато (
 
 Top
teddy
Отправлено: 09 Апреля, 2013 - 13:14:06
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Вопрос решен, спасибо всем ещё раз за помощь )
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB