За последние 24 часа нас посетили 17714 программистов и 1663 робота. Сейчас ищут 928 программистов ...

PHP + SQL помогите рекомендациям

Тема в разделе "PHP и базы данных", создана пользователем Tony, 25 мар 2011.

  1. Tony

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

    С нами с:
    22 мар 2011
    Сообщения:
    13
    Симпатии:
    0
    Адрес:
    Russia
    Сталкивался с PHP очень мало, прочел 2 книги, вот и для своего сайта с CMS решил небольшой скрипт прикрутить, потому что для этой CMS подобных нету.
    Помогите рекомендациям, как то одной из тем мне юзер Benjamin дал ссылку на SQL Injection, переработал и переделал все, хотелось бы услышать критику и дополнения.
    П.С. очень понравился PHP решил плотнее изучить.

    PHP:
    1. <HTML>
    2. <HEAD>
    3. <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
    4. </HEAD>
    5. <BODY>
    6.  
    7. <form action = "get.php" method="GET">
    8. <select name="city">
    9. <option value="">Все города</option>  
    10. <option value="Анапа">Анапа</option>
    11. <option value="Адлер">Адлер</option>
    12. </select><br>
    13. <input type="submit"/>
    14. </form>
    15.  
    16. <?php
    17. include 'config.php'; // Загрузили конфиг
    18. $city = "$_GET[city]"; // Загрузили переменную в массив
    19. $city = mysql_real_escape_string($city); // Экранируем массив для безопасной передачи в запрос
    20.  
    21. if (empty($city)) { $que = mysql_query("select * from test");} // Если, поле формы пустое то выполняем запрос
    22.  
    23. else $que = mysql_query("select * from test WHERE city LIKE '$city'"); // запрос если поле не пустое
    24.  
    25. if($que) // Если все ОК то, рисуем шапку таблицы
    26. {
    27.   echo "<table class='tablesorter' border=0>";
    28.   echo "<tr><th>Название</th><th>Город</th><th>Удаленность от моря</th><th>Питание</th><th>Инфраструктура</th><th>Стоимость</th></tr>";
    29.  
    30. while($test = mysql_fetch_array($que)) // Цикл на рисование строк
    31.   {
    32.     echo "<tr><td>".$test['name']."&nbsp;</td><td>".$test['city']."
    33.    &nbsp </td><td>".$test['sea']."&nbsp;</td><td>".  
    34.     $test['feed']."&nbsp;</td><td>".$test['infra']."&nbsp;</td><td>".$test['cost']."&nbsp;</td></tr>";
    35.   }
    36.   echo "</table>";
    37. }
    38. else // если ничего не ОК, то выводим ошибку SQL запроса
    39. {
    40.   echo "<p><b>Error: ".mysql_error()."</b><p>";
    41.   exit();
    42. }
    43. ?>
    44. </BODY>
    45. </HTML>
    Что хочется сделать еще:
    1. Прикрутить фото, аватарка каждого объекта, 100х100 чтобы фотка сама обрабатывалась скриптом.
    2. Сделать чтобы не надо было жать кнопку "Отправить".
     
  2. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Во-первых, не
    $city = "$_GET[city]";
    а
    $city = $_GET['city'];

    Во-вторых, можно заюзать что-то типа этого
    PHP:
    1.  
    2. <?
    3.     /**
    4.      *
    5.      * Clear entries for bad symbols
    6.      * @param string $text          The value being searched for
    7.      * @param string $type          Replacing type
    8.      * @param string $additional    Available sybmols that will not be replaced
    9.      */
    10.     static protected function clear($text, $type='simpletext', $additional=null) {
    11.         switch($type) {
    12.             case 'numeric':
    13.             case 'integer':
    14.                 $diap   = '0-9';
    15.                 $del    = '';
    16.             break;
    17.  
    18.             case 'phone':
    19.                 $diap   = '0-9\+';
    20.                 $del    = ' ';
    21.             break;
    22.  
    23.             case 'words':
    24.                 $diap   = 'a-zA-Zа-яА-я ';
    25.                 $del    = ' ';
    26.             break;
    27.  
    28.             case 'simpletext':
    29.                 $diap   = '0-9a-zA-Zа-яА-я\-\., ';
    30.                 $del    = ' ';
    31.             break;
    32.  
    33.             case 'login':
    34.                 $diap   = 'a-zA-Z0-9_';
    35.                 $del    = '';
    36.             break;
    37.  
    38.             case 'email':
    39.             case 'mail':
    40.                 $diap   = 'a-zA-Z0-9\-_\.@';
    41.                 $del    = '';
    42.             break;
    43.  
    44.             case 'english':
    45.                 $diap   = 'a-zA-Z0-9';
    46.                 $del    = '';
    47.             break;
    48.  
    49.             default:
    50.                 $diap   = '0-9a-zA-Zа-яА-я ';
    51.                 $del    = ' ';
    52.             break;
    53.         }
    54.  
    55.         return preg_replace('/[^'.$diap.$additional.']/ui', $del, $text);
    56.     }
    $city = clear($_GET['city'];

    Однако, mysql_real_escape_string таки правильно.