Member 14636305 Ответов: 3

Выберите trable row with id notice: undefined variable: id in C:\wamp64server\www\register\approve\n.php на линии 9


когда я пытаюсь получить значения отображается вышеприведенная ошибка





<?php 
session_start();
include("connectdb.php");
//include("statuselectricity.php");
 if( isset( $_POST['id'])) {
    $id = $_POST['id']; 
} 

          $query = "SELECT * from approvedelectricity  where id` = '$id';";
     $result= mysqli_query($conn, $query);
 if(mysqli_num_rows($result)>0){
                   while($row = mysqli_fetch_array($result))
    $rows[] = $row;
foreach($rows as $i){
            if($i['message']=='approved'){
                echo " liked your post";
}else{
                echo "rejected";
}
}
}
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
mysqli_close($conn);
?><br/><a href="index.php">BACK</a>


Что я уже пробовал:

мне нужно, чтобы отобразить сообщение, если сообщение одобрено утверждено

Mohibur Rashid

что произойдет, если $_POST['id'] не существует

3 Ответов

Рейтинг:
1

Afzaal Ahmad Zeeshan

Это происходит потому, что ваша переменная $id выходит за пределы области действия блока if.

if( isset( $_POST['id'])) {
    $id = $_POST['id']; 
} 
Таким образом, вам нужно либо создать переменную вне этой области и обновить ее значение здесь, либо вы должны принести код, который обращается к этой переменной. Я считаю, что второй вариант очень подходит для этого, так как в случае, если $id не существует, нет никакого смысла выполнять код.
if(isset($_POST['id'])) {
    $id = $_POST['id']; 

    $query = "SELECT * from approvedelectricity  where id = '$id';";
    $result = mysqli_query($conn, $query);

    // .. so on
} 
Еще одна вещь, этот код подвергается воздействию SQL—инъекции, и это очень плохо-Читать далее здесь[^]—поэтому вы всегда должны дезинфицировать входные данные по мере их получения.

mysql - как я могу предотвратить SQL-инъекцию в PHP? - переполнение стека[^]


Рейтинг:
1

Patrice T

$query = "SELECT * from approvedelectricity  where id` = '$id';";

Не обязательно решение вашего вопроса, но у вас есть еще одна проблема.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]
-----
Совет: Научитесь правильно делать отступы в вашем коде, это подчеркнет его структуру и поможет чтению и пониманию. Это также помогает выявлять структурные ошибки.
<?php
session_start();
include("connectdb.php");
//include("statuselectricity.php");
if( isset( $_POST['id'])) {
    $id = $_POST['id'];
}

$query = "SELECT * from approvedelectricity  where id` = '$id';";
$result= mysqli_query($conn, $query);
if(mysqli_num_rows($result)>0){
    while($row = mysqli_fetch_array($result))
    $rows[] = $row;
    foreach($rows as $i){
        if($i['message']=='approved'){
            echo " liked your post";
        }else{
            echo "rejected";
        }
    }
}
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
mysqli_close($conn);
?><br/><a href="index.php">BACK</a>

Стиль отступа - Википедия[^]

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]


Рейтинг:
1

Nexpulse

$query = "SELECT * FROM `approvedelectricity` WHERE `id` = $id";
$результат= $Конн-&ГТ;запрос($запроса);


Richard Deeming

Неизмененной копией части вопроса является НЕ "решение" этого вопроса.