Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenausgabe funktioniert nicht (Formular)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datenausgabe funktioniert nicht (Formular)

    Moinsen,

    ich hab da n kleines Prob.

    Ich habe ein Formular, welches mir per php den Inhalt zukommen lässt (und es gleichzeitig in eine DB schreibt).

    Läuft auch alles.

    Bei Falscheingaben meckert er auch korrekt rum (falsche Email Adresse, ungültige Nummer etc.)

    Nur wenn alles richtig ist und die Nachricht gesendet wurde, sagt er eben nicht –Vielen Dank für ihre Nachricht-…

    Das macht er nur, wenn ich meine –ich schreibs mal in die DB- Datei weglasse.

    Ich seh glaub ich vor lauter Bäumen den Wald nich mehr.

    Habt ihr ne Idee ?

    Hier mal die „in die DB schreib“ Datei

    PHP-Code:

    <!--Verbindung zur DB aufnehmen-->

      <?php
      mysql_connect
    (localhostxxxxxxxxxxxxxxxxx) or die
        (
    "Keine Verbindung moeglich");
      
    mysql_select_db(xxxxxxxxxxx) or die
        (
    "Die Datenbank existiert nicht.");
      
    ?>
      
    <!--Variablen in Kurznamen umwandeln-->

      <?php
      $name 
    $_POST["name"];
      
    $email $_POST["email"];
      
    $telefon $_POST["telefon"];
      
    $fax $_POST["fax"];
      
    $nachricht $_POST["nachricht"];
      
    ?>

    <!--Variablen in die DB schreiben-->
     
      <?php
      
    require_once('mailer.php');
      
      if (
    $error == AND $write_db == 1)
          {
          
    $eintrag "INSERT INTO kontakt_db (name, email, telefon, fax, nachricht)
          VALUES ('
    $name','$email', '$telefon', '$fax', '$nachricht')";
          }
        
    ?>

      <?php

        $eintragen 
    mysql_query($eintrag);

      
    ?>
    Und hier die Mail Datei:

    PHP-Code:

    <?php

    $email                 
    "xxxxxxx"
    $betreff_der_nachrichten     "xxxxxxxxxxxxx";
    require_once(
    'mailer_function.php');

    $meldungen "";

    array_escape_and_strip(&$_POST);
    array_unescape(&$_POST);

    if(isset(
    $_POST['action'])){
        switch(
    $_POST['action']){
            case 
    'submit':    
                if(!
    check_email($_POST['email'])){
                    
    $meldungen .= "Bitte geben Sie eine gültige E-Mail Adresse ein.<br>";
                    
    $error 1;
                }
            
                if(!
    check_telefon($_POST['telefon'])){
                    
    $meldungen .= "Bitte geben Sie eine gültige Nummer ein.<br>";
                    
    $error 1;
                }
                
                if(empty(
    $_POST['nachricht'])){
                    
    $meldungen .= "Bitte geben Sie eine Nachricht ein.<br>";
                    
    $error 1;
                }
                
                if(
    $error) { break; }
                
                
    $message =  "Es wurde eine Nachricht fuer Sie hinterlassen:\n\n".
                            
    "Kontaktdaten:\n".
                            
    "Name: $_POST[name]\n".
                            
    "E-Mail: $_POST[email]\n".
                            
    "Telefon: $_POST[telefon]\n".
                            
    "Fax: $_POST[fax]\n".
                            
    "Uhrzeit: ".date('d.m.Y - H:i:s').
                            
    "\n\n".
                            
    "------------------------- Nachricht -------------------------\n\n".
                            
    "$_POST[nachricht]\n\n".
                            
    "--------------------------- Ende ----------------------------\n\n";            
                
    $x = @mail($ihre_email,addslashes($betreff_der_nachrichten),$message,"from: $ihre_email");        
                if(
    $x)
                {
                    
    $meldungen .= "Vielen Dank für Ihre Nachricht!";
                    
    $_POST = array();
                    
    $write_db 1;
                    break;
                }    
                
    $meldungen .= "Aufgrund eines technischen Fehlers konnten wir Ihre Nachricht nicht empfangen.<br>".
                              
    "Bitte setzen Sie sich anderweitig mit uns in Verbindung.<br>Vielen Dank für Ihr Verständnis!";
                break;    
        }
    }
    ?>
    Hab ich was vergessen ? Wenn ja, bitte kurz Bescheid geben.

    Danke und Gruß

    Alex

  • #2
    Standard-Antwort:
    Richtig debuggen
    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    3. An den Anfang des Scriptes schreibt man die Zeile: error_reporting(E_ALL);
    4. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde (oder auch nicht). Hilfreich sind da Funktionen wie var_dump oder print_r
    5. Schritt 4 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    6. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    7. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    8. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
    Tutorials zum Thema Technik:
    https://pilabor.com
    https://www.fynder.de

    Kommentar


    • #3
      Zitat von altram Beitrag anzeigen
      Nur wenn alles richtig ist und die Nachricht gesendet wurde, sagt er eben nicht –Vielen Dank für ihre Nachricht-…

      Das macht er nur, wenn ich meine –ich schreibs mal in die DB- Datei weglasse.
      Da ist doch schon die Unstimmigkeit:

      MIT der "ich schreibs mal in die DB Datei" -> Fehler
      OHNE die "ich schreibs mal in die DB Datei" -> kein Fehler

      Mein Tipp: Der Grund für das fehlerhafte Verhalten steckt in der "ich schreibs mal in die DB Datei"
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar


      • #4
        Hi,

        danke für eure Antworten. Ja, das habe ich mir auch schon gedacht, das der Fehler dort sein müsste. Ich komme da nur nicht zu einem Schluß, da in der Datei ja ansich nur Daten ausgelesern werden und nichts gesetzt wird (außer in der DB jetzt). Oder bin ich da aufm Holzweg ?

        Bin in php eben noch nicht sooo fit, daher suche ich hier ein paar Tipps.

        Danke & Gruß Alex

        Kommentar


        • #5
          Andreas hat dir beschrieben, wie du mit dem Debugging beginnen kannst... insbesondere und ausdrücklich erwähnenswert ist dieses Stück Code, mit dem du die Fehleranzeige komplett einschaltest und alle Meldungen im Browser anzeigen lässt.
          PHP-Code:
          error_reporting(-1);
          ini_set('display_errors'1); 
          Das gehört ganz an den Anfang des zu untersuchenden Scripts.
          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

          Kommentar


          • #6
            cool, danke Euch.

            Ich mach ma..

            Gruß Alex

            Kommentar


            • #7
              Code:
              INSERT INTO kontakt_db (name, email, telefon, fax, nachricht)
                    VALUES ('$name','$email', '$telefon', '$fax', '$nachricht')
              Weis nicht genau wie deine Validierung aussieht, aber falls da nicht alles perfekt läuft kann das böse enden => mysql_real_escape_string();
              EDIT: Wies aussieht überprüfst du garnix bevors in die DB kommt...

              Warum schreibst du die Kommentare die was mit PHP zu tun haben nicht auch in den PHP Code sonst kann jeder sie lesen ?
              PHP-Code:
              <?php
              //Einzeiliger Kommentar

              /* Vielzeiliger Kommentar
              BLubb
              Und nochmal 
              */
              ?>
              Code:
              ?>
              
              <?php
              Solche Konstruktionen bringern nichts solange zwischen den PHP-Tags nichts steht außer Leerzeichen + Zeilenumbrüche...
              Signatur:
              PHP-Code:
              $s '0048656c6c6f20576f726c64';
              while(
              $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

              Kommentar


              • #8
                @bystones... Du hast ja so recht (also mit den Kommentaren) tz tz...

                was meinst Du mit: "Solche Konstruktionen bringern nichts solange zwischen den PHP-Tags nichts steht außer Leerzeichen + Zeilenumbrüche..." ?

                Kommentar


                • #9
                  Hi ich kenne mich zwar auch noch nicht so gut aus mit PHP,
                  würde dir aber empfehlen mal ein Auge auf deine "If Anweisung" zu werfen

                  PHP-Code:
                   $x = @mail($ihre_email,addslashes($betreff_der_nachrichten),$message,"from: $ihre_email");        
                              if(
                  $x)  // <--- die hier
                              
                  {
                                  
                  $meldungen .= "Vielen Dank für Ihre Nachricht!";
                                  
                  $_POST = array();
                                  
                  $write_db 1;
                                  break; 

                  Kommentar


                  • #10
                    Öhm, ja ok. Was meinst Du denn genau ?

                    Kommentar


                    • #11
                      So, habe erfolgreich Fehler gesucht und behoben. SUPERKLASSE. Danke Euch schonmal für diese Tipps.

                      Ich wusste zum Beispiel nicht, das man in php gerne sagen sollte, das es eine Variable gibt (da man sonst ja den undefinied variable Fehler bekommt).

                      Stimmt doch, oder ?

                      Ein Fehler verstehe ich allerdings nicht so ganz. Obwohl die Variable nicht unbekannt ist, sagt er es trotzdem. Hier ein Codeauschnitt:

                      PHP-Code:
                      function array_escape_and_strip($array){

                          if(!
                      is_array($array))
                          {
                              return;
                          }    
                          foreach(
                      $array AS $key => $inhalt)
                          {
                              if(
                      is_array($inhalt))
                              {
                                  
                      $array_return[$key] = array_escape_and_strip($inhalt);
                              } else 
                              {
                                  if(
                      get_magic_quotes_gpc())
                                  {
                                      
                      $array_return[$key] = trim(strip_tags($inhalt));
                                      continue;
                                  } 
                                  
                      $array_return[$key] = trim(strip_tags(addslashes($inhalt)));
                              }
                          }
                          
                      $array $array_return;
                          return 
                      $array;

                      Fehler: Notice: Undefined variable: array_return in xxxxxxxxxx

                      Egla ob ich sie vorher bekannt gebe oder nicht, mosert er trozdem rum.

                      Kommentar


                      • #12
                        Du verwendest $array_return ohne vorherige Initialisierung.

                        VOR der ersten Benutzung (vor der foreach Schleife):
                        PHP-Code:
                        $array_return = array(); 
                        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                        Kommentar


                        • #13
                          HI,

                          hmm, das hab ich mir schon gedacht. Witzigerweise bekomme ich, wenn ich Deine Lösung einsetze wieder Fehlermeldungen, die vorher nicht da waren. Setze ich aber folgendes:

                          PHP-Code:
                          $array_return 0
                          und zwar in die funktion hinein, gibts keine Fehlermeldungen mehr. Aber warum gabs denn Fehlermeldungen obwohl ich die VAriable bereits schon mehrfach vorher (an anderen Stellen) definiert habe ?

                          Entschuldige meine Fragen, aber ich lerne gerade...

                          Gruß Alex

                          Kommentar


                          • #14
                            Welche Fehlermeldungen?
                            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                            Kommentar


                            • #15
                              Naja, sobald ich Deine Lösung einsetze meckert er wieder mit :

                              Undefined variable: array_return in xxxxxxxxxx

                              Da gibts nämlich 2 Funktionen, die das beinhalten.

                              Setze ich Deinen Code auch dort ein mosert er wieder rum, diesmal aber mit Fehlern, die ich bereits vorher schon behoben hatte (auch Undefined variable: Fehler)

                              Ich habe gerade bemerkt, sobald ich array_return = 0 setze, funktionieren meine Hinweistexte nicht mehr (also "bitte geben Sie eine Nachricht ein" etc...)

                              Hmm, mir fehlt da echt grad die Erleuchtung. Ich weiß auch, das ich wohl Fragen stelle, wo ein Profi sagt, Alter, gehts ? Naja.

                              Ich stelle hier nun einmla den gesamten Code rein, vielleicht habt ihr ja n Tipp. Ich suche dann auch gerne sleber, brauche nur eben die Richtung..

                              Ich habe den Code jetzt mal etwas zusammengefasst.

                              So,

                              der Mailer:

                              PHP-Code:
                              <?php

                              $ihre_email                 
                              "xxxxxx"
                              $betreff_der_nachrichten     "xxxxxx";
                              ?>

                              <!--Mailer-Funktionen-->

                              <?php
                              #################################
                              function check_email($email){
                                  return 
                              eregi("^[_a-z0-9-]([-_.]?[a-z0-9])*@[a-z0-9]([-_.]?[a-z0-9])+[.][a-z0-9]+$",$email);
                              }

                              function 
                              check_telefon($telefon){
                                  return 
                              eregi("^[0-9]*$",$telefon);
                              }
                              #################################
                               
                              function array_escape_and_strip($array){


                                  if(!
                              is_array($array))
                                  {
                                      return;
                                  }    
                                  foreach(
                              $array AS $key => $inhalt)
                                  {
                                      if(
                              is_array($inhalt))
                                      {
                                          
                              $array_return[$key] = array_escape_and_strip($inhalt);
                                      } else 
                                      {
                                          if(
                              get_magic_quotes_gpc())
                                          {
                                              
                              $array_return[$key] = trim(strip_tags($inhalt));
                                              continue;
                                          } 
                                          
                              $array_return[$key] = trim(strip_tags(addslashes($inhalt)));
                                      }
                                  }
                                  
                              $array $array_return;
                                  return 
                              $array;
                              }
                              ##################################
                              function array_unescape($array){

                                  if(!
                              is_array($array)){
                                      return;
                                  }
                                  foreach(
                              $array AS $key => $inhalt){
                                      if(
                              is_array($inhalt)){
                                          
                              $array_return[$key] = array_escape_and_strip($inhalt);
                                      } else {
                                          
                              $array_return[$key] = trim(stripslashes($inhalt));
                                      }
                                  }
                                  
                              $array $array_return;
                                  return 
                              $array;
                              }
                              ################################################################################################################################
                              ?>

                              <!--Mailer-->

                              <?php
                              $meldungen 
                              "";
                              $error 0;
                              $write_db 0;
                              $eintrag 0;
                              $array_return 0;
                              $array 0;

                              array_escape_and_strip(&$_POST);
                              array_unescape(&$_POST);

                              if(isset(
                              $_POST['action'])){
                                  switch(
                              $_POST['action']){
                                      case 
                              'submit':    
                                          if(!
                              check_email($_POST['email'])){
                                              
                              $meldungen .= "Bitte geben Sie eine gültige E-Mail Adresse ein.<br>";
                                              
                              $error 1;
                                          }
                                      
                                          if(!
                              check_telefon($_POST['telefon'])){
                                              
                              $meldungen .= "Bitte geben Sie eine gültige Nummer ein.<br>";
                                              
                              $error 1;
                                          }
                                          
                                          if(empty(
                              $_POST['nachricht'])){
                                              
                              $meldungen .= "Bitte geben Sie eine Nachricht ein.<br>";
                                              
                              $error 1;
                                          }
                                          
                                          if(
                              $error) { break; }
                                          
                                          
                              $message =  "Es wurde eine Nachricht fuer Sie hinterlassen:\n\n".
                                                      
                              "Kontaktdaten:\n".
                                                      
                              "Name: $_POST[name]\n".
                                                      
                              "E-Mail: $_POST[email]\n".
                                                      
                              "Telefon: $_POST[telefon]\n".
                                                      
                              "Fax: $_POST[fax]\n".
                                                      
                              "Uhrzeit: ".date('d.m.Y - H:i:s').
                                                      
                              "\n\n".
                                                      
                              "------------------------- Nachricht -------------------------\n\n".
                                                      
                              "$_POST[nachricht]\n\n".
                                                      
                              "--------------------------- Ende ----------------------------\n\n";            
                                          
                              $x = @mail($ihre_email,addslashes($betreff_der_nachrichten),$message,"from: $ihre_email");        
                                          if(
                              $x)
                                          {
                                              
                              $meldungen .= "Vielen Dank für Ihre Nachricht!";
                                              
                              $_POST = array();
                                              
                              $write_db 1;
                                              break;
                                          }    
                                          
                              $meldungen .= "Aufgrund eines technischen Fehlers konnten wir Ihre Nachricht nicht empfangen.<br>".
                                                        
                              "Bitte setzen Sie sich anderweitig mit uns in Verbindung.<br>Vielen Dank für Ihr Verständnis!";
                                          break;    
                                  }
                              }
                              ?>
                              und hier die Datei, die -anscheinend- den Fehler verursacht/beinhaltet:

                              PHP-Code:
                              <?php
                              error_reporting
                              (-1);
                              ini_set('display_errors'1); 
                              require_once(
                              'mailer.php');   
                              ?>
                                
                                <?php
                                
                              //Verbindung zur DB aufnehmen
                                
                              mysql_connect('localhost''xxx''xxx') or die
                                  (
                              "Keine Verbindung moeglich");
                                
                              mysql_select_db('xxx') or die
                                  (
                              "Die Datenbank existiert nicht.");
                                
                              ?>
                                
                                <?php
                                
                              //Variablen in Kurznamen umwandeln
                                
                              $name $_POST["name"];
                                
                              $email $_POST["email"];
                                
                              $telefon $_POST["telefon"];
                                
                              $fax $_POST["fax"];
                                
                              $nachricht $_POST["nachricht"];
                                
                              ?>

                                <?php
                                
                              //Variablen in die DB schreiben
                                
                                
                              if ($error == AND $write_db == 1)
                                    {
                                    
                              $eintrag "INSERT INTO kontakt_db (name, email, telefon, fax, nachricht)
                                    VALUES ('
                              $name','$email', '$telefon', '$fax', '$nachricht')";
                                    }
                                  
                              ?>

                                <?php

                                  $eintragen 
                              mysql_query($eintrag);

                                
                              ?>

                              Kommentar

                              Lädt...
                              X