2013-07-19 2 views
0

возникли проблемы со следующим кодом:базы данных MySQL не загружается после перенаправления на новую страницу

<?php 
$con = mysql_connect("localhost","",""); 
if (!$con){ 
die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db("abc", $con); 

$ids = intval($_GET['id']); 
if ($ids==0){ 
    $id = rand (0,50); 
    header("Location: http://index.php?id=$id"); 
} 
?> 

<html> 
<body> 

<?php 
$result = mysql_query("SELECT * FROM abcdatabase WHERE id = '$id'"); 

if (!$result) { 
echo 'Could not run query: ' . mysql_error(); 
exit; 
} 

$row = mysql_fetch_array($result); 

echo "{$row['username']}<br>"; 

?> 

</body> 
</html> 

После перенаправлять на новую страницу, например, http://index.php/?id=38, база данных MySQL не загружается, я думаю. Потому что строка echo "{$row['username']}<br>"; ничего не отображает, а также не отображается сообщение об ошибке. На самом деле я не понимаю, что я делаю неправильно. Я начинающий программист. Кто-нибудь, пожалуйста, помогите мне разобраться с проблемой.

+0

Есть ли строка в таблице 'abcdatabase' с' id = 38'? – Wilq

+0

@Wilq Да, есть строка в abcdatabase с id = 38 –

ответ

0

Вы могли бы попробовать что-то вроде этого

$id = rand(0, 50); 
if (isset($_GET['id'])){ 
    $id = intval($_GET['id']); 
} 

Вы также должны по крайней мере, избежать Ид-переменную перед вставкой в ​​запрос SQL, используя

$escapedId = mysql_real_escape_string($id); 
+0

mysql_real_escape_string здесь не нужна, так как уже существует еще более ограничивающий intval. – Roebie

+0

Это очень хороший момент! – martme

1

Для начала вы не должны использовать библиотека mysql больше, потому что она устарела. Вместо этого используйте библиотеку mysqli: http://php.net/manual/en/book.mysqli.php

Во-вторых, у вас есть небольшая ошибка. В строке 8 вы задаете переменную $ ids, но в строке 19 вы ее не используете. Вы используете $ id, который будет пустым. Таким образом, вы ищите id = empty, и ваш запрос завершается успешно (у вас есть результат: никаких записей не найдено), поэтому нет сообщения об ошибке, но вы также не получаете имя (потому что никаких записей не найдено). Так заменить

$result = mysql_query("SELECT * FROM abcdatabase WHERE id = '$id'"); 

с

$result = mysql_query("SELECT * FROM abcdatabase WHERE id = '$ids'"); 

В общем, если ваш код ожидает найти 1 результат, а также добавить проверку, что вы действительно найти один и добавить сообщение об ошибке, если вы этого не сделаете. Заменить

if (!$result) { 
    echo 'Could not run query: ' . mysql_error(); 
    exit; 
} 

с

if (!$result) { 
    echo 'Could not run query: ' . mysql_error(); 
    exit; 
} 
elseif (mysql_num_rows($result) <> 1) { 
    echo 'No records found'; 
    exit; 
} 

В-третьих, есть ошибка заголовка, как объяснил Йоахим.

+0

Привет, спасибо вам очень. Я очень ценю ваш ответ. Отличный поиск ошибок. У меня недостаточно баллов, чтобы проголосовать за ответ. Но большое спасибо за обнаружение ошибки. Теперь он работает хорошо. –

+0

Добро пожаловать. Вы могли бы проголосовать за меня, как только у вас будет достаточно репутации. – Roebie

Смежные вопросы