2016-05-15 86 views
0

我想獲得一定的「$ _SESSION」變量從另一PHP頁面SQL查詢的名字,我不斷收到錯誤..

場景是,如果我爲某個頁面輸入評論,我希望該頁面的名稱進入數據庫。 (請參閱下面的屏幕截圖) 如果我提交評論,我希望名稱'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錯誤是因爲在您的會話變量值 $值5 = $ _SESSION [ '郊區']報價;

如果您將打印/回聲$值5/$ _ SESSION [ '郊區'] 你會得到實際文本引用類似

'SEDGLEY PK狗叫開火龍區'

代替

SEDGLEY PK狗叫開火龍區

快速的解決方案是 無論是從會話變量$值5/$ _ 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 [「身份證」]。所以要麼使用花括號{},要麼使用我們的單引號。

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);