За последние 24 часа нас посетил 21971 программист и 987 роботов. Сейчас ищут 702 программиста ...

Я пришёл к PDO ))))

Тема в разделе "PHP для новичков", создана пользователем AnteFil, 31 дек 2014.

  1. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    ты мыслишь правильно но как-то не правильно пытаешься реализовать. на такой вот случай и были придуманы исключения. если что-то не так - выброшенное исключение прервет работу метода без возврата результата. если все ок но результата нет - возвращай тот же false, а если данные есть - возвращай полезные данные.

    ну уж если очень надо двойное состояние возвращать - всегда можно вернуть массивом а встречная часть может разбить массив в переменные
     
  2. AnteFil

    AnteFil Активный пользователь

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    ДА ты прав переписал малость просто хотел удлжить всё в 1 запрос к базе а так получаться два сначало я проверяю есть ли записть а пото коли она есть делаю запрос и получаю её
    Код (PHP):
    1. $id_vopros = $conn->prepare('SELECT COUNT(0) AS ROW_COUNT FROM `vop` WHERE id = :id');
    2.     $id_vopros->execute(array('id' => $str));
    3.     $vopros = $id_vopros->fetch(PDO::FETCH_BOTH);
    4.     if (!$vopros['ROW_COUNT'] == '1'){ 
    5.     $error = 'Данного овпроса не обнаружено';//ID вопроса не обноружено
    6.     return $error;
    7.     }
    8.  
    Вторая часть
    Код (PHP):
    1. $id_vopros = $conn->prepare('SELECT FROM `vop` WHERE id = :id');
    2.     $id_vopros->execute(array('id' => $str));
    3.     $vopros = $id_vopros->fetch(PDO::FETCH_BOTH);
    4.     return $vopros;
    5.  
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    а что мешает спросить сразу запись? и если её нет - то её в ответе не будет. и ты сможешь обработать как отсутствие строки. ты упорно изобретаешь велосипед на костылях.
     
  4. AnteFil

    AnteFil Активный пользователь

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Да ещё раз спасибо ))))) Всё переделал 1 запрос 2 варианта ответа то что нужно было !!! Спасибо

    Добавлено спустя 1 минуту 56 секунд:
    А нет нифига я пришёл к тому с чего начал )))))

    Добавлено спустя 1 минуту 42 секунды:
    В результате я не могу проверить как отрабтала функция ......... если ошибка то $error = 'Такого вопроса нет'; если есть то получаю массив с вопросом. А как проверить как отрабталась функция

    Добавлено спустя 2 минуты 14 секунд:
    Или писать ещё одну функцию для проврки? В случае успеха первой функции верёнм 0 потом на странице можно будет проверить типа if($data == 0) {} else {} и во второй функции всёравно надо писать ещё 1 запрос к базе
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Код (PHP):
    1. <?php
    2. // tvoj zapros na poluchenije voprosa
    3. $zapros = "SELECT * FROM `voprosi` WHERE `identifikator_voprosa` = {$identifikator_voprosa}";
    4. // vipolnenije zaprosa
    5. $rezultat = mysql_query($zapros);
    6. // poluchenije teksta oshibki
    7. $oshibka = mysql_error();
    8. // proverka teksta oshibki
    9. if ($oshibka) {
    10.     // zavershenije raboti esli est' oshibka
    11.     die("MYSQL Oshibka: ", $oshibka);
    12. }
    13.  
    14. // poluchenie stroki iz rezultata zaprosa
    15. $vopros = mysql_fetch_array($rezultat);
    16. // proverka stroki iz rezultata zaprosa
    17. if (!$vopros) {
    18.     // funktsiya majeskuel_fetch_errej() vozvrashaet stroku s tekuschej pozitsii
    19.     // iteratora rezultata ili FOLS esli boleje strok net
    20.     // esli strok net srazu - srazu vernetsa FOLS
    21.     // dlya tebya eto znachit chto...
    22.     die("Vopros ne najden");
    23. }
    24.  
    25. // proverka sledujuschej stroki
    26. if(mysql_fetch_array($rezultat)){
    27.     // v poiske po unikalnomu identifikatoru ne dolzhno bit sledujuschej stroki
    28.     // jejo nalichije v rezultate govorit ob oshibke v logike zaprosa ili
    29.     // mozhet bit o potere tselostnosti bazi dannikh
    30.     die("Najdeno boleje odnovo voprosa");
    31. }
    32.  
    33. // obrabotka voprosa edinstvennovo i nepovtorimovo
    34.  
    35.  
    36. // PS.  ne schitaju ujebanstvom napisat kommentarii k kodu na translite tak kak
    37. //      antjushka na njom programmu pishet
    38.  
    39. // PPS. rasshirenije MYSQL vibrano potomu chto mne lenivo pisat pod PDO a
    40. //      antjushka ne znakom s MYSQLI  
     
  6. AnteFil

    AnteFil Активный пользователь

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Не ты не понял там ошибки работы скрипта быть не должно ошибка будет если например был запрос на несуществующую запись Sql просто вернет пустой результат а мне же его надо обработать создать ошибку и тд
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    это ты не понял. в моем листинге есть то что ты хочешь. просто ты не умеешь программы ни писать ни читать. иф-не-вопрос - как раз и есть секция в который как ты выражаешься обрабатывается пустой результат и создается ошибка. прочитай комментарии к коду, дундук.
     
  8. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Такой вопрос возник, о шаблонизаторе, есть файл с разметкой HTML, в нем встречается текст типа:
    Код (Text):
    1. [[[load_logo]]]
    Ну собственно мне в этом файле нужно выискать все эти конструкции и заменить на соответствующие данные (ну я надеюсь ясно что за место данной конструкции должна вызваться функция с названием load_logo), так вот вопрос, более дешевый способ тут будет искать через регулярку или же обычным поиском сначала искать '[[[', потом искать ']]]', вычленять текст между ними и его уже запускать.

    Что будет более дешевым?
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    регулярка будет быстрой (кешировать полюбас хорошо бы), но можно войти в мегаперебор на долгие секунды =)
     
  10. AnteFil

    AnteFil Активный пользователь

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Вообщем решил я проблему так
    Запускаем функцию передаём в неё параметр ID
    Код (PHP):
    1. $vopros = polychitVopros(trim($_GET['post'])); 
    В самой функции
    Код (PHP):
    1. function polychitVopros($str) {
    2.     $error = '';
    3.     // Если отсутствует строка возвращаем сообщение об ошибке
    4.     if(!$str) {
    5.         global $lang;
    6.         $error = 'ID вопроса не обноружено';//ID вопроса не обноружено
    7.         return $error;
    8.     }
    9.     $pattern = '|^[\d]+$|';    
    10.     $result = preg_match($pattern, $str);
    11.     if(!$result) {
    12.         global $lang;
    13.         $error = 'Недопустимые символы'; //Недопустимые символы';
    14.         return $error;
    15.     }
    16.     global $conn;
    17.     $id_vopros = $conn->prepare('SELECT * FROM `vopros` WHERE id = :id');
    18.     $id_vopros->execute(array('id' => $str));
    19.     $vopros = $id_vopros->fetch(PDO::FETCH_ASSOC);
    20.     if (!empty($vopros)) { 
    21.     $vopros['errors'] ='0';
    22.     return $vopros;
    23.     } else { 
    24.     $error = 'ТАкого вопроса нет';
    25.     return $error;
    26.     }
    27.     
    28. } 
    Если проверка прошла успешно добавляем в массив параметр errors ='0'
    После выполнения функции
    Код (PHP):
    1. if ($vopros['errors'] == '0') { echo 'Ошибок не обнаружено можно работать дальше';} else { echo 'Выявлена ошибка';} 
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Лучше слепи их оба в один массив тогда.

    Правда не очень понятно чем тебя фалс не устроил. Ну нет вопроса такого в бд и хер с ним.
     
  12. AnteFil

    AnteFil Активный пользователь

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    К моей логике нет замечаний??? Мои действия правильные и обдуманные? Возможно как то упростить или написать по другому? Схема работы нормальная ???? Я сейчас адекватен ???? Мне можно доверить управление самолётом?
     
  13. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    есть но мы уже точно знаем что бесполезно тебе что-то говорить. критика проходит мимо твоего сознания.
    может быть. каждый делает так как знает и понимает. сколько людей столько и мнений. тебе вот так удобно. может быть многим покажется решение убогим, но у каждого свой путь.
    рано тебе еще оптимизацией заниматься. потому что сначала нужно знаний набраться. оптимизация это когда ты понимаешь что и как оптимизировать а не когда тебе говорят и ты потом такой мол а мне парни сказали садишься переписывать всё. мы ведь тебе можем спецом неправильно сказать. а ты будучи без знаний схаваешь и поломается у тебя логика проекта ура.
    тебе самому нравится? тебе самому удобна? думаю многие выкинули бы твою схему и тебя бы уволили заодно, но как мы уже договорились - у каждого свой путь.
    на моей памяти ты никогда не был адекватен. не льсти себе.
    мы на форуме пхп-программистов. самолеты тут каким боком? вот ты и ответил на свой прошлый вопрос. ты неадекватен. ну или шутка у тебя совсем не смешная получилась.

    поставлю смайлик чтоб ты не сильно обижался на меня
    :D
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    исходя из задачи ты плодишь лишние сущности. Функция должна возвращать либо массив с полями, либо фалс. Этого достаточно и даже более чем.
     
  15. AnteFil

    AnteFil Активный пользователь

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    Вообщем всё нормально функция всегда теперь возвращает массив различие только в содержание массива если ошибка то возвращаеться массив с ошибкой и циферкой один если всё удачно то массив с данными и цеферкой ноль.

    Вопрос про отправку данных возник.
    Есть форма
    Код (Text):
    1. <form method="POST" action="test.php">
    2. <textarea rows="8" name="otvet" cols="50"></textarea>
    3. <input type="text" name="id">
    4. <input type="submit" value="Ответить">
    5. </form>
    Проблема в том что я не понимаю как отправить ещё 1 параметр ID новости. Её я изначально получил GETом а вот как отправить её через форму POSTом???? Раньше я делал поле
    Код (Text):
    1. <input type="text" name="id">
    потом прятал через display: none но как то можно по другому реализовать ?
     
  16. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Код (Text):
    1. <input type="hidden" name="id" value="<?= $id ?>" >
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    программист от бога
     
  18. AnteFil

    AnteFil Активный пользователь

    С нами с:
    14 янв 2014
    Сообщения:
    531
    Симпатии:
    4
    <input type="hidden" name="id" value="<?= $id ?>" > Все рано через форму по другому ни как ?
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    В урле, в куке.
     
  20. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    извини, я забыл, с кем разговариваю
     
  21. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    На сколько мне известно input пишется так:
    Код (Text):
    1. <input type="text" value="hello" />
    Обратите внимание на 2 последних символа.
     
  22. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    VLK, есть нюансы ;) но как правило хорошего тона - я за такую запись, да.
     
  23. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    HTML
    <input атрибуты>
    XHTML
    <input атрибуты />
     
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    а я против. Что это даёт? Бессмысленная хрень.
     
  25. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Браузеры справятся в любом случае, но если цель в написании чистого кода, проходящего любой валидатор, то надо придерживаться стандартов — либо HTML, либо XHTML. Это может иметь значение при прохождении профессиональных тестов. ;)