Каждый раз когда я показывал свои PHP файлы другим программистам, многие из них говорили, что так нельзя писать! Это ненадёжный, незащищённый и, к тому же, очень громоздкий код... Небольшая предыстория: Я занимаюсь, в основном, созданием флеш-сайтов. Не так давно начал практиковать PHP в связке с Flash. С помощью PHP я вытаскиваю из MySQL данные и генерирую XML-файлы, которые скармливаются флеш-сайту. И наоборот: отправляю из флеша данные в PHP, чтобы он записал их в MySQL. И это всё зачем мне нужен PHP. Я пользуюсь небольшим стандартным набором PHP команд, которые беру из официального руководства по PHP. Пример одного из моих файлов: Код (Text): <?php header('Content-type: text/xml; Charset: UTF-8'); $xmltree="<?xml version=\"1.0\" encoding=\"utf-8\"?> <xml> "; include('config.php'); mysql_query('SET NAMES UTF8'); $idn=$_GET['evID']; $query="SELECT * FROM my_events WHERE id=$idn"; $res=mysql_query($query); if(mysql_num_rows($res)>0) while($data=mysql_fetch_array($res)) { $evDate=$data['date']; list($evYear, $evMonth, $evDay) = split('[-]', $evDate); $xmltree.="<ev id=\"".$data['id']."\" epoch=\"".gmmktime(0, 0, 0, $evMonth, $evDay, $evYear)."\" date=\"".$data['date']."\" titleRU=\"".$data['title_ru']."\" titleUA=\"".$data['title_ua']."\" titlePL=\"".$data['title_pl']."\" titleEN=\"".$data['title_en']."\"> <textRU><![CDATA[".$data['description_ru']."]]></textRU> <textUA><![CDATA[".$data['description_ua']."]]></textUA> <textPL><![CDATA[".$data['description_pl']."]]></textPL> <textEN><![CDATA[".$data['description_en']."]]></textEN> <gallery>"; $queryi="SELECT * FROM my_photos WHERE pid=$idn"; $resi=mysql_query($queryi); while($datai=mysql_fetch_array($resi)) { $xmltree.="<photo id=\"".$datai['id']."\" preview=\"".$datai['link_preview']."\" full=\"".$datai['link_full']."\" />"; } $xmltree.="</gallery> </ev>"; //$i++; } $xmltree.=" </xml>"; echo $xmltree; ?> ... И вот я не понимаю, почему мой код такой "незащищённый и громоздкий"? Хочу чтобы вы мне на пальцах объяснили, потому что я новичок в PHP. А также буду признателен, если покажете примеры как безопасно и не громоздко написать те же PHP-функции для доставки данных из MySQL. Например, мне может хватить одного конкретного примера связки PHP–MySQL, а дальше я уже сам попробую разобраться по аналогии. Заранее благодарен!
Punk T-34, уязвимость через инъекцию надо исправить однозначно! остальное просто "шероховатости", типа: split('[-]', $evDate) в данном случае регулярка нафиг не нужна. будет работать и так: explode('-', $evDate) и вообще с датой у тебя какие-то мутные манипуляции. в XML должна попасть дата как UNIXTIME (целое число)? тогда логично сделать в самом запросе UNIX_TIMESTAMP(`date`) и выводить сразу результат mysql_fetch_array возвращает больше, чем ты используешь. лучше замени на mysql_fetch_assoc закрывающий тег ?> в последней строке признан лишним и даже опасным в некоторых случаях. просто убери!
Если используется int, то тогда intval() Код (PHP): $idn=intval($_GET['evID']); и отправлять $idn как int. Код (PHP): $idn=$_GET['evID']; Или воспользоваться в запросе. Код (PHP): $query="SELECT * FROM `my_events` WHERE `id`='".intval($idn)."'"; $res=mysql_query($query); В других случаях, пользоваться нужно mysql_real_escape_string(). желательно запросы все связать с подключением mysql_connect и сделать краткую функцию для экранирования.