hannes: Warning: mysqli_query(): Couldn't fetch mysqli in C:\... on line

Hallo,
ich bin daran, die scripts von mysql auf mysqli umzuschreiben. Seither funtkioniert das login nicht mehr.
Hier der Code:

  
<?php  
session_start();  
  
include("./include/config.php");  
include("./include/db_connect.php");  
include("functions.php");  
  
...  
	  
$sql = "SELECT kundenID FROM kunden WHERE username = '".$_POST['myusername']."' AND password = '".md5($_POST['mypassword'])."' ";  
  
$result = mysqli_query($connect, $sql) OR die("<pre>\n".$sql."</pre>\n".mysqli_connect_error());  
  
// wird die kundenID des Users geholt und der User damit eingeloggt  
$row = mysqli_fetch_assoc($result);  
  
// Prüft, ob wirklich genau ein Datensatz gefunden wurde  
if (mysqli_num_rows($result)==1){  
	 doLogin($row['kundenID'], isset($_POST['Autologin']));  
	 header("location:cart.php?action=add&artikelID=".$_GET['artikelID']."&id=". $_SESSION['UserID'] ." ");  
}  
  
else {  
	 header("location:k_login.php?error=TRUE ");  
}  
  
include("./include/db_close.php");  
?>

Line 13 der Warnmeldung bezieht sich auf $result = mysqli_query($connect... etc.

mysqli_connect_error() bringt die richtige SQL-Abfrage in richtiger Syntax und mit richtigem Resultat (die gewünschte 'kundenID').

Wenn ich die sql-Abfrage-Parameter $_POST['myusername'] und $_POST['mypassword'] mit mysqli_real_escape_string($connect, $_POST['myusername']) schütze, gibt es zwei zusätzliche Warnmeldungen: Warning: mysqli_real_escape_string(): Couldn't fetch mysqli in C:...

Ich habe in 'db_connect.php' statt $connect auch $_SESSION['connect'] probiert. Nützt auch nichts.

Kann mir jemand helfen?

  1. Tach!

    [...] Couldn't fetch mysqli [...]

    Ich kannte diese Fehlermeldung bisher nicht, aber wenn ich den zitierten Teil bei Google einkippe, bekomme ich mehrere Ergebnisse mit Vorschlägen dazu, inklusive Verweis auf das PHP-Handbuch mysqli_query(), gleich der erste User-Kommentar. Es liegt wohl an der Art und Weise, wie du die Verbindung aufbaust.

    dedlfix.

    1. Hallo,
      ich verbringe nun zusammengezählt wohl an die 10 oder noch mehr Stunden mit diesem Problem. Natürlich habe ich gegoogelt und habe auch auf stackoverflow viele Meldungen dazu gelesen und geprüft - aber es will einfach nicht.
      Entweder drehe ich bei meiner Problembehandlung in irgendeinem Kreis, den ich nicht erkenne, oder ... ich weiss einfach nicht weiter.

      Die Verbindung wird so aufgebaut:

        
      <?php  
      error_reporting(E_ALL);  
        
      $connect = mysqli_connect($dbserver,$dbuser,$dbpass,$dbname);  
        
      if (mysqli_connect_errno()){  
        echo "Zeile ".__LINE__.": Datenbankverbindung ist fehlgeschlagen ! " . mysqli_connect_error();  
        exit();  
      }  
        
      ?>
      

      Es ist ja auch so, dass die Verbindung hergestellt  wird. Ich habe die Verbindungsvariablen im checklogin-script mit echo geprüft.
      Auch die Übergabe-Variablen $_POST["myusername"] etc. sind bekannt - ebenfalls geprüft.
      Ich habe gar eine SQL-Query hart codiert (mit den effektiven Daten des Test-Kunden), und auch hier gibt mysqli_connect_error() die korrekte SQL-Query zurück.
      Nur eben weiter geht es dann nicht mehr.

      Kann mir da wirklich niemand helfen.
      Gruss

      1. Tach!

        ich verbringe nun zusammengezählt wohl an die 10 oder noch mehr Stunden mit diesem Problem. Natürlich habe ich gegoogelt und habe auch auf stackoverflow viele Meldungen dazu gelesen und geprüft - aber es will einfach nicht.

        Du musst dich mir gegenüber nicht rechtfertigen, aber wenn ich sehe, dass es zu einem Problem Antworten gibt, und du auf keine davon eingehst, sollte ich annehmen dürfen, dass du diese nicht kennst.

        Ich habe gar eine SQL-Query hart codiert (mit den effektiven Daten des Test-Kunden), und auch hier gibt mysqli_connect_error() die korrekte SQL-Query zurück.

        Wieso sollte mysqli_connect_error() das Statement zurückgeben? Es ist dafür da, Verbindungsfehler auszugeben. Ich bin mir nicht mal sicher, dass es überhaupt eine sinnvolle Funktion hat, wenn eine Verbindung besteht, denn mysqli_error()/-errno() wollen immer eine Verbindungskennung, auf die sie sich beziehen können, im Gegensatz zu mysqli_connect_error().

        Nur eben weiter geht es dann nicht mehr.

        Untersuch bitte genau, was die Funktionen zurückgeben. Lass dir das mit var_dump() anzeigen. Verwende die richtigen Funktionen zur Fehlertext-Ermittlung. Verzichte auf "or-die"-Konstrukte. Die sind vielleicht für einen schnellen Test sinnvoll, nicht aber für produktiven Code. Denn sie hinterlassen unfertige Seiten und meist auch Debug-Informationen, die keinen Außenstehenden was angehen. Anwender wollen Lösungen, keine Hinweise auf Probleme mit der Technik. Überleg dir Alternativen, die den Anwender sinnvoll doch noch zu einem Ergebnis führen oder ihm Alternativen aufzeigen, wenn Probleme auftreten.

        dedlfix.

        1. Untersuch bitte genau, was die Funktionen zurückgeben. Lass dir das mit var_dump() anzeigen.

          ich habe jetzt

          $result = mysqli_query($connect, $sql) OR die("<pre>\n".$sql."</pre>\n".mysqli_sqlstate($connect));  
          
          

          mit

            
          if (!mysqli_query($connect, $sql)) {  
              printf("Error - SQLSTATE %s.\n", mysqli_sqlstate($connect));  
          }  
          else {  
          	$result = mysqli_query($connect, $sql);  
          }  
          var_dump($result);  
            
            
          if (!mysqli_query($connect, $sql)) {  
            echo("Error description: " . mysqli_error($connect));  
          }  
          else {  
          	$result = mysqli_query($connect, $sql);  
          }  
          var_dump($result);  
          
          

          ersetzt.
          Ich bekomme keine SQLSTATE-Fehlermeldung, der else-Block wird übersprungen, keine mysqli-Fehlermeldung, der else-Block wird ebenfalls übersprungen, var_dump($result) wird beide male nicht angezeigt, das script läuft durch bis -> header("location:k_login.php?error=TRUE ").

          1. Tach!

            if (!mysqli_query($connect, $sql)) {
                printf("Error - SQLSTATE %s.\n", mysqli_sqlstate($connect));
            }
            else {
            $result = mysqli_query($connect, $sql);
            }
            var_dump($result);

              
            
            > Ich bekomme keine SQLSTATE-Fehlermeldung, der else-Block wird übersprungen,  
              
            Dann bringt also der erste Aufruf von mysqli\_query() ein von false verschiedenen Ergebenis, also alles bestens.  
              
            
            > var\_dump($result) wird beide male nicht angezeigt,  
              
            Das kann nicht sein, var\_dump() zeigt immer etwas an. Es gibt da keine Ausnahme. Es müsste NULL und zusätzlich eine Notice wegen nicht vorhandener Variable $result kommen.  
              
            So wie du das machst ist das aber weder für einen produktiven EInsatz noch für Testzwecke sinnvoll. Du rufst die Query mehrfach auf, das erste Mal um zu schauen, ob sie geht und beim zweiten Mal um ein Ergebnis zu bekommen.  
              
            ~~~php
            $result = mysqli_query($connect, $sql);  
            // var_dump($result);  
            if ($result) {  
              // Dinge im Gut-Fall  
            } else {  
              // Fehlerfall  
            }
            

            Oder auch:

            if ($result = mysqli_query($connect, $sql)) { ...

            Oder wenn du zuerst den Fehlerfall behandel willst:

            if (!($result = mysqli_query($connect, $sql))) { ...

            dedlfix.

            1. var_dump($result) wird beide male nicht angezeigt,

              Das kann nicht sein, var_dump() zeigt immer etwas an. Es gibt da keine Ausnahme. Es müsste NULL und zusätzlich eine Notice wegen nicht vorhandener Variable $result kommen.

              Nun, ich hatte echo vergessen. Aber trotzdem: es wird auch mit echo var_dump() oder echo var_dump($result) definitiv nichts, gar nichts, angezeigt. Das script läuft wie gesagt durch bis zur Weiterleitung an header("location:k_login.php?error=TRUE "). Und natürlich lande ich wieder dort beim Eingabeformular für $myusername und $mypassword.

              So wie du das machst ist das aber weder für einen produktiven EInsatz noch für Testzwecke sinnvoll. Du rufst die Query mehrfach auf, das erste Mal um zu schauen, ob sie geht und beim zweiten Mal um ein Ergebnis zu bekommen.

              Ich wollte eben wie empfohlen verschiedene Funktionen auf deren Rückgabe prüfen. Natürlich würde ich das Zeug wieder anpassen, wenn's denn mal funktioniert.

              Gruss

              1. Hi,

                Nun, ich hatte echo vergessen. Aber trotzdem: es wird auch mit echo var_dump() oder echo var_dump($result) definitiv nichts, gar nichts, angezeigt.

                Das echo ist Nonsense, var_dump selber macht schon eine Ausgabe.

                Das script läuft wie gesagt durch bis zur Weiterleitung an header("location:k_login.php?error=TRUE "). Und natürlich lande ich wieder dort beim Eingabeformular für $myusername und $mypassword.

                Na wie wär’s wenn du dann diesen header erst mal auskommentierst, so dass dein Browser nicht weitergeleitet wird … und du eventuelle Meldungen/Debugausgaben auch sehen kannst?

                So wie du das machst ist das aber weder für einen produktiven EInsatz noch für Testzwecke sinnvoll. Du rufst die Query mehrfach auf, das erste Mal um zu schauen, ob sie geht und beim zweiten Mal um ein Ergebnis zu bekommen.

                Ich wollte eben wie empfohlen verschiedene Funktionen auf deren Rückgabe prüfen.

                Die Vorgehensweise, die du dafür gewählt hast, ist trotzdem unsinnig. dedlfix hat gezeigt, wie’s richtig geht.

                MfG ChrisB

                --
                Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
              2. Tach!

                var_dump($result) wird beide male nicht angezeigt,
                Das kann nicht sein, var_dump() zeigt immer etwas an. Es gibt da keine Ausnahme. Es müsste NULL und zusätzlich eine Notice wegen nicht vorhandener Variable $result kommen.
                Nun, ich hatte echo vergessen.

                var_dump() gibt selbständig seine Information aus.

                Aber trotzdem: es wird auch mit echo var_dump() oder echo var_dump($result) definitiv nichts, gar nichts, angezeigt.

                Dann wird das var_dump() entweder nicht ausgeführt oder du schaust nicht richtig. Wenigstens im Quelltext sollte etwas zu sehen sein. Oder hast du irgendwelche Ausgabepuffer eingeschaltet?

                Das script läuft wie gesagt durch bis zur Weiterleitung an header("location:k_login.php?error=TRUE ").

                Ich hoffe, du hast davor einen Stopp gesetzt, nicht dass du wegen der Weiterleitung nichts (mehr) siehst.

                dedlfix.

                1. var_dump() gibt selbständig seine Information aus.

                  okay, nicht gewusst.

                  Dann wird das var_dump() entweder nicht ausgeführt oder du schaust nicht richtig. Wenigstens im Quelltext sollte etwas zu sehen sein. Oder hast du irgendwelche Ausgabepuffer eingeschaltet?

                  nein, kein Ausgabepuffer. Habe jetzt die Weiterleitung auskommentiert.
                  Ergebnis:
                  echo "Zeile ".__LINE__.": ".var_dump(isset($result));
                  bringt "Error - SQLSTATE . bool(false) Zeile 25:"
                  echo "Zeile ".__LINE__.": ".var_dump(isset($sql));
                  bringt "Error description: bool(false) Zeile 34:"

                  Der Rest ist "mysqli_query(): Couldn't fetch mysqli in..." und "mysqli_sqlstate(): Couldn't fetch mysqli in..." und "mysqli_error(): Couldn't fetch mysqli in..." und dann natürlich noch "mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in..." und "mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in..." da ja kein $result vorhanden ist. Und als Abschluss "mysqli_close(): Couldn't fetch mysqli in..." um den Salat zu vervollständigen.

                  1. Tach!

                    Ergebnis:
                    echo "Zeile ".__LINE__.": ".var_dump(isset($result));
                    bringt "Error - SQLSTATE . bool(false) Zeile 25:"
                    echo "Zeile ".__LINE__.": ".var_dump(isset($sql));
                    bringt "Error description: bool(false) Zeile 34:"

                    bool(false) ist die Ausgabe von var_dump(). Das heißt, dass $result und $sql nicht existieren, wenn das isset() false liefert. Du kannst aber auch direkt $result und $sql mit var_dump() untersuchen, dann gibts NULL und die Notice.

                    Der Rest ist "mysqli_query(): Couldn't fetch mysqli in..." und "mysqli_sqlstate(): Couldn't fetch mysqli in..." und "mysqli_error(): Couldn't fetch mysqli in..." und dann natürlich noch "mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in..." [...]

                    Zumindest kannst du nun mit var_dump() umgehen. Jetzt geh mal einen Schritt rückwärts und schau dir $connect an. Im Zweifelsfall zweimal, einmal vor dem mysqli_query() und einmal direkt nach dem Erstellen.

                    Und dann kannst du mal aus dem Handbuch das Beispiel in eine neu erstellte Datei einfügen, Zugangsdaten ändern und das mal probieren. Wenn das läuft, hast du kein generelles MySQL-Problem sondern ein in deinem Code verstecktes.

                    dedlfix.

                    1. ... Jetzt geh mal einen Schritt rückwärts und schau dir $connect an. Im Zweifelsfall zweimal, einmal vor dem mysqli_query() und einmal direkt nach dem Erstellen.

                      Aber das hatte ich ja zu Beginn, worauf du geschrieben hattest

                      Warum verwendest du hier mysqli_connect_error?
                      Die Phase der Verbindungsherstellung solltest du an dieser Stelle doch längst abgeschlossen haben.
                      Frag stattdessen hier ab, ob es einen Fehler mit der gesendeten Query gab.

                      Hab's jetzt aber doch noch mal probiert mit ~~~php if (!$connect) {
                          echo "Zeile ".LINE.": Connect Error: " . mysqli_connect_error();
                      }

                        
                      Und weiter:  
                      
                      > Und dann kannst du mal aus dem Handbuch [das Beispiel](http://php.net/mysqli_query) in eine neu erstellte Datei einfügen  
                        
                      Das verstehe ich nicht, die Seite zeigt einfach eine Liste mit php-Funktionen.  
                        
                      
                      > Zugangsdaten ändern und das mal probieren.  
                        
                      Wieso Zugangsdaten ändern, wenn ich doch die Verbindung habe - und mir beim ursprünglichen Beispiel  
                        
                      ` $result = mysqli_query($connect, $sql) OR die("<pre>\n".$sql."</pre>\n".mysqli_connect_error()); `{:.language-php}  
                        
                      die richtige Query-Syntax inkl. der richtigen Übergabewerte von $myusername und $mypassword angezeigt wurden.
                      
                      1. Tach!

                        ... Jetzt geh mal einen Schritt rückwärts und schau dir $connect an. Im Zweifelsfall zweimal, einmal vor dem mysqli_query() und einmal direkt nach dem Erstellen.
                        Aber das hatte ich ja zu Beginn, worauf du geschrieben hattest

                        Ich meinte, du sollst dir mit var_dump($connect) anschauen, was da drin steht.

                        Hab's jetzt aber doch noch mal probiert mit

                        if (!$connect) {

                        echo "Zeile ".LINE.": Connect Error: " . mysqli_connect_error();
                        }

                          
                        Das heißt, da ist ein von false verschiedener Wert drin. Aber was genau?  
                          
                        
                        > > Und dann kannst du mal aus dem Handbuch [das Beispiel](http://php.net/mysqli_query) in eine neu erstellte Datei einfügen  
                        >   
                        > Das verstehe ich nicht, die Seite zeigt einfach eine Liste mit php-Funktionen.  
                          
                        Ich sehe eine Liste nur am rechten Rand, die ist nicht weiter wichtig. Der Teil mit dem hellen Hintergund ist der interessante. Roll da mal etwas runter, da kommen zwei Beispiele, eins objektorientiert, eins prozedural, inhaltlich machen beide daselbe.  
                          
                        
                        > > Zugangsdaten ändern und das mal probieren.  
                        > Wieso Zugangsdaten ändern, wenn ich doch die Verbindung habe  
                          
                        Weil in dem Beispiel im Handuch nicht deine Zugangsdaten drinstehen. Ich nehme ja an, mit der Verbindung stimmt irgendwas nicht. Das ist ja auch das, was die anderen Hinweise zu dieser Fehlermeldung erzählen.  
                          
                          
                        dedlfix.
                        
                        1. Ich meinte, du sollst dir mit var_dump($connect) anschauen, was da drin steht.

                          Okay, das scheint jetzt weiterzuführen. Ich kriege folgende Fehlermeldung: "Warning: var_dump(): Property access is not allowed yet in...", weiss nun aber nicht, was damit anfangen.

                          Ich sehe eine Liste nur am rechten Rand, die ist nicht weiter wichtig. Der Teil mit dem hellen Hintergund ist der interessante. Roll da mal etwas runter, da kommen zwei Beispiele, eins objektorientiert, eins prozedural, inhaltlich machen beide daselbe.

                          Da sehe ich nun definiv nichts als eine Liste von Funktionen. Wir reden doch vom gleichen Link
                          http://php.net/manual-lookup.php?pattern=mysqli_query&lang=de&scope=404quickref oder?

                          1. Tach!

                            Ich meinte, du sollst dir mit var_dump($connect) anschauen, was da drin steht.
                            Okay, das scheint jetzt weiterzuführen. Ich kriege folgende Fehlermeldung: "Warning: var_dump(): Property access is not allowed yet in...", weiss nun aber nicht, was damit anfangen.

                            Abgesehen von der Warung, was ist denn die eigentliche Ausgabe vom var_dump()? Zur Not bitte ein <pre> voranstellen, dann ist sie besser lesbar.

                            Da sehe ich nun definiv nichts als eine Liste von Funktionen. Wir reden doch vom gleichen Link
                            http://php.net/manual-lookup.php?pattern=mysqli_query&lang=de&scope=404quickref oder?

                            Dann löst es den Kurzlink wohl bei dir anders auf als bei mir. Hier der Lang-Link http://php.net/manual/en/mysqli.query.php.

                            dedlfix.

                            1. ... was ist denn die eigentliche Ausgabe vom var_dump()? Zur Not bitte ein <pre> voranstellen, dann ist sie besser lesbar.

                              Das ist die Ausgabe:
                              object(mysqli)#2 (19) { ["affected_rows"]=> NULL ["client_info"]=> NULL ["client_version"]=> int(50011) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> NULL ["error"]=> NULL ["error_list"]=> NULL ["field_count"]=> NULL ["host_info"]=> NULL ["info"]=> NULL ["insert_id"]=> NULL ["server_info"]=> NULL ["server_version"]=> NULL ["stat"]=> NULL ["sqlstate"]=> NULL ["protocol_version"]=> NULL ["thread_id"]=> NULL ["warning_count"]=> NULL }

                              Dann löst es den Kurzlink wohl bei dir anders auf als bei mir. Hier der Lang-Link http://php.net/manual/en/mysqli.query.php.

                              Ich hatte diese Seite in der Zwischenzeit auch gefunden, und den dortigen Code probiert. Das Resultat ist folgende Meldung: "Select returned 0 rows. Error: Commands out of sync; you can't run this command now"

                              1. Tach!

                                ... was ist denn die eigentliche Ausgabe vom var_dump()? Zur Not bitte ein <pre> voranstellen, dann ist sie besser lesbar.

                                Das ist die Ausgabe:
                                object(mysqli)#2 (19) { ["affected_rows"]=> NULL ["client_info"]=> NULL ["client_version"]=> int(50011) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> NULL ["error"]=> NULL ["error_list"]=> NULL ["field_count"]=> NULL ["host_info"]=> NULL ["info"]=> NULL ["insert_id"]=> NULL ["server_info"]=> NULL ["server_version"]=> NULL ["stat"]=> NULL ["sqlstate"]=> NULL ["protocol_version"]=> NULL ["thread_id"]=> NULL ["warning_count"]=> NULL }

                                Gut, das ist eine Ausgabe, zwar ohne ein übersichtliches <pre>, aber sei es drum. Wann hast du diese Ausgabe gemacht? Eine solche, mit allen Eigenschaften NULL außer der Client-Version bekomme ich nur hin, wenn ich vorher mysqli_close() aufgerufen habe. Dann trudeln auch eine Menge (nicht nur eine) Warnungen ein, deren Texte "Property access is not allowed yet ..." und "Couldn't fetch mysqli ..." lauten. Nach einem erfolgreichem Verbindungsaufbau jedenfalls steht in den meisten Eigenschaften ein von NULL verschiedener Wert drin. Außerdem ist bei nicht erfolgreichem Verbinungsaufbau in der Verbindungsvariable ein false drin. Aus diesen Gegebenheiten vermute ich, dass du deine Verbindung schließt und sie danach noch zu nutzen versuchst.

                                http://php.net/manual/en/mysqli.query.php.
                                Ich hatte diese Seite in der Zwischenzeit auch gefunden, und den dortigen Code probiert. Das Resultat ist folgende Meldung: "Select returned 0 rows. Error: Commands out of sync; you can't run this command now"

                                Soweit so richtig. Die Fehlermeldung ist gewollt, steht auch so im Code. Das heißt für mich, dass es generell kein Problem gibt, wenn man es richtig macht.

                                dedlfix.

                                1. Tach!

                                  Aus diesen Gegebenheiten vermute ich, dass du deine Verbindung schließt und sie danach noch zu nutzen versuchst.

                                  Nachtrag: Läuft PHP in seinem "artgerechten" Umfeld der Webseiten, muss man sich üblicherweise nicht um das Schließen einer Verbindung kümmern. PHP beendet sowieso am Scriptende alles was noch offen ist und meist ist die Laufzeit von Scripts so kurz, dass die Verbindungen nicht übermäßig lange geöffnet bleiben. Und ob sie nun ein paar Millisekunden eher, weil zu Fuß geschlossen wurden, macht das Kraut auch nicht mehr fett.

                                  dedlfix.

                                  1. zwar ohne ein übersichtliches <pre>

                                    Ich hatte ein <pre> gesetzt, aber wohl am falschen Ort; wüsste auch jetzt nicht wo.

                                    Aus diesen Gegebenheiten vermute ich, dass du deine Verbindung schließt und sie danach noch zu nutzen versuchst.

                                    Ich glaube, dies ist des Rätsels Lösung. Das script bindet die functions.php ein, und dort wird ebenfalls eine db-Verbindung aufgebaut - und am Ende wieder aufgelöst.

                                    Überhaupt habe ich das bei allen scripten so gemacht, die mysqli-Verbindungen brauchen. Das werde ich jetzt bereinigen. Im Moment habe ich zwar viele "Undefined variable: connect in..." und " mysqli_query() expects parameter 1 to be mysqli, null given in..." Warnmeldungen, aber ich glaube das kriege ich hin.

                                    Nachtrag: Läuft PHP in seinem "artgerechten" Umfeld der Webseiten

                                    Was meinst du mit "artgerecht"?

                                    muss man sich üblicherweise nicht um das Schließen einer Verbindung kümmern.

                                    Was ist denn mit der Empfehlung, die ich überall lese, man solle das besser tun? Auch alle Beispiele auf php.net schliessen die Verbindung mit mysqli_close($...).

                                    PHP beendet sowieso am Scriptende alles was noch offen ist

                                    Wieso dann aber der Unterschied? (Das script schliesst die Verbindung am Ende automatisch vs. Das script schliesst die Verbindung am Ende auf Anweisung)

                                    Ich möchte dir vorerst mal sehr danken für deine Hilfe. Grossartig.
                                    Gruss
                                    hannes

                                    1. Om nah hoo pez nyeetz, hannes!

                                      zwar ohne ein übersichtliches <pre>
                                      Ich hatte ein <pre> gesetzt, aber wohl am falschen Ort; wüsste auch jetzt nicht wo.

                                      echo "<pre>";  
                                      var_dump($variable);  
                                      echo "</pre>";
                                      

                                      Matthias

                                      --
                                      Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Mark und Markt.

                                    2. Tach!

                                      zwar ohne ein übersichtliches <pre>
                                      Ich hatte ein <pre> gesetzt, aber wohl am falschen Ort; wüsste auch jetzt nicht wo.

                                      Direkt vor das var_dump(). Zu weit vorn notiert wird dessen Wirkung unter Umständen von anderen HTML-Elementen wieder aufgehoben. Man kann auch noch ein </pre> hinter das var_dump() setzen, aber das ist Luxus. Für den Zweck der Debugausgabe ist es meist unwichtig, wie der Rest der Seite dargestellt wird.

                                      Nachtrag: Läuft PHP in seinem "artgerechten" Umfeld der Webseiten
                                      Was meinst du mit "artgerecht"?

                                      PHP wird vorwiegend als Sprache für Webanwendungen verwendet, und genau dafür wurde es erfunden. Man kann es aber auch für Shellscripts oder sogar Desktop-Anwendungen nehmen, aber das sind eher die Ausnahmen. "Artgerecht" bezieht sich auf die ursprüngliche Intention seiner Verwendung.

                                      muss man sich üblicherweise nicht um das Schließen einer Verbindung kümmern.
                                      Was ist denn mit der Empfehlung, die ich überall lese, man solle das besser tun? Auch alle Beispiele auf php.net schliessen die Verbindung mit mysqli_close($...).

                                      Wenn keine Begründug dazusteht, ist solch eine Aussage mitunter nicht viel wert. Es wird eher der Ordnung halber gemacht, was geöffnet wurde muss wieder geschlossen werden. Im Prinzip richtig, aber wenn es eienn Automatismus dafür gibt, von dem ich weiß, dass er genauso arbeitet, wie ich und das System es brauchen, dann nutz ich den. Bringt mir ja auch Vorteile - weniger Code, weniger Fehlermöglichkeiten.

                                      Es ist auch nicht notwendig und im PHP-Handbuch sogar empfohlen, am Dateiende das schließende ?> wegzulassen (nach einem nicht vorhandenen ?> können sich keine ungewollten Leerzeichen in die Ausgabe einschmuggeln), trotzdem steht es in allen Beispielen drin, und man sieht es überall in freier Wildbahn.

                                      PHP beendet sowieso am Scriptende alles was noch offen ist
                                      Wieso dann aber der Unterschied? (Das script schliesst die Verbindung am Ende automatisch vs. Das script schliesst die Verbindung am Ende auf Anweisung)

                                      Man muss es zu Fuß schließen können, weil PHP ja auch langlaufend verwendet werden kann, und man dann eine Möglichkeit braucht, Ressourcen wieder freizugeben. Diesen Anwendungsfall hat man bei kurzlaufenden Webseiten in der Regel nicht, also kann man es dem Automatismus überlassen und muss nicht ein der Vollständigkeit gegebenes Beispiel übernehmen.

                                      dedlfix.

                                      1. Hallo

                                        Es ist auch nicht notwendig und im PHP-Handbuch sogar empfohlen, am Dateiende das schließende ?> wegzulassen …

                                        Ja wie nu? Es ist nicht notwendig, etwas wegzulassen. Joaaa …, passt schon, war aber vermutlich nicht so intendiert. Schön zu sehen, dass sich auch andere grammatikalisch in ihrem Satzbau verhaspeln können. :-)

                                        Tschö, Auge

                                        --
                                        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
                                        Terry Pratchett, "Wachen! Wachen!"
                                        ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
                                        Veranstaltungsdatenbank Vdb 0.3
              3. Hallo,

                Nun, ich hatte echo vergessen.

                wenn du nicht weißt, oder auch nur ein wenig unsicher bist, wie ein Befehl verwendet wird: Wieso guckstu nicht nach? var_dump funktioniert ohne echo...

                Gruß
                Kalk

  2. Hi,

    $sql = "SELECT kundenID FROM kunden WHERE username = '".$_POST['myusername']."' AND password = '".md5($_POST['mypassword'])."' ";

    $result = mysqli_query($connect, $sql) OR die("<pre>\n".$sql."</pre>\n".mysqli_connect_error());

      
    Warum verwendest du hier mysqli\_connect\_error?  
    Die Phase der Verbindungsherstellung solltest du an dieser Stelle doch längst abgeschlossen haben.  
    Frag stattdessen hier ab, ob es einen Fehler mit der gesendeten Query gab.  
      
    MfG ChrisB  
      
    
    -- 
    Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
    
    1. Tach!

      $result = mysqli_query($connect, $sql) OR die("<pre>\n".$sql."</pre>\n".mysqli_connect_error());[/code]
      Warum verwendest du hier mysqli_connect_error?
      Die Phase der Verbindungsherstellung solltest du an dieser Stelle doch längst abgeschlossen haben.
      Frag stattdessen hier ab, ob es einen Fehler mit der gesendeten Query gab.

      Nicht "ob", denn das wäre schon durch das false klar, das mysqli_query() zurückgibt, denn sonst würde der or-die-Teil nicht ausgeführt werden. Ob allerdings dieser Teil ausgeführt wird, geht aus dem Text nicht hervor. Die Meldung bezieht sich ja schon auf das mysqli_query(). Das Ergebnis der Ausführung ist uns nicht bekanntgegeben worden. Dazu in meiner anderen Antwort mehr.

      dedlfix.