2016-05-15 2 views
0

Я пытаюсь получить имя некоторой переменной «$ _SESSION» в SQL запрос из другого PHP страницы, я продолжаю получать ошибки ..

Сценарий is. Если я вхожу в обзор для определенной страницы, я хочу, чтобы имя этой страницы попало в базу данных. (См. Скриншот ниже) Если я отправлю отзыв, я хочу, чтобы имя «SEDGLEY PK ...» и т. Д. Хранилось в базе данных.

Scenario

Я получаю следующее сообщение об ошибке: (Нажмите на картинку для увеличения)
Error message

Ниже приведен код страницы: (enter_review.php)

$value1 = $_POST['review']; 
$value2 = $_SESSION['id']; 
$value3 = $date = date("Y-m-d"); 
$value4 = $_POST['rating']; 
$value5 = $_SESSION['SUBURB']; 
try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $sql = "INSERT INTO dog_parks.reviews (review_text, username, date, rating, item)   
    VALUES ('$value1', '$value2', '$value3', '$value4', '$value5')"; 
    // use exec() because no results are returned 
    $conn->exec($sql); 
    echo "Review Successful"; 
    } 
catch(PDOException $e) 
    { 
    echo $sql . "<br>" . $e->getMessage(); 
    } 

$conn = null; 


header("refresh:20; url=index.php"); 
?> 

Я подозреваю, что у переменной $ value5 есть что-то не так ...

Вот код страницы, что обзор был введен в ..

<?php 
    if (isset($_GET['suburb'])) 
    { 
     $_SESSION["SUBURB"] = $_GET['suburb']; ?> 
     <!-- PRINTING DOG PARK NAME --> 
      <h1><?php echo $_SESSION["SUBURB"]; ?></h1> 


      <table border="1" cellspacing="5" cellpadding="5" width="100%"> 
       <thead> 
        <tr> 
         <th>Park Name</th> 
         <th>Street</th> 
         <th>Suburb</th> 
         <th>Dog Park Area (m2)</th> 
        </tr> 
       </thead> 
       <tbody> 
       <?php 

        $result = $conn->prepare("SELECT * FROM dog_parks.items where dog_park_name = $_SESSION[SUBURB]"); 
        $result->execute(); 
        for($i=0; $row = $result->fetch(); $i++){ 

       ?> 

        <tr> 
         <td><label><?php echo $row['Park_Name']; ?></label></td> 
         <td><label><?php echo $row['Street']; ?></label></td> 
         <td><label><?php echo $row['Suburb']; ?></label></td> 
         <td><label><?php echo $row['Dog_Park_Area_(m2)']; ?></label></td> 

        </tr> 
        <?php } ?> 
       </tbody> 
      </table> 



      <?php 
    } 
+0

Вы работаете в чем-то, что бы точка инъекции SQL в продуктивном месте.Используйте подготовленные заявления, и все должно быть в порядке. – Sirko

+0

Меня не интересует SQL-инъекция в этот момент времени, мне просто нужна запись в базу данных, чем я в конечном итоге доберусь до нее !. Но не отвечает на мой вопрос. – deluxenathan

+0

Проблема имеет ту же причину: если я правильно прочитал ваш скриншот, есть два кавычки вокруг последнего параметра, что в этом случае разрывает его. Не было бы сделано с подготовленными заявлениями. – Sirko

ответ

1

привет deluxenathan

Ошибка SQL вы получаете из-за цитаты в вашей сессии значение переменной $ value5 = $ _SESSION [ 'Пригород'];

если вы будете печатать/эхо $ value5/$ _ SESSION [ 'Пригород'] вы получите фактический текст цитируется как

'Седжли PK DOG поводка ЗОНА'

вместо

Седжли PK DOG поводка AREA

быстрое решение либо удалить цитату из переменной сессии $ value5/$ _ SESSION [ 'Пригород'] или из запроса, как

$ SQL = «INSERT INTO dog_parks.reviews (REVIEW_TEXT, имя пользователя, дата , rating, item)
VALUES ('$ value1', '$ value2', '$ value3', '$ value4', $ value5) ";

+0

спасибо.! Решил мой вопрос – deluxenathan

+0

Вы всегда рады deluxenathan – Kunal

0

PHP не может распознать $ _SESSION [ «ID»] из-за одинарные кавычки. Поэтому либо используйте фигурные скобки {}, либо возьмем одинарные кавычки.

0

Я думаю, что это должна быть строка. Попробуйте это вместо

$sql = "INSERT INTO dog_parks.reviews (review_text, username, date, rating, item)   
 
    VALUES (:review_text,:username,:date,:rating,:item)"; 
 
$conn->bindParam(':review_text', $value1, PDO::PARAM_STR); 
 
$conn->bindParam(':username', $value2, PDO::PARAM_STR); 
 
$conn->bindParam(':date', $value3, PDO::PARAM_STR); 
 
$conn->bindParam(':rating', $value4, PDO::PARAM_STR); 
 
$conn->bindParam(':item', $value5, PDO::PARAM_STR);

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