mysql & php

Discussion in 'PHP' started by barnaki, 5 Dec 2008.

  1. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4
    есть такой вывод базы данных
    while ($output = mysql_fetch_assoc($result)) {

    echo $output["id_msg"].<br />;
    ;
    echo $output["name"].'<br />';
    echo $output["city"].'<br />';
    echo $output["email"].'<br />';
    echo $output["url"]. '<br />';
    echo $output["msg"].'<br />';
    echo $output["answer"].'<br />'.'<a href="admin/add_answer.php">написать ответ</a><br />'; //наверное тут
    echo $output["puttime"].'<br />';
    // echo $output["hide"].'<br />';
    }
    как ПРАВИЛЬНО добавить GET чтобы передать id_msg в add_answer.php чтобы использовать его для связи с таблицей записи (это гостевая книга)
     
  2. [х26]VОLАND

    [х26]VОLАND Elder - Старейшина

    Joined:
    7 Jun 2006
    Messages:
    513
    Likes Received:
    756
    Reputations:
    218
    В текст запроса добавь ' WHERE id_msg=$_GET['id']'
    И про фильтрацию не забудь
     
  3. optimazer

    optimazer Member

    Joined:
    4 Dec 2008
    Messages:
    46
    Likes Received:
    11
    Reputations:
    0
    ... секунду
    нет нет

    просто в своей ссылке добавь
    <a href="admin/add_answer.php?VAR=$output['id_msg']">написать ответ</a>

    а в файле add_answer.php ловишь эту переменную $_GET['VAR']
    вместо VAR как ты понимаешь любое имя переменной написать можно!
    ______

    параметры get передаются после разделителя "?" парами переменная=значение разделенные символом "&"

    пример:
    <a href="www.lll.ru?var1=zn1&var2=zn2"></a>
     
  4. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    PHP:
    $id=strip_tags(htmlentities($_GET['id']));
    ......
    ' WHERE id_msg='.$id;
     
    1 person likes this.
  5. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    optimazer, твой запрос sql уязвим!
     
  6. optimazer

    optimazer Member

    Joined:
    4 Dec 2008
    Messages:
    46
    Likes Received:
    11
    Reputations:
    0
    2eLWAux
    спс
    _______
    тогда исправляюсь
    перед использованием переданного параметра отфильтровать всякую ересь

    PHP:
    $_GET=array_map('htmlspecialchars',$_GET);
    $_GET=array_map('strip_tags',$_GET);
    $_GET=array_map('mysql_escape_string',$_GET);
    для удобства в случае если передается несколько параметров
    можно работать с ними как с массивом $_GET
    не проверяя каждый параметр по отдельности
     
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    optimazer Эт типа, давайте просто так, ради смеха испортим весь массив $_GET
    eLWAux Тож ниче так, забавно получится, что вы собираетесь убрать strip_tags после того, как преобразовали <> в сущности?

    Так как ID у автора скорее всего число, то достаточно делать запрос:
    PHP:
    mysql_query("SELECT * FROM table WHERE id='".intval($_GET['id'])."'");
    Все, скули не будет, а вот для результата, лучше будет все же использовать array_map('htmlspecialchars',$output);

    Всем читать - http://forum.antichat.ru/thread30641.html
     
    _________________________
    #7 Gifts, 5 Dec 2008
    Last edited: 5 Dec 2008
  8. optimazer

    optimazer Member

    Joined:
    4 Dec 2008
    Messages:
    46
    Likes Received:
    11
    Reputations:
    0
    2Gifts а почему испортим то? =) ты часто спец.символы get-ом передаешь? =))
    по хорошему нада все данные на валидность проверять
    а если id не число, а генерированная символьная последовательность?
     
  9. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    optimazer ссылка дадена просто для красоты наверн. Если символьная - mysql_real_escape_string()

    Не поверишь, гетом можно передать что угодно, а как часто - это уже дело десятое. Может я хочу md5 не в хекс строке передать?
     
    _________________________
  10. optimazer

    optimazer Member

    Joined:
    4 Dec 2008
    Messages:
    46
    Likes Received:
    11
    Reputations:
    0
    2Gifts
    чтобы охватить весь спектр угроз безопасности нужно проверять на валидность данных весь массив get
     
  11. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    ничего не нужно проверять весь $_GET, нужно проверять то, что нужно.
     
  12. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Используй жесткое приведение типов:
    Все лишнее, кроме цифр отфильтруется. Для отвода лишних глаз, ставь в начало скрипта

    Советую почитать вот это про анти-sql-инъекции: https://forum.antichat.ru/thread30641.html
     
  13. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    Это пропустит отрицательные и нулевой id.

    Хорошо - так:


    PHP:
    $id=isset($_GET['id']) && !is_array($_GET['id']) ? $_GET['id'] : 0;
    if(!
    preg_match("/^\d+$/",$id) || !$id)
      die(
    'Недопустимый ID');
     
  14. vikseriq

    vikseriq Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    118
    Likes Received:
    44
    Reputations:
    2
    регулярки рулят: проверяй так:
    PHP:
    $f="123"// число от 1 до 99999
    if (!ereg("^([0-9]{1,5})$",$f)) {
     echo 
    'Недопустимый ID';
    }
     
    1 person likes this.
  15. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    d_x
    PHP:
    $id=intval($id)>intval($id) : 1;
    vikseriq Тру )))))
     
    _________________________
  16. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    vikseriq, про ereg уже много раз говорилось, что функция уязвима к нулевому байту при magic_quotes=off.
    Лучше всего - preg_match, она помимо этого быстрее ereg.
     
  17. vikseriq

    vikseriq Elder - Старейшина

    Joined:
    31 Jul 2008
    Messages:
    118
    Likes Received:
    44
    Reputations:
    2
    Никто не запрещает обрезать нульбайт ) Мы тут не все гуру, а мой вариант для начинающих само то - просто и легко расширяемо (напр. , проверка на wmz кошель - полминуты дела).
     
    2 people like this.
Loading...