2013-11-30 1 views
2

В строке $id=$_GET['id']; есть ошибка: Примечание: Неопределенный индекс: id в D: \ XAMPP \ htdocs \ view_topic.php в строке 101. Я попытался изменить «$ _GET» на «$ _POST», но ошибка все тот же. Любая помощь ?view_forum.php. Не удалось установить идентификатор get

Я пытаюсь извлечь идентификатор из базы данных и перечислил все темы форума, размещенные пользователями. Другие php-файлы могут работать плавно. У меня возникла проблема с возвратом идентификатора сообщения.

<?php 
$host="localhost"; 
$username="root"; 
$password=""; 
$db_name="db"; 
$tbl_name="forum_question"; 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// get value of id that sent from address bar 
$id=$_GET['id']; 
$sql="SELECT * FROM $tbl_name WHERE id='$id'"; 
$result=mysql_query($sql); 
$rows=mysql_fetch_array($result); 
?> 
+2

[** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (http://j.mp/XqV7Lp). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. Если вы выберете PDO, [здесь хороший учебник] (http://j.mp/PoWehJ). – kelunik

+1

Каков ваш url? Получите данные из URL. –

+0

Как этот файл выполняется? Это действие к форме или оно называется? Исходя из этого, вы должны иметь возможность извлекать соответствующий ключ из любого из глобальных переменных $ _POST или $ _GET. Пожалуйста, добавьте эту информацию в свой вопрос. – vee

ответ

0

Всегда использовать конструкции isset при назначении данных переменных из внешнего мира

if(isset($_GET['id'])) 
{ 
$id=$_GET['id']; 
$sql="SELECT * FROM $tbl_name WHERE id='$id'"; 
$result=mysql_query($sql); 
$rows=mysql_fetch_array($result); 
} 
else 
{ 
echo "ID was not set. Let me go and check the form again !"; 
} 
?> 
+1

Сокращенно из-за использования 'mysql_ *' функций и возможной инъекции sql. – kelunik

0

Эта переменная должна быть установлена ​​в вашем URL. Вы должны проверить, если он присутствует: тогда

<?php 
$host = "localhost"; 
$username = "root"; 
$password = ""; 
$db_name = "db"; 
$tbl_name = "forum_question"; 

// Connect to server and select databse. 
$db = new mysqli($host, $username, $password, $db_name); 

// get value of id that sent from address bar 
$id = isset($_GET['id']) ? (int) $_GET['id'] : 0; 

if($id <> 0) { 
    // TODO 
    // 404 Not Found 
} else { 
    $sql = "SELECT * FROM $tbl_name WHERE id='$id'"; 
    $row = $db->query($sql)->fetch_assoc(); 
    // TODO 
    // Do Something with Data 
} 

Ваш URL должен быть http://example.com/path/to/script.php?id=42

  • Я добавил (int), так что никаких SQL инъекции не возможны.
  • Я заменил mysql_* на MySQLi, см. Комментарий к вашему вопросу.
  • Я удалил цитаты из переменных в вашем запросе, они вам не нужны.
+0

Переключение с mysql_ на mysqli_ несколько бессмысленно, если вы по-прежнему выступаете за интерполяцию и ручное экранирование/литье вместо привязанных параметров/подготовленных инструкций (в соответствии со стандартным комментарием). – mario

+0

Вам понадобится использовать функции MySQL версий> = 4.1 – kelunik