Столкнулся с такой проблемой иногда контент коорый вставляю в базу с помощью textarea и функции insert имеет большой вес (т.е. много знаков). И по видимому поле TEXT в мускуле не справляется. На какой тип лучше заменить, чтобы не проиграть в производительности и чтобы вбивался текст большого объема. ?? Попутный вопрос. если только я сам вставляю контент имеет ли смысл делать adsslashes и еще что-либо ?? Заранее спасибо.
Есть идеи склонится к этому. Я прав ?? Кто что думает..?? MEDIUMBLOB (MEDIUMTEXT) Тип BLOB или TEXT, длиной от 1 до 16777215 символов. LONGBLOB (LONGTEXT) Тип BLOB или TEXT, длиной от 1 до 4294967295 символов.
1) тип поля - здесь зависит от возможного максимального размера вбиваемых данных. 2) поскольку текст может содержать одиночные и двойные кавычки, то без adsslashes не обойтись
да моя ошибка. Просто я полагаю, что magic_quotes_gpc = Off. Для этого 1) в начале любого скрипта я вызываю функцию mqn для удаления слэшей 2) при записи я добавляю слэши PHP: function mqn() { if (get_magic_quotes_gpc()) { $input = array(&$_GET, &$_POST, &$_COOKIE, &$_ENV, &$_SERVER); while (list($k,$v) = each($input)) { foreach ($v as $key => $val) { if (!is_array($val)) { $input[$k][$key] = stripslashes($val); continue; } $input[] =& $input[$k][$key]; } } unset($input); } }
Прочитал не только этот кусок , а всю статью )) Итог каша в голове. будут еще мнения..??? Что юзать самому прописывать addslashes или пользваться магическими каычками. ?? Я правильно понял , что доставая данные из базы stripslashes применять не надо ??
Dima4321 правильно будет не рассчитывать на то, что магические кавычки включены. а если магические кавычки включены (!) - отключить их вручную в коде! затем, любые данные, поступающие в запрос - экранировать/слэшировать. при выборке делать stripslashes не нужно. могу расписать полный механизм, если нужно будет
Gromo, если не сложно покажи часть своего правильного кода. Я буду использвать его как шаблон. Также если кто может подредакируйте мои перлы )). Защиты пока никакой и на оптимизацию кода не претендую (хотя знаю. что потенциала у скрипта масса) и можно доводить и доводить до совершенства. Вот например мой поиск. Интерполяется элементов массива не лучшая, но зато читаемая )) Код (Text): $query="(SELECT * FROM groups WHERE NAME LIKE '%".strtoupper($_POST['iskat'])."%') UNION ALL (SELECT * FROM groups WHERE GENRE LIKE '%".strtoupper($_POST['iskat'])."%') "; $result = mysql_query($query) or die("Запрос ошибочный"); echo "<h2>Your results of search</h2><br><br>"; echo "<table border=3>"; while ($row = mysql_fetch_assoc($result)) { echo "<tr>"; echo" <td><a href='albums/$row[NAME].html'>$row[NAME]</a></td> <td><a href='style/$row[GENRE].html'>$row[GENRE]</a></td> <td><a href='history/$row[NAME].html'>ABOUT $row[NAME]</a></td>"; echo "</tr>"; } echo "</table>"; $n= mysql_num_rows($result); mysql_free_result($result); if($n>0) { echo "<br><br><h2><a href='index.php'>BACK HOME</a></h2>"; } else { echo "<br><br>Sorry<br><br>"; echo "<h2><a href='index.php'>BACK HOME</a></h2>"; } Шооо можно подмандить ?? ))
Вот также проста выборка на одной из страниц моего сайта Код (Text): $sql = "SELECT * FROM groups WHERE GENRE = '$page'"; $data = mysql_query($sql); echo "<h1>$page BANDS</h1>"; echo "<table border=3>"; echo "<tr> <th>CDs & ALBUMS</th><th>HISTORY</th></tr>"; while($row=mysql_fetch_assoc($data)) { echo "<tr>"; echo " <td><a href='../albums/$row[NAME].html'>$row[NAME]</a></td> <td><a href='../history/$row[NAME].html'>HISTORY OF $row[NAME]</a></td>"; echo "</tr>"; } echo "</table>"; Ну и например добавление Код (Text): $NAME=$_POST['NAME']; $GENRE=$_POST['GENRE']; $TEXT=$_POST['TEXT']; $HIDE=$_POST['HIDE']; /* составить запрос для вставки информации о клиенте в таблицу */ $query = "INSERT INTO $userstable VALUES('ID','$NAME','$GENRE', '$TEXT','PRICE', '$HIDE','ABOUT','ATRIKLES')"; /* Выполнить запрос. Если произойдет ошибка - вывести ее. */ mysql_query($query) or die(mysql_error()); echo "Информация о вас занесена в базу данных."; /* Закрыть соединение */ mysql_close(); ?> <br> <br> <br> <a href="add.php">Back Home</a> Очень прошу ткните во все косяки носом ! Обругайте ! И покажите как правильно ! )
У тебя данные вставляемые в запрос никак не проверяются, мне уже помогали с этим добрые люди =), создал функцию для фильтрации нехороших данных: PHP: function escapeStr($str='', $db = false) //Функция обработки данных { if(get_magic_quotes_gpc()) $str = stripslashes($str); $str = ($db) ? mysql_real_escape_string($str, $db) : mysql_escape_string($str); return($str); } $sqlvars=array('login','pass','type'); //Формируем массив обрабатываемых данных (тут переменные получаемые из POST передачи) for ($i=0; $i<count($sqlvars); $i++) //Проходим по массиву { //Создаём переменные с отфильтрованными данными $$sqlvars[$i]=(isset($_POST[$sqlvars[$i]])) ? escapeStr(trim($_POST[$sqlvars[$i]]), $db) : ''; } Не знаю на сколько это правильно...но работает. И зачем столько раз использовать echo? Удобнее так: PHP: <?php if ($var) { ?> тут твоя разметка <?php } else {} ?> Так можно разделять пхп и разметку, браузер просто будет выводить всё когда видит ?> до следующего <?php, при этом логика скрипта не нарушается...
Dima4321 .htaccess и/или так (я использую оба варианта): functions.php PHP: <?php function stripslashes_for_array(&$arr){ foreach($arr as $k=>$v){ if (is_array($v)){ stripslashes_for_array($v); $arr[$k] = $v; } else { $arr[$k] = stripslashes($v); } } } function fix_magic_quotes_gpc(){ if(get_magic_quotes_gpc()){ stripslashes_for_array($_POST); stripslashes_for_array($_GET); stripslashes_for_array($_COOKIE); } } ?> в начале своего кода подключаешь файл functions.php и вызываешь функцию fix_magic_quotes_gpc(); таким образом если магические кавычки были включены, то суперглобальные массивы будут разъэкранированы в нормальный вид. А дальше в коде уже сам будешь экранировать те данные, которые пойдут в базу. для работы с базой пользуюсь классом, который автоматически производит экранирование данных.