Как мне получить значение ID из URL?

#php #mysql #forums #reply

#php #mysql #Форумы #Ответить

Вопрос:

Я пытаюсь создать свои собственные форумы, используя руководство. Я уже исправил довольно много ошибок, и мне осталось сделать 1.

Когда вы публикуете ответ в потоке, он сохраняет ваш ответ в базе данных MySQL. В вашем ответе будет значение int, совпадающее с идентификатором потока, на который вы ответили, под названием question_id.

Я не могу заставить свой код получать идентификатор потока из строки URL.

Это 2 строки кода, которые должны выполнить всю работу:

 $id = $_GET['id'];

$sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')";
  

И это весь файл целиком add_answer.php

 <?php

$host="XXXXXX"; // Host name
$username="XXXXXX"; // Mysql username
$password="XXXXXX"; // Mysql password
$db_name="XXXXXX"; // Database name
$tbl_name="XXXXXX"; // Table name

// Connect to server and select database.
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 hidden field
$id = $_GET['id'];
var_dump($id);

// Find highest answer number.
$sql="SELECT MAX(a_id) AS Maxa_id FROM $tbl_name WHERE question_id='$id'";
$result=mysql_query($sql);
$rows=mysql_fetch_array($result);

// $result=mysql_query($sql) or die(mysql_error());

// add   1 to highest answer number and keep it in variable name "$Max_id". if there no answer yet set it = 1
if ($rows) {
    $Max_id = $rows['Maxa_id'] 1;
}
else {
    $Max_id = 1;
}

// get values that sent from form
$a_name=$_POST['a_name'];
$a_email=$_POST['a_email'];
$a_answer=$_POST['a_answer'];

$datetime=date("d/m/y H:i:s"); // create date and time

// Insert answer
$sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')";
$result2=mysql_query($sql2) or die(mysql_error());

if($result2)
{
    echo "Successful<BR>";
    echo "<meta http-equiv='refresh' content='4;url=index.php?content=main_forum' />";

    // If added new answer, add value  1 in reply column
    $tbl_name2="forum_question";
    $sql3="UPDATE $tbl_name2 SET reply='$Max_id' WHERE id='$id'";
    $result3=mysql_query($sql3);

}
else {
    echo "An error as occured. Please report this to administrator. ID: FAA01.";
}

mysql_close();
?>
  

Комментарии:

1. $_GET[‘id’] должен работать, если ваш URL выглядит как /post.php?id = 21, как выглядит ваш URL?

2. Ваш код уязвим для SQL-инъекций, php.net/manual/en/security.database.sql-injection.php .

3. Я действительно надеюсь, что вы этого не делаете … если вы напрямую включите переменную GET ‘id’ в свой sql-запрос, ваш форум долго не просуществует…

4. Пожалуйста, опубликуйте URL, переданный скрипту, иначе мы не сможем узнать, правильно ли он отформатирован. Ваш URL должен выглядеть следующим образом www.something.com/file.php ?id=n где n — это question_id, который вы хотите передать, тогда $_GET[«id»] должен работать

Ответ №1:

ваш $_GET[id] должен быть очищен, прежде чем использовать его в mysql. В нынешнем виде прямо сейчас вы находитесь в очень реальной опасности атаки на вашу базу данных. Я предлагаю использовать PDO

Переучивать что-то — отстой, но если вы учитесь, лучше делать это правильно.

Что касается вашего вопроса…Я не знаю. Я бы попробовал echo $sql2; и убедился, что запрос выглядит правильно. Также выведите_r($_GET), чтобы увидеть ваш get-массив.

Ответ №2:

Вы должны отлаживать что-то одно за раз! Вы говорите:

Я не могу заставить свой код получать идентификатор потока из строки URL.

итак, первое, на что нужно обратить внимание, — это строка местоположения вашего браузера, где находится URL-адрес. Зачем заботиться о следующих ста строках кода, если первая из них неправильная? Если ваш идентификатор потока равен 999 и вы хотите, чтобы этот код извлекал такой идентификатор:

 $id = $_GET['id'];
  

… вам нужно увидеть id=999 в URL-адресе после ? символа (который является обязательным) и перед # символом (который является необязательным).

Если ID здесь отсутствует, вы должны получить уведомление:

Обратите внимание: неопределенный индекс: id

Если вы этого не сделаете, значит, вы неправильно настроили PHP. Самый простой способ — найти ваш php.ini файл, установить эти директивы:

 error_reporting = E_ALL
display_errors = On
  

… и перезапустите свой веб-сервер.

Наконец, научитесь использовать var_dump().

Ответ №3:

  1. $_GET['id'] Существует ли? То есть, оно действительно присутствует в URL? Какой именно URL используется? Дважды проверьте, что в пути нет заглавных букв, поскольку вы, похоже, часто путаете регистры (совет: используйте в коде только строчные буквы)

  2. Узнайте о addslashes и mysql_real_escape_string , иначе кто-нибудь превратит ваш сервер в развалины.

  3. У вас избыточная проверка ошибок.

     $result2=mysql_query($sql2) or die(mysql_error());
    // ...
    if( $result2) {...} else {...}
      

Этот последний бит избыточен, поскольку, если $result2 равно false, то он уже умер.

Ответ №4:

Если ваша форма отправлена post , вы должны получить id с помощью:

 $id = $_POST['id'];