2016-05-15 11 views
0

Ich versuche, den Namen eines bestimmten ‚$ _SESSION‘ Variable in einer SQL-Abfrage von einem anderen PHP-Seite zu bekommen, ich erhalte Fehler halten ..

Das Szenario is, Wenn ich eine Rezension für eine bestimmte Seite eintrage, möchte ich, dass der Name dieser Seite in die Datenbank aufgenommen wird. (Siehe Screenshot unten) Wenn ich eine Rezension einreiche, möchte ich den Namen 'SEDGLEY PK ...' usw. in der Datenbank gespeichert haben.

Scenario

Ich erhalte die folgende Fehlermeldung: (Klicken Sie auf das Bild zu vergrößern)
Error message

Unten ist der Code der Seite: (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"); 
?> 

Ich vermute, dass etwas an der Variablen $ value5 nicht stimmt ...

Hier

ist der Code für die Seite, die die Überprüfung auf eingegeben wurde ..

<?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

Sie laufen in etwas, das wäre ein SQL-Injection-Punkt in einem produktiven Ort sein.Verwenden Sie vorbereitete Aussagen und Sie sollten in Ordnung sein. – Sirko

+0

Ich bin nicht besorgt über SQL-Injektion zu diesem Zeitpunkt, ich brauche nur den Eintrag in die Datenbank arbeiten, als ich irgendwann dazu kommen werde !. Aber beantwortet meine Frage nicht. – deluxenathan

+0

Das Problem hat die gleiche Ursache: Wenn ich Ihren Screenshot richtig lese, gibt es zwei Anführungszeichen um den letzten Parameter, der in diesem Fall bricht. Wäre nicht mit vorbereiteten Aussagen passiert. – Sirko

Antwort

1

hallo deluxenathan

SQL-Fehler Sie ist immer wegen Zitat in Ihrer Sitzung Variablenwert $ value5 = $ _SESSION [ 'SUBURB'];

wenn Sie drucken/echo $ value5/$ _ SESSION [ 'SUBURB'] Sie eigentliche Text wie

zitiert wird erhalten

'sedgley PK folgenden Hund AREA'

statt

sedgley PK folgenden Hund AREA

schnelle Lösung ist entweder Zitat von Session-Variablen $ value5/$ _ SESSION [ 'SUBURB'] oder Abfrage wie

$ sql = „INTO dog_parks.reviews (REVIEW_TEXT, Benutzername, Datum einfügen entfernen , Bewertung, Artikel)
WERTE ('$ value1', '$ value2', '$ value3', '$ value4', $ value5) ";

+0

Danke.! Gelöst meine Frage – deluxenathan

+0

Sie sind immer willkommen Deluxenathan – Kunal

0

PHP nicht $ _SESSION erkennen kann [ ‚id‘] aufgrund der einfachen Anführungszeichen. Verwenden Sie also geschweifte Klammern {} oder nehmen Sie unsere einfachen Anführungszeichen.

0

Ich denke, das sollte eine Zeichenfolge sein. Versuchen Sie stattdessen

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