Я обнаружил функцию полоски, но я бы предпочел найти место, где добавляю больше слешей, чем следовало бы. Мои функции используют mysql_real_escape_string один раз для каждой переменной, и я запрашиваю базу данных, используя «вставить в значения foo (bar, bar) ($ baz, $ baz)»
может в этом проблема.
phpinfo дает
magic_quotes_gpc On On
magic_quotes_runtime Off Off
magic_quotes_sybase Off Off
static function insert($replyto,$memberid,$postid,$comment)
{
$message=array();
$lenmax=1000;
$lenmin=5;
$toolong="comment is too long.";
$tooshort="comment is too short.";
$notarget="replied comment is deleted";
$nomember="you are not a member";
$notpost="commented post is deleted";
switch(true)
{
case strlen($comment)<$lenmin: $message[]= $tooshort; break;
case strlen($comment)>$lenmax: $message[]=$toolong; break;
case $replyto!=NULL && !commentexists($replyto): $message[]=$notarget; break;
case !memberexists($memberid): $message[]=$nomember; break;
case !postexists($postid): $message[]=$nopost; break;
case count($message)>0:return $message; break;
}
$replyto=mysql_real_escape_string($replyto);
$memberid=mysql_real_escape_string($memberid);
$postid=mysql_real_escape_string($postid);
$comment=mysql_real_escape_string($comment);
if($replyto==NULL)
mysql_query("insert into fe_comment(memberid,postid,comment) values($memberid,$postid,'$comment')");
else
mysql_query("insert into fe_comment(replyto,memberid,postid,comment) values($replyto,$memberid,$postid,'$comment')");
}
В моей хостинговой компании есть magic_quotes_gpc, и у меня нет доступа к файлу php.ini. Я использую панель plesk для настройки.
php документация гласит
Пример использования stripslashes () - это когда PHP-директива magic_quotes_gpc включена (включена по умолчанию), и вы не вставляете эти данные в место (например, базу данных), которое требует экранирования. Например, если вы просто выводите данные прямо из формы HTML.
Мои запросы вставки вставляются с косыми чертами в базу данных, и моя версия php 5.2.3
документация также гласит
Если включен magic_quotes_gpc, сначала примените штриховые черты () к данным. Использование этой функции для данных, которые уже были экранированы, дважды сбрасывает данные.
Так что я проверяю, избежал ли я значений дважды, я не могу найти нигде, где я избежал значений дважды.
сейчас я использую
$comment=mysql_real_escape_string(stripslashes($comment));
но я думаю, что это не должно стать стандартом в моих кодах, потому что это не выглядит как "правильный путь", хотя и спасает день.
magic_quotes_gpc автоматически экранирует все и также не является надежным, потому что он устарел.
поэтому я создал файл .htaccess и скопировал его во все каталоги. У меня есть файл index.php, файлы .htaccess содержат только этот текст
php_flag magic_quotes_gpc Off
Я запустил phpinfo, и он все еще дает
magic_quotes_gpc On On
magic_quotes_runtime Off Off
magic_quotes_sybase Off Off
теперь мне нужен способ отключить магические кавычки gpc, и у меня нет доступа к файлу php.ini. Сейчас я ищу способы редактирования файлов .htaccess.