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.
Ich erhalte die folgende Fehlermeldung: (Klicken Sie auf das Bild zu vergrößern)
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 ...
Hierist 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
}
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
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
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