PHP MySQL Datenbank Verbindungsfehler?

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.

Von Experte TheFamousSpy bestätigt

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.

Woher ich das weiß:Berufserfahrung – Programmierer
FrageCoding 
Fragesteller
 29.03.2022, 09:56

Oh danke, geht aber immer noch nicht. Jetzt kommt das


Undefined variable $sql
0
Suboptimierer  29.03.2022, 09:57
@FrageCoding

Dann ist er in das isset nicht eingestiegen. Du solltest vor dem if $sql = "" setzen.

0
FrageCoding 
Fragesteller
 29.03.2022, 09:59
@Suboptimierer

Hab ich gemacht. :Fatal error: Uncaught ValueError: mysqli_query(): Argument #2 ($query) cannot be empty

0
Suboptimierer  29.03.2022, 10:01
@FrageCoding

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.

0
Suboptimierer  29.03.2022, 10:07
@Suboptimierer

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)

0
FrageCoding 
Fragesteller
 29.03.2022, 10:18
@Suboptimierer

Das gute es kommt kein Fehler, dass schlechte es kommen aber auch nicht die Werte.

0
Suboptimierer  29.03.2022, 10:19
@FrageCoding

Dann könntest du zum isset-If noch einen else-Zweig mit Fehlerausgabe definieren.

Im Zweifelsfall musst du dich an das Problem heran debuggen.

0
FrageCoding 
Fragesteller
 29.03.2022, 10:21
@Suboptimierer

Ich hab noch eine Frage, du hast den Code so:

  . " Datum = '" . $_POST['datum'] . "'"

Muss der nicht so?

  . "' Datum = '" . $_POST['datum'] . "'"
0
Suboptimierer  29.03.2022, 10:22
@FrageCoding

Am Ende würde da stehen ... WHERE 'Datum = '01.01.2022'

Ich sehe den Sinn des ersten Anführungszeichens nicht.

0
FrageCoding 
Fragesteller
 29.03.2022, 10:25
@Suboptimierer

Also das Erste bleibt richtig?

Diese IF Bedingung wird als False gewertet, warum?

if(isset($_POST["gesendet"]))
0
Suboptimierer  29.03.2022, 10:27
@FrageCoding

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';
}
...
0
FrageCoding 
Fragesteller
 29.03.2022, 10:29
@Suboptimierer

Und wie löse ich das? Sorry wenn du es gerade schon beantwortet hast, ich versteh php nur noch nicht so gut.

0

Mach doch einfach eine if Struktur rein. und prüfe den Rückgabewert des Datenbankhandlers.

Woher ich das weiß:Berufserfahrung – Web Developer bei einem mittelständischen Portalbetreiber
FrageCoding 
Fragesteller
 29.03.2022, 10:47

Ich kannd das leider nicht.

0
LeBonyt  29.03.2022, 10:53
@FrageCoding

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());
}
0
FrageCoding 
Fragesteller
 29.03.2022, 11:17
@LeBonyt

if(isset($_POST["gesendet"]) das ist halt irgendwie false

0