Почему публикация в PHP вызывает ошибку в IE, а не в других браузерах? - PullRequest
0 голосов
/ 20 июля 2009

У меня есть некоторый код PHP, который вызывает MySQL, который работает в Firefox и других браузерах, но, похоже, IE не справляется с этим.

<?php include "casti/mysql_connect.php"; 
$result = mysql_query("SELECT * FROM ".$_POST['table']." WHERE id='".$_POST['id']."'");
$row = mysql_fetch_array( $result ); // Line 60 !

echo $row['title'];

?>

А вот что появляется в IE ...

Предупреждение: mysql_fetch_array(): предоставленный аргумент не является допустимым ресурсом результата MySQL в /httpd/html/prohuntingcz/www/cms.php в строке 60

Спасибо за любую помощь.

Ответы [ 5 ]

11 голосов
/ 20 июля 2009

PHP и MySQL полностью отделены от браузера. Скорее всего, в вашем HTML или JavaScript есть что-то, что правильно отправляет переменные table и id из Firefox и т. Д., Но неправильно из IE. Пожалуйста, покажите нам этот код.

3 голосов
/ 20 июля 2009

PHP обрабатывается на стороне сервера, поэтому он не имеет ничего общего с браузером. Причиной вашей проблемы может быть какой-то javascript, который обрабатывает поля формы перед отправкой их на сервер - это та часть, которая зависит от браузера.

2 голосов
/ 20 июля 2009

Скорее всего, IE кеширует страницу из предыдущей версии скрипта, когда у вас возникла эта ошибка, чтобы браузеры не кэшировали результаты вашего php-кода, добавьте

header("Cache-Control: no-store, no-cache, must-revalidate");

к началу каждого php-скрипта, результаты которого вы отображаете. Кроме того, не разрешайте использование опубликованной переменной непосредственно в SQL-запросе, так как это просто открывает для атаки, вместо этого вы должны сначала очистить ее, используя что-то вроде

$user_table = $_POST['table'];
$user_id = $_POST['id'];

$user_table = mysql_real_escape_string($user_table);
$user_id = mysql_real_escape_string($user_id)

$query = "SELECT * FROM ".$user_table." WHERE id='".$_user_id."'";
echo "<div>The query is: " . htmlentities($query). "</div>";
1 голос
/ 20 июля 2009

Попробуйте echo отправить запрос обратно в браузер, чтобы увидеть результаты подстановки переменных - вы должны довольно быстро увидеть, что пошло не так.

<?php include "casti/mysql_connect.php"; 
$query = "SELECT * FROM ".$_POST['table']." WHERE id='".$_POST['id']."'";
echo "<div>The query is: " . htmlentities($query). "</div>";
$result = mysql_query($query);
$row = mysql_fetch_array( $result ); // Line 60 !

echo $row['title'];
?>
0 голосов
/ 20 июля 2009

этот код очень взломан.

Попробуйте изменить

$result = mysql_query("SELECT * FROM ".$_POST['table']." WHERE id='".$_POST['id']."'");

до

$result = mysql_query("SELECT * FROM " . mysql_real_escape_string($_POST['table']) ." WHERE id='" . mysql_real_escape_string($_POST['id']) . "'");

Также в своем HTML убедитесь, что элементы формы имеют name = "table" для элемента table и name = "id" для элемента id. Если у вас уже есть id = "table" и id = "id", просто добавьте name = "table" и name = "id" также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...