PHP MySQL Datenbank Verbindungsfehler?
syntax error, unexpected variable "$res" line 12
<?php
require_once ('connect.php');
$con = mysqli_connect("127.0.0.1", "root", "jbujbujbu");
mysqli_select_db($con, "test");
if(isset($_POST["gesendet"]))
$sql = "SELECT * FROM konzerte"
. "'Datum'" . $_POST['date']
. " 'Land = '" . $_POST['land']
. " 'Stadt = '" . $_POST['stadt']
$res = mysqli_query($con, $sql)
or die(mysqli_error($con));
$num = mysqli_num_rows($res);
if($num > 0) {echo "<p>Ergebnis:<br></p>";
echo "<p>";
echo $num;
echo "</p>";
}
else echo "<p>Keine Ergebnisse<br></p>";
mysqli_close($con);
?>
3 Antworten
Am Ende von hier fehlt ein Semikolon:
$sql = "SELECT * FROM konzerte"
. "'Datum'" . $_POST['date']
. " 'Land = '" . $_POST['land']
. " 'Stadt = '" . $_POST['stadt']
Hier auch:
$res = mysqli_query($con, $sql)
Die Variable $sql ist nur im Scope der if-Verzweigung vorhanden, du kannst weiter unten also nicht darauf zugreifen.
Als Bemerkung: Anstelle von Mysqli solltest du das neuere PDO verwenden.
Das ist kein Verbindungsfehler. Du hast an der bemäkelten Stelle ein Semikolon vergessen.
Ich würde den Befehl nach dem if einrücken und das "or die" auch. Durch diesen optischen Effekt passiert das vielleicht nicht mehr so schnell.
Dann ist er in das isset nicht eingestiegen. Du solltest vor dem if $sql = "" setzen.
Hab ich gemacht. :Fatal error: Uncaught ValueError: mysqli_query(): Argument #2 ($query) cannot be empty
Die Frage ist, ob du überhaupt etwas machen möchtest, falls $_POST["gesendet"] nicht gesetzt ist.
Prinzipiell könntest du die Verarbeitung mit return beenden oder du ziehst den gesamten Rest unter das if.
Es scheint, als wäre das if ursprünglich weiter gefasst gewesen.
Ich formatiere mal deinen Code etwas (hoffentlich) besser, sodass ein brauchbarer Ansatz entsteht:
<?php
require_once ('connect.php');
$con = mysqli_connect("127.0.0.1", "root", "jbujbujbu");
mysqli_select_db($con, "test");
if(isset($_POST["gesendet"]))
{
$sql = "SELECT * FROM konzerte WHERE "
. " Datum = '" . $_POST['date'] . "'"
. " AND Land = '" . $_POST['land'] . "'"
. " AND Stadt = '" . $_POST['stadt'] . "'";
$res = mysqli_query($con, $sql)
or die(mysqli_error($con));
$num = mysqli_num_rows($res);
if($num > 0)
{
echo "<p>Ergebnis:</p>";
echo "<p>$num</p>";
}
else
echo "<p>Keine Ergebnisse</p>";
}
mysqli_close($con);
?>
(ungetestet)
Das gute es kommt kein Fehler, dass schlechte es kommen aber auch nicht die Werte.
Dann könntest du zum isset-If noch einen else-Zweig mit Fehlerausgabe definieren.
Im Zweifelsfall musst du dich an das Problem heran debuggen.
Ich hab noch eine Frage, du hast den Code so:
. " Datum = '" . $_POST['datum'] . "'"
Muss der nicht so?
. "' Datum = '" . $_POST['datum'] . "'"
Am Ende würde da stehen ... WHERE 'Datum = '01.01.2022'
Ich sehe den Sinn des ersten Anführungszeichens nicht.
Also das Erste bleibt richtig?
Diese IF Bedingung wird als False gewertet, warum?
if(isset($_POST["gesendet"]))
Das wird als false ausgewertet, weil die Variable gesendet nicht gepostet wurde.
Deine Seite wird von einer anderen aus aufgerufen und deiner Seite sollte gesendet übergeben werden. Wird es nur nicht.
Zum Testen könntest du dir eine Umgebung schaffen, in der die POST-Variablen manuell gesetzt werden, wenn der Aufrufer nicht gegeben ist oder die Variable nicht gesetzt wurde.
Also beispielsweise so:
if(!isset($_POST["gesendet"]))
{
$_POST["date"] = '01.01.2022';
$_POST["land"] = 'DE';
$_POST["stadt"] = 'München';
}
...
Und wie löse ich das? Sorry wenn du es gerade schon beantwortet hast, ich versteh php nur noch nicht so gut.
Mach doch einfach eine if Struktur rein. und prüfe den Rückgabewert des Datenbankhandlers.
Wie kann ich nicht? Eine if Struktur bauen ist ja nicht soooo schwierig..
$result = mysql_query($con,$sql);
if (!$result) {
die('Ungültige Abfrage: ' . mysql_error());
}
if(isset($_POST["gesendet"]) das ist halt irgendwie false
Oh danke, geht aber immer noch nicht. Jetzt kommt das