kungschu: Daten werden nicht in Tabelle übergeben.?

Hallo.

Ich habe hier mit MAMP einen lokalen Server. Mittels phpMyAdmin habe ich eine Tabelle angelegt. 3 Spalten: head, message, email. Alle Typ varchar. Nun möchte ich mit einem einfachen Script:

  
mysql>INSERT INTO content VALUES ('titel','nachricht','email');  

Inhalt einfügen.
Es kommen aber leider keine Daten an. Wenn das Script durch den SubmitButton aufgerufen wurde, wird die php-File mit entsprechender Code Zeile zwar aufgerufen, es geschieht aber nichts. Keine Anzeige im Browser, keine Fehlermeldungen, keine neue Zeile in der Tabelle.

Lege ich eine Zeile (+Inhalt) mit phpMyAdmin an und versuche etwa head durch

  
mysql>SELECT head FROM content;  

auszugeben, tritt gleiches Symptom auf wie oben beschrieben.

Was vermutet ihr? Wo sollte ich nach Fehlern suchen?

MfG, Kungschu.

  1. Hallo

    Ich habe hier mit MAMP einen lokalen Server. Mittels phpMyAdmin habe ich eine Tabelle angelegt. 3 Spalten: head, message, email. Alle Typ varchar.

    VARCHAR oder VARCHAR(xy)?

    INSERT INTO content VALUES ('titel','nachricht','email');

      
    Ich kann mit Deiner Tabellenbeschreibung und 3x VARCHAR(45) dieses Verhalten  
    nicht reproduzieren. Wenn es zu einem Fehler kommt, dann sollte dieser auch  
    gemeldet und angezeigt werden.  
      
      
    Freundliche Grüße  
      
    Vinzenz
    
    1. Hallo.

      Ich kann mit Deiner Tabellenbeschreibung und 3x VARCHAR(45) dieses Verhalten
      nicht reproduzieren. Wenn es zu einem Fehler kommt, dann sollte dieser auch
      gemeldet und angezeigt werden.

      Ich kann mir das Verhalten auch nicht erklären. error_reporting ist in der php.ini auf E_ALL gesetzt. Ich hatte zweimal varchar(40) und einmal varchar(100) gewählt..
      Bei dir hat es auf dem localhost also geklappt?

      MfG, Kungschu.

      1. Hallo

        Ich kann mit Deiner Tabellenbeschreibung und 3x VARCHAR(45) dieses Verhalten
        nicht reproduzieren.

        Ich kann mir das Verhalten auch nicht erklären. error_reporting ist in der php.ini auf E_ALL gesetzt. Ich hatte zweimal varchar(40) und einmal varchar(100) gewählt..

        PHP habe ich überhaupt nicht verwendet. Ich habe das Statement mit dem MySQL Query Browser getestet. Die PHP-Meldungen sollten Dich auch nicht so sehr interessieren wie die Fehlermeldungen von MySQL, die Du z.B. über mysql_error() bekommst.

        Freundliche Grüße

        Vinzenz

        1. Hallo.

          Auch mit mysql_error() erhalte ich rein garnichts. Allgemein zeigt bei mir der Browser (bzw. Server) keine Reaktion mehr, sobald ich irgendwie mit mysql im php-Code anfange.

          Ich werde wohl erstmal mein Script auf einem anderen System überprüfen und dann die Fehlersuche fortsetzen. Diese trivialen Probleme immer..

          Herzlichen Dank für deine Hilfe!

          MfG, Kungschu.

          1. echo $begrüßung;

            Auch mit mysql_error() erhalte ich rein garnichts. Allgemein zeigt bei mir der Browser (bzw. Server) keine Reaktion mehr, sobald ich irgendwie mit mysql im php-Code anfange.

            Keine Reaktion heißt, das Script läuft ewig?

            Ich werde wohl erstmal mein Script auf einem anderen System überprüfen und dann die Fehlersuche fortsetzen. Diese trivialen Probleme immer..

            Baue es langsam in kleinen Schritten auf und überprüfe dabei das bisher Erreichte.

            Schritt 1:

            <?php
            $connection = mysql_connect(...);
            var_dump($connection);

            Die Ausgabe sollte eine Ressourcenkennung sein. Wenn du ein false erhältst, ergänze das Script um ein echo mysql_error();

            Alles bestens bis hier her?

            Schritt 2:

            <?php
            $connection = mysql_connect(...);
            if ($connection) {
              if (mysql_select_db(..., $connection)) {
              } else
                echo mysql_error();
            } else {
              // Reaktion bei Fehler
            }

            Schritt 3:

            <?php
            $connection = mysql_connect(...);
            if ($connection) {
              if (mysql_select_db(..., $connection)) {
                $sql = 'SELECT 42';
                $result = mysql_query($sql, $connection);
                var_dump($result);
              } else {
                // Reaktion bei Fehler
              }
            } else {
              // Reaktion bei Fehler
            }

            Und so weiter und so fort.

            Wenn alles gut geht, teste auch das Verhalten deines Scripts im Fehlerfall. Fahr den MySQL-Server herunter oder gib einen falschen Hostnamen ein, verwende fehlerhafte Logindaten, verschreib dich beim Datenbanknamen und im SQL-Statemtent, ...

            Und am Ende hast du hoffentlich ein fertiges Script oder du weißt bis wohin es ging und wo der Fehler stecken muss.

            echo "$verabschiedung $name";

            1. Hallo.

              Wow. Ich danke dir. Das muss ich nun für mich ersteinmal verifizieren.. Da das Ganze meine erste Berührung mit MySQL ist, dauert das dann auch entsprechend.

              Ich hoffe, ich kann dir an dieser Stelle morgen nochmal ein Feedback geben.

              MfG, Kungschu.

            2. Hallo.

              Ich meinte mit: ..."keine Reaktion" ..., dass der Browser nichts anzeigt / ausgibt und die Seite als fertig geladen darstellt wird.

              Führe ich deinen Schritt eins aus, erhalte ich auf var_dump() hin die Ausgabe:

              resource(2) of type (mysql result)

              Anfangen kann ich damit nichts. Bei Schritt zwei erhalte ich keine Reaktion, bei Schritt drei wieder die selbe Ausgabe wie bei Schritt eins, also wieder durch var_dump().

              Nun wechsle ich vielleicht doch mal zu WinXP rüber und installiere XAMPP, um zu sehen, ob ich dann andere Reaktionen des localhost erreiche.

              MfG, Kungschu.

              1. Hallo

                Anfangen kann ich damit nichts. Bei Schritt zwei erhalte ich keine Reaktion, bei Schritt drei wieder die selbe Ausgabe wie bei Schritt eins, also wieder durch var_dump().

                wie wäre es, wenn Du uns Deinen Quellcode zeigen würdest. Vielleicht können wir
                Dir dann bereits Hinweise geben.

                Freundliche Grüße

                Vinzenz

              2. echo $begrüßung;

                Führe ich deinen Schritt eins aus, erhalte ich auf var_dump() hin die Ausgabe:
                resource(2) of type (mysql result)
                Anfangen kann ich damit nichts.

                Sehr gut. Das PHP-Handbuch verrät dir, wie die Funktionen arbeiten, was sie für Parameter erwarten und was sie zurückgeben. Zu mysql_connect() sagt es: "Returns a MySQL link identifier on success, or FALSE on failure." False hast du nicht bekommen, also hast du schon mal keinen Fehler vorliegen. Der "link identifier" ist ein Wert vom Typ resource. Er stellt einen Verweis auf die Daten der Verbindung, die PHP intern braucht, um mit dem MySQL-Server zu kommunizieren. Funktionen wie mysql_query() möchten diesen Wert als Parameter haben[1]. mysql_query() seinerseits gibt ebenfalls einen Wert vom Typ resource zurück, der verweist auf die Daten der Ergebnismenge. Abnehmer dafür sind die mysql_fetch_*-Funktionen.

                Bei Schritt zwei erhalte ich keine Reaktion,

                Das ist auch ein gutes Zeichen, ich hatte als Aktion im Gutfall in meinem Beispiel einfach nichts notiert.

                bei Schritt drei wieder die selbe Ausgabe wie bei Schritt eins, also wieder durch var_dump().

                Schau genau hin, die Zahl sollte eine andere sein.

                Bis dahin lief also alles problemlos. Die Ursache für dein Problem ist also nicht im Verbindungsaufbau oder in der Kommunikation zu MySQL zu suchen.

                Du könntest nun mein Code-Fragment weiter ausbauen, oder du nimmst nochmal deinen bisherigen Code her, baust die Kontrollausgaben ähnlich wie in meinen Beispielen ein und schaust was passiert.

                Neben der Ausgabe der Variablenwerte und Funktionsergebnisse kann man auch an strategisch wichtigen Stellen einfach je ein echo gefolgt von z.B. einer fortlaufende Zahl ein, dann siehst du an der Ausgabe, welcher Weg in deinem Script begangen wurde.

                Und natürlich ist es immer wieder gut, das error_reporting auf E_ALL zu setzen, und in der phpinfo()-Ausgabe zu schauen, ob display_errors eingeschaltet ist, und dies gegebenenfalls nachholen.

                [1] Man kann die Üergabe dieses Parameters auch weglassen, wenn man nur eine einzige Verbindung verwendet. Diese wird dann automatisch verwendet. Es schadet aber auch nicht, den Verbindungsparameter auch in dem Fall zu übergeben.

                echo "$verabschiedung $name";

                1. Hallo.

                  bei Schritt drei wieder die selbe Ausgabe wie bei Schritt eins, also wieder durch var_dump().

                  Schau genau hin, die Zahl sollte eine andere sein.

                  Stimmt. Die Ausgabe lautet:

                  resource(3) of type (mysql result)

                  Ich habe es nun nocheinmal mit einem neuen Script versucht - leider nach wie vor ohne Erfolg.

                    
                  <?php  
                  error_reporting(E_ALL);  
                    
                  $connection = mysql_connect('localhost','root','root');  
                    
                  if(!$connection) {  
                   echo ("Fehler1: ".mysql_errror());  
                  }  
                    
                  $db_link = mysql_select_db('schu',$connection);  
                    
                  if(!$db_link) {  
                   echo ("Fehler2: ".mysql_errror());  
                  }  
                    
                  $put_in = INSERT INTO content VALUES ('testhead','testmessage','testemail');  
                    
                  if(!$put_in) {  
                   echo ("Fehler3: ".mysql_errror());  
                  }  
                    
                  echo "eintrag erstellt";  
                  ?>  
                  
                  

                  Ich erhalte wieder "keine Reaktion"; keine Fehlermeldung, kein Eintrag, keine Ausgabe. display_errors habe ich übrigens mittlerweile ebenfalls auf On gesetzt.

                  Was ist an meinem Script falsch?

                  Danke euch.

                  MfG, Kungschu.

                  1. Hallo

                    $put_in = INSERT INTO content VALUES ('testhead','testmessage','testemail');

                    das sollte eine Fehlermeldung verursachen :-)
                    Du willst zuallererst einer Variablen eine Zeichenkette mit der SQL-Anweisung
                    erstellen:

                    // Beachte die unterschiedlichen Anführungszeichen
                    $sql = "[code lang=sql]INSERT INTO content VALUES ('testhead','testmessage','testemail')";

                    // Nun lasse die SQL-Anweisung ausführen
                    $put_in = mysql_query($sql, $conncetion)

                    // ... und jetzt erst kannst Du überprüfen, ob die SQL-Anweisung von MySQL
                    // erfolgreich verarbeitet werden konnte.
                    if(!$put_in) {
                        echo ("Fehler3: " . mysql_errror());
                    }

                    echo "eintrag erstellt";[/code]

                    Ich erhalte wieder "keine Reaktion"; keine Fehlermeldung, kein Eintrag, keine Ausgabe. display_errors habe ich übrigens mittlerweile ebenfalls auf On gesetzt.

                    Das wundert mich in der Tat.

                    Freundliche Grüße

                    Vinzenz

                    1. Hallo Vinzenz.

                      Nun funktioniert es; die ersten Schritte sind gemacht.. ;-)

                      Der Code:

                        
                      <?php  
                      error_reporting(E_ALL);  
                        
                      $connection = mysql_connect('localhost','root','root');  
                        
                      if(!$connection) {  
                       echo ("Fehler1: ".mysql_error());  
                      }  
                        
                      $db_link = mysql_select_db('schu',$connection);  
                        
                      if(!$db_link) {  
                       echo ("Fehler2: ".mysql_error());  
                      }  
                        
                      $sql = "INSERT INTO content VALUES ('testhead','testmessage','testemail')";  
                        
                      $put_in = mysql_query($sql, $connection);  
                        
                      if(!$put_in) {  
                       echo ("Fehler3: ".mysql_error());  
                      }  
                        
                      echo "eintrag erstellt";  
                      ?>  
                      
                      

                      Herzlichen Dank für deine Hilfe!

                      MfG, Kungschu.

                  2. echo $begrüßung;

                    <?php
                    error_reporting(E_ALL);

                    Du stellst das error_reporting im Script ein. Davon wird aber nur die Anzeige während der Laufzeit beeinflusst. Syntax-Fehler werden beim Parse-Vorgang festgestellt, der vor dem Ausführen durchgeführt wird. Wenn an übergeordneter Stelle eine Konfiguration dem PHP sagt, dass es keine Fehler ausgeben soll, wirst du keine sehen. Untersuche doch mal bitte die Einstellungen, indem du eine Datei mit dem Inhalt <?php phpinfo(); ?> erstellst und ausführst. Ich wette, da steht das error_reporting auf einem ungünstigen Wert und/oder display_errors ist ausgeschaltet.

                    echo ("Fehler1: ".mysql_errror());

                    Das ist ein Fehler (3x r statt 2x), der aber erst zur Laufzeit auffällt. Funktionsnamen werden erst zur Laufzeit aufgelöst.

                    $put_in = INSERT INTO content VALUES ('testhead','testmessage','testemail');

                    Aber das ist ein Syntax-Fehler, der schon beim Parsen angemeckert wird. Du möchtest einen String notieren, hast aber aus PHP-Sicht mehrere Konstanten ohne Verkettungszeichen hinterenander notiert.

                    echo "$verabschiedung $name";

                    1. Hallo.

                      Herzlichen Dank für deine Hilfe. Nun funktioniert es. _errror war natürlich eine häßlicher Copy&Paste Fehler.

                      Die Einstellungen zu error_reporting und display_errors hatte ich sicher in der php.ini kontrolliert.

                      Den korrigierten Code findest du hier.

                      Danke!

                      MfG, Kungschu.

  2. Was vermutet ihr? Wo sollte ich nach Fehlern suchen?

    Kenne diese Datenbank nicht,...aber ein allgemeiner Tipp.
    Oft sind solche Probleme nach einem explizitem COMMIT erledigt.
    Wäre jedenfalls ein Versuch wert...

    MfG Cordess