Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PDO Connection (prepared Statement) als Funktion

Einklappen

Neue Werbung 2019

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

  • [Erledigt] PDO Connection (prepared Statement) als Funktion

    Hi

    Ich bin dabei mir PDO's zur Gemüte zu führen.

    Ich hänge momentan bei einer Sache.

    Ich war es "gewohnt" bei einer Datenbankoperation, die Datenbankverbindung über eine Funktion in einer separaten include - Datei aufzubauen und dann in einer weiteren Seite mit dem Formular und Script die Operationen, wie INSERT vorzunehmen.

    Das klappt aber bei PDO nicht, weil die aufgerufene Seite das Datenbankobjekt, dass die Funktion kreiert hat und die Variablen nicht kennt und vice versa.

    Also:

    Datei: ikenndifunctions.inc

    PHP-Code:
    <?php
     
    function mysqlconnect()
     
     
     {
     
    $strDbLocation 'mysql:dbname=xxx;host=localhost';
    $strDbUser 'yyy';
    $strDbPassword 'zzzzzzzz';

    try
    {
      
    $objDb = new PDO($strDbLocation$strDbUser$strDbPassword);
    }
    catch (
    PDOException $e)
    {
      echo 
    'Fehler beim Öffnen der Datenbank: ' $e->getMessage();
       die();
    }
     
     
     }
    und die Formulardatei kontaktform3.inc:

    PHP-Code:
    <script language="php">

    include("ikenndifunctions3.inc.php");
     
     
    // Prüfen, ob sich die Seite selbst aufgerufen hat
        
    if ( isset($_POST["do"]) && $_POST["do"] == "insert" )
        {
        
    // Die Seite hat sich selbst aufgerufen
        


        // Pflichtfeldkontrolle
            
        
    $error_msg    =    "";    
        
        if ( 
    $_POST["Vorname"] == "" )
        {
            
    $error_msg    =    "Bitte geben Sie einen Vornamen an.<br>";
        }
        
        if ( 
    $_POST["Zuname"] == "" )
        {
            
    $error_msg    .=    "Bitte geben Sie einen Zunamen an.<br>";
        }
        
        if ( 
    $_POST["email"] == "" )
        {
            
    $error_msg    .=    "Bitte geben Sie eine email Adresse an.<br>";
        }
            if ( 
    $_POST["Anliegen"] == "" )
        {
            
    $error_msg    .=    "Bitte geben Sie ein Anliegen ein .<br>";
        }
        


    // CAPTCHA


    session_start();
    if(isset(
    $_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
    unset(
    $_SESSION['captcha_spam']);
    }
    else{
       
    $error_msg    .=    "Der Sicherheitscode ist falsch.<br>";
    }  
        
    // End CAPTCHA


        
        
    if ( $error_msg    == "")
        {
            
    // Alles o.k.
            
           
    $strVorname $_POST["Vorname"];
    $strZuname $_POST["Zuname"];
    $strAdresse $_POST["frmAdresse"];
    $strPLZ $_POST["frmPLZ"];
    $strOrt $_POST["frmOrt"];
    $strTelNr $_POST["frmTelNr"];
    $stremail $_POST["email"];
    $strAnliegen $_POST["Anliegen"];      
               
                       
            
    // Datenbank-Zugriff
                
    mysqlconnect();
    }
            
    // INSERT
            
    $dbInsertikenndi $objDb->prepare("INSERT INTO ikenndi (Vorname, Zuname, frmAdresse, frmPLZ, frmOrt, frmTelNr, email, Anliegen)
                VALUES (:Vorname, :Zuname, :frmAdresse, :frmPLZ, :frmOrt, :frmTelNr, :email, :Anliegen)"
    );
                

                    
    $dbInsertikenndi->bindParam('Vorname'$strVorname);
                    
    $dbInsertikenndi->bindParam('Zuname'$strZuname);
                    
    $dbInsertikenndi->bindParam('frmAdresse'$strAdresse);
                    
    $dbInsertikenndi->bindParam('frmPLZ'$strPLZ);
                    
    $dbInsertikenndi->bindParam('frmOrt'$strOrt);
                    
    $dbInsertikenndi->bindParam('frmTelNr'$strTelNr);
                    
    $dbInsertikenndi->bindParam('email'$stremail);
                    
    $dbInsertikenndi->bindParam('Anliegen'$strAnliegen);
            
                        
            
    // In die Datenbank eintragen
             
    $dbInsertikenndi->execute();
            
            if ( ! 
    $dbInsertikenndi )
            {
            die(
    "Konnte den Datensatz nicht eintragen: " mysql_error() );
            }
           
            
            
    // Wechsel auf Vorschau
            
    header("Location: tnx.php");
            die;
            
        }



    </script>
    <!-- <form method="POST" action="phpmailer/phpmailer-fe.php" style="color:#FFCC00; font-weight:bold">-->


    <span class="errormessage">
        <?php
            
    if ( $error_msg != "")
            
            {
            
            echo 
    $error_msg;
            
            }
        
    ?>
        </span>

        <span style="color:#FFCC00" align="center">
         
    <h1>KONTAKT2</h1>

    <h2>Bitte nehmen Sie &uuml;ber folgendes Formular Kontakt zu mir auf.</h2>
    <h3>Durch die serverseitige Verarbeitung des Formulars, wird der Versuch Dritter unterbunden auf sensible Daten zuzugreifen. </h3>
    <br /><br />


    <form action="<?php echo $_POST["PHP_SELF"]; ?>" method="POST" >
     <input type="hidden" value="kontakt3.html" name="referer">
      <table style="color:#FFCC00; font-weight:bold;">
      
        </span>
      
      <tr>
        <td style="font-weight:bold;">* = Eingabe erforderlich</td><td> </td>
      </tr>
      <tr>
        <td>Vorname*:</td><td> <input type="text" name="Vorname" value="<?php echo htmlspecialchars($_POST['Vorname']); ?>" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
      </tr>
      <tr>
        <td>Zuname*:</td><td> <input type="text" name="Zuname" value="<?php echo htmlspecialchars($_POST['Zuname']); ?>" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
      </tr>
      <tr>
        <td>Adresse:</td><td> <input type="text" name="frmAdresse" value="<?php echo htmlspecialchars($_POST['frmAdresse']); ?>" size="80" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
      </tr>
      <tr>
        <td>PLZ:</td><td> <input type="text" name="frmPLZ" value="<?php echo htmlspecialchars($_POST['frmPLZ']); ?>" size="20" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
      </tr>
      <tr>
        <td>Ort:</td><td> <input type="text" name="frmOrt" value="<?php echo htmlspecialchars($_POST['frmOrt']); ?>" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
      </tr>
      <tr>
        <td>Telefonnummer:</td><td> <input type="text" name="frmTelNr" value="<?php echo htmlspecialchars($_POST['frmTelNr']); ?>" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
      </tr>
      <tr>
        <td>Email*:</td><td> <input type="text" name="email" value="<?php echo htmlspecialchars$_POST['email']); ?>" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
      </tr>
      <tr>
        <td>Anliegen*:</td><td> <textarea rows="4" name="Anliegen" value="<?php echo htmlspecialchars($_POST['Anliegen']); ?>" cols="40"style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></textarea></td>
      </tr>
      <tr>
      <td align="left" width="10%"><input type="hidden" name="do" value="insert"></td>
      </tr>
      </table>
      Enter security code:<br />
    <input type="text" name="sicherheitscode" size="5"><br />
    <br />
    Sollten Sie den Code nicht lesen k&ouml;nnen, dr&uuml;cken sie in ihrem Browser auf &quot;reload&quot um ihre Eingaben zu behalten und einen anderen Code angezeigt zu bekommen.<br />
      <p><input type="submit" value="Absenden" name="submit"><input type="reset" value="Reset" name="B2"></p>
      <img src="../captcha/captcha.php" border="0" title="Sicherheitscode"><br />
      
     <br />
        </form>
    Wie mache ich's richtig ?

    Vielen Dank

    phpels

  • #2
    Was hindert Dich daran, das Objekt per return zurückzugeben?
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    Kommentar


    • #3
      Zitat von nikosch Beitrag anzeigen
      Was hindert Dich daran, das Objekt per return zurückzugeben?
      Dummheit ?

      Vielen Dank für den Wink

      Ist sonst noch was schief an den Script's ?

      Datei: ikenndifunctions.inc (Include Datei mit der DB - Verbindung)

      PHP-Code:
      <?php
       
      function mysqlconnect()
       
       
       {
       
      $strDbLocation 'mysql:dbname=xxx;host=localhost';
      $strDbUser 'yyy';
      $strDbPassword 'zzzzzzzz';

      try
      {
        
      $objDb = new PDO($strDbLocation$strDbUser$strDbPassword);
      }
      catch (
      PDOException $e)
      {
         echo 
      'Fehler beim Öffnen der Datenbank: ' $e->getMessage();
         die();
      }
       return 
      $objDb;
       
       }

      und

      Die Page mit dem Formular und dem 2. Teil des Scripts:

      PHP-Code:

      <script language="php">

      include("ikenndifunctions3.inc.php");
       
       
      // Prüfen, ob sich die Seite selbst aufgerufen hat
          
      if ( isset($_POST["do"]) && $_POST["do"] == "insert" )
          {
          
      // Die Seite hat sich selbst aufgerufen
          


          // Pflichtfeldkontrolle
              
          
      $error_msg    =    "";    
          
          if ( 
      $_POST["Vorname"] == "" )
          {
              
      $error_msg    =    "Bitte geben Sie einen Vornamen an.<br>";
          }
          
          if ( 
      $_POST["Zuname"] == "" )
          {
              
      $error_msg    .=    "Bitte geben Sie einen Zunamen an.<br>";
          }
          
          if ( 
      $_POST["email"] == "" )
          {
              
      $error_msg    .=    "Bitte geben Sie eine email Adresse an.<br>";
          }
              if ( 
      $_POST["Anliegen"] == "" )
          {
              
      $error_msg    .=    "Bitte geben Sie ein Anliegen ein .<br>";
          }
          


      // CAPTCHA


      session_start();
      if(isset(
      $_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
      unset(
      $_SESSION['captcha_spam']);
      }
      else{
         
      $error_msg    .=    "Der Sicherheitscode ist falsch.<br>";
      }  
          
      // End CAPTCHA


          
          
      if ( $error_msg    == "")
          {
              
      // Alles o.k.
              
             
                      
      $strVorname $_POST["Vorname"];
                      
      $strZuname $_POST["Zuname"];
                      
      $strAdresse $_POST["frmAdresse"];
                      
      $strPLZ $_POST["frmPLZ"];
                      
      $strOrt $_POST["frmOrt"];
                      
      $strTelNr $_POST["frmTelNr"];
                      
      $stremail $_POST["email"];
                      
      $strAnliegen $_POST["Anliegen"];      
                 
                         
              
      // Datenbank-Zugriff
                  
                  
      $objDb mysqlconnect();

              
      // INSERT
              
      $dbInsertikenndi $objDb->prepare("INSERT INTO ikenndi (Vorname, Zuname, frmAdresse, frmPLZ, frmOrt, frmTelNr, email, Anliegen)
                  VALUES (:Vorname, :Zuname, :frmAdresse, :frmPLZ, :frmOrt, :frmTelNr, :email, :Anliegen)"
      );
                  

                      
      $dbInsertikenndi->bindParam('Vorname'$strVorname);
                      
      $dbInsertikenndi->bindParam('Zuname'$strZuname);
                      
      $dbInsertikenndi->bindParam('frmAdresse'$strAdresse);
                      
      $dbInsertikenndi->bindParam('frmPLZ'$strPLZ);
                      
      $dbInsertikenndi->bindParam('frmOrt'$strOrt);
                      
      $dbInsertikenndi->bindParam('frmTelNr'$strTelNr);
                      
      $dbInsertikenndi->bindParam('email'$stremail);
                      
      $dbInsertikenndi->bindParam('Anliegen'$strAnliegen);
              
                          
              
      // In die Datenbank eintragen
               
      $dbInsertikenndi->execute();
              
              if ( ! 
      $dbInsertikenndi )
              {
              die(
      "Konnte den Datensatz nicht eintragen: " mysql_error() );
              }
             
              
              
      // Wechsel auf Vorschau
              
      header("Location: tnx.php");
              die;
              
          }

          }



      </script>
      <!-- <form method="POST" action="phpmailer/phpmailer-fe.php" style="color:#FFCC00; font-weight:bold">-->


      <span class="errormessage">
          <?php
              
      if ( $error_msg != "")
              
              {
              
              echo 
      $error_msg;
              
              }
          
      ?>
          </span>

          <span style="color:#FFCC00" align="center">
           
      <h1>KONTAKT2</h1>

      <h2>Bitte nehmen Sie &uuml;ber folgendes Formular Kontakt zu mir auf.</h2>
      <h3>Durch die serverseitige Verarbeitung des Formulars, wird der Versuch Dritter unterbunden auf sensible Daten zuzugreifen. </h3>
      <br /><br />


      <form action="<?php echo $_POST["PHP_SELF"]; ?>" method="POST" >
       <input type="hidden" value="kontakt3.html" name="referer">
        <table style="color:#FFCC00; font-weight:bold;">
        
          </span>
        
        <tr>
          <td style="font-weight:bold;">* = Eingabe erforderlich</td><td> </td>
        </tr>
        <tr>
          <td>Vorname*:</td><td> <input type="text" name="Vorname" value="<?php echo htmlspecialchars($_POST['Vorname']); ?>" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
        </tr>
        <tr>
          <td>Zuname*:</td><td> <input type="text" name="Zuname" value="<?php echo htmlspecialchars($_POST['Zuname']); ?>" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
        </tr>
        <tr>
          <td>Adresse:</td><td> <input type="text" name="frmAdresse" value="<?php echo htmlspecialchars($_POST['frmAdresse']); ?>" size="80" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
        </tr>
        <tr>
          <td>PLZ:</td><td> <input type="text" name="frmPLZ" value="<?php echo htmlspecialchars($_POST['frmPLZ']); ?>" size="20" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
        </tr>
        <tr>
          <td>Ort:</td><td> <input type="text" name="frmOrt" value="<?php echo htmlspecialchars($_POST['frmOrt']); ?>" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
        </tr>
        <tr>
          <td>Telefonnummer:</td><td> <input type="text" name="frmTelNr" value="<?php echo htmlspecialchars($_POST['frmTelNr']); ?>" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
        </tr>
        <tr>
          <td>Email*:</td><td> <input type="text" name="email" value="<?php echo htmlspecialchars$_POST['email']); ?>" size="40" style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></td>
        </tr>
        <tr>
          <td>Anliegen*:</td><td> <textarea rows="4" name="Anliegen" value="<?php echo htmlspecialchars($_POST['Anliegen']); ?>" cols="40"style="font-weight:bold; background-color:#FFCC00; border-bottom-color:#FFDF00 ; border-right-color:#FFDF00"></textarea></td>
        </tr>
        <tr>
        <td align="left" width="10%"><input type="hidden" name="do" value="insert"></td>
        </tr>
        </table>
        Enter security code:<br />
      <input type="text" name="sicherheitscode" size="5"><br />
      <br />
      Sollten Sie den Code nicht lesen k&ouml;nnen, dr&uuml;cken sie in ihrem Browser auf &quot;reload&quot um ihre Eingaben zu behalten und einen anderen Code angezeigt zu bekommen.<br />
        <p><input type="submit" value="Absenden" name="submit"><input type="reset" value="Reset" name="B2"></p>
        <img src="http://www.php.de/captcha/captcha.php" border="0" title="Sicherheitscode"><br />
        
       <br />
          </form>

      Kommentar


      • #4
        Guck ich morgen mal rüber. Müde
        [COLOR="#F5F5FF"]--[/COLOR]
        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
        [COLOR="#F5F5FF"]
        --[/COLOR]

        Kommentar


        • #5
          Zitat von nikosch Beitrag anzeigen
          Guck ich morgen mal rüber. Müde

          Gute Nacht und erholsamen Schlaf

          lg phpels

          Kommentar


          • #6
            <script language="php">
            Das funktioniert? Wow, man lernt nie aus.
            Zitat von http://uk2.php.net/manual/en/language.basic-syntax.php
            Example #2 PHP Opening and Closing Tags
            1. <?php echo 'if you want to serve XHTML or XML documents, do like this'; ?>

            2. <script language="php">
            echo 'some editors (like FrontPage) don\'t
            like processing instructions';
            </script>

            3. ...

            4. ...
            While the tags seen in examples one and two are both always available, example one is the most commonly used, and recommended, of the two.
            Also exotisch. Würde ich ohne Not vermeiden.


            include("ikenndifunctions3.inc.php");
            Dein Skript kann ohne die Datenbankverbindung nicht "leben". Da würde ich eher [man]require[/man] verwenden. Das gilt nicht in jedem Fall. Aber in diesem Fall wäre es ein "grober Fehler" wenn die Datei nicht da ist. Da darf es eher gleich und richtig knallen, als dass das Skript später den Geist aufgibt, weil function mysqlconnect() nicht vorhanden ist.


            if ( isset($_POST["do"]) && $_POST["do"] == "insert" )
            Vielleicht an dieser Stelle etwas pingelig:
            $strVorname = $_POST["Vorname"];
            $strZuname = $_POST["Zuname"];
            $strAdresse = $_POST["frmAdresse"];
            $strPLZ = $_POST["frmPLZ"];
            $strOrt = $_POST["frmOrt"];
            $strTelNr = $_POST["frmTelNr"];
            $stremail = $_POST["email"];
            $strAnliegen = $_POST["Anliegen"];
            Das sind die Werte, die Dich interessieren. Die testest Du aber nicht ab.



            Deine SQL Parameter sind alle "read-only" und Du verwendest die Abfrage nur ein Mal. Dann kannst Du das auch einfacher (finde ich jedenfalls) als
            PHP-Code:
            if ( ''===$error_msg ) {
              
            $objDb mysqlconnect();
              
            // INSERT
              
            $dbInsertikenndi $objDb->prepare("INSERT INTO ikenndi (Vorname, Zuname, frmAdresse, frmPLZ, frmOrt, frmTelNr, email, Anliegen)
                  VALUES (:Vorname, :Zuname, :frmAdresse, :frmPLZ, :frmOrt, :frmTelNr, :email, :Anliegen)"
            );
              
            $dbInsertikenndi->execute(
                array(
                  
            ':Vorname'=>$_POST['Vorname'], 
                  
            ':Zuname'=>$_POST['Zuname'], 
                  
            ':frmAdresse'=>$_POST['frmAdresse'], 
                  
            ':frmPLZ'=>$_POST['frmPLZ'], 
                  
            ':frmOrt'=>$_POST['frmOrt'], 
                  
            ':frmTelNr'=>$_POST['frmTelNr'], 
                  
            ':email'=>$_POST['email'], 
                  
            ':Anliegen'=>$_POST['Anliegen']
                )
              ); 
            ohne direkten Aufruf von bindParam() und ohne zusätzliche Zuweisung an andere Variablen schreiben.
            if ( ! $dbInsertikenndi )
            $dbInsertikenndi ist Dein Statement-Objekt. Das wird nicht false oder null dadurch, dass die Abfrage fehlgeschlagen ist. execute() liefert false als Rückgabewert, wenn etwas fehlgeschlagen ist (oder wirft eine Exception, wenn man das PDO Objekt entsprechend "einstellt").


            Vielleicht solltest Du auch nochmal über Deine Variablennamen nachdenken....


            Und bestimmt habe ich noch irgendwas wichtiges übersehen

            Kommentar


            • #7
              Hi David

              Vielen Dank für deine Mühe

              Zitat von David Beitrag anzeigen
              Das funktioniert? Wow, man lernt nie aus.Also exotisch. Würde ich ohne Not vermeiden.
              So unterschiedlich sind die Informationen.
              Ich habe aus diversen Schulungs - Unterlagen genau das Gegenteil entnommen.

              Zitat von David Beitrag anzeigen
              Vielleicht an dieser Stelle etwas pingelig:
              PHP-Code:
              if ( isset($_POST["do"]) && $_POST["do"] == "insert" 
              Warum ? Da geht's doch um die Prüfung des Selbstaufrufes ...



              Zitat von David Beitrag anzeigen

              PHP-Code:
              $strVorname $_POST["Vorname"];
              $strZuname $_POST["Zuname"];
              $strAdresse $_POST["frmAdresse"];
              $strPLZ $_POST["frmPLZ"];
              $strOrt $_POST["frmOrt"];
              $strTelNr $_POST["frmTelNr"];
              $stremail $_POST["email"];
              $strAnliegen $_POST["Anliegen"]; 
              Das sind die Werte, die Dich interessieren. Die testest Du aber nicht ab.
              Die Pflichtfelder prüfe ich doch in der Pflichtfeldkontrolle, und die anderen können leer sein ...

              Zitat von David Beitrag anzeigen
              Deine SQL Parameter sind alle "read-only" und Du verwendest die Abfrage nur ein Mal. Dann kannst Du das auch einfacher (finde ich jedenfalls) als
              Danke für den Hinweis. Ich versuche aber erst mal Grundlegendes und PDO'S zu verstehen und anzuwenden. Wenn ich jetzt auch noch auf Varianten stoße verliere ich den Überblick

              Zitat von David Beitrag anzeigen
              $dbInsertikenndi ist Dein Statement-Objekt. Das wird nicht false oder null dadurch, dass die Abfrage fehlgeschlagen ist. execute() liefert false als Rückgabewert, wenn etwas fehlgeschlagen ist (oder wirft eine Exception, wenn man das PDO Objekt entsprechend "einstellt").
              Das der Ausdruck schief ist, habe ich mir auch schon gedacht.
              Wie würde eine Fehlerbehandlung in diesem Falle aussehen ?
              (Bitte zum mitschreiben )

              Zitat von David Beitrag anzeigen
              Und bestimmt habe ich noch irgendwas wichtiges übersehen
              Sicher

              Vielen Dank für deine Mühe und
              Liebe Grüße
              phpels

              Kommentar


              • #8
                Warum ? Da geht's doch um die Prüfung des Selbstaufrufes ...
                ...
                Die Pflichtfelder prüfe ich doch in der Pflichtfeldkontrolle, und die anderen können leer sein ...
                Oh, ein Missverständnis. Die beiden Teile gehören zu einer Aussage. Ich meinte, Du testest zum Beispiel nirgendwo isset($_POST["frmOrt"]). Jemand schickt Dir einen Request mit dem entsprechenden do=insert Parameter, aber nicht die dazugehörigen Nutzdaten -> E_WARNING. Deshalb der Zusatz mit dem "pingelig".


                Ich habe PDO bisher immer gleich in den "Exception-Modus" umgeschaltet. Beim Verbindungen/Erstellen fliegt die eh, also warum nicht gleich komplett so?
                Ansonsten:
                PHP-Code:
                $result $dbInsertikenndi->execute();
                if ( 
                false===$result) {
                  
                // Fehler 

                Kommentar


                • #9
                  Hi David

                  Zitat von David Beitrag anzeigen
                  Oh, ein Missverständnis. Die beiden Teile gehören zu einer Aussage. Ich meinte, Du testest zum Beispiel nirgendwo isset($_POST["frmOrt"]). Jemand schickt Dir einen Request mit dem entsprechenden do=insert Parameter, aber nicht die dazugehörigen Nutzdaten -> E_WARNING. Deshalb der Zusatz mit dem "pingelig".
                  Hmm - Ich versteh's noch immer nicht.

                  Wozu sollte ich frmOrt prüfen, wenn das kein Pflichtfeld ist ?

                  Durch die Pflichtfeldkontrolle prüfe ich ob die Pflichtfelder ausgefüllt sind - ohne die wird der Scriptteil mit der Datenbankoperation ohnehin nicht ausgeführt.

                  Der do=insert Parameter ist nur die Kontrolle ob die Seite sich selbst aufgerufen hat und hat ebenfalls mit der Datenbankoperation nichts zu tun.

                  Und wenn ich Formulardaten bekomme, die NUR die Pflichtfelder umfassen, ist's auch ok.

                  Habe ich irgendwo ein Brett vor'm Kopf ?


                  Zitat von David Beitrag anzeigen
                  Ich habe PDO bisher immer gleich in den "Exception-Modus" umgeschaltet. Beim Verbindungen/Erstellen fliegt die eh, also warum nicht gleich komplett so?

                  Tja, - PHP und PDO - Newbie, deine obigen Ausführungen überfordern mich daher leider, da ich nicht weiß, worauf du dich beziehst

                  Zitat von David Beitrag anzeigen
                  Ansonsten:
                  PHP-Code:
                  $result $dbInsertikenndi->execute();
                  if ( 
                  false===$result) {
                    
                  // Fehler 
                  So werd' ich's mal übernehmen, bis ich deine davor stehende Aussage verstanden habe

                  Vielen Dank und
                  Liebe Grüße
                  phpels

                  Kommentar


                  • #10
                    Zitat von phpels Beitrag anzeigen
                    Und wenn ich Formulardaten bekomme, die NUR die Pflichtfelder umfassen, ist's auch ok.
                    Mir geht es um den Fall, wenn die Parameter garnicht gesetzt sind. Man muss nicht Dein Formular verwenden, um dem Skript Daten zu senden.
                    War vielleicht ein blödes Beispiel, nehmen wir isset($_POST["Vorname"]).
                    isset() und $x=="" sind zwei verschiedene Dinge.

                    Wenn Dein Formular leer abgeschickt wird, werden die benannten Parameter trotzdem vom Browser abgeschickt. Als
                    Vorname=&Zuname=&frmAdresse= usw...
                    PHP erstellt dafür dann die Element in $_POST mit leeren Zeichenketten. Die Feldelemente sind also vorhanden, sie enthalten eben nur eine leere Zeichenkette. Wenn die Parameter garnicht gesendet werden, erstellt PHP auch keine leeren Feldelemente dafür. Und wenn Du dann mit
                    $_POST['Vorname'] == ""
                    darauf zugreifst (und das tust Du. Für den Vergleich wird erst der Wert von $_POST['Vorname'] ausgelesen) erzeugt PHP eine Warnung.
                    Aber wenn Du Einsteiger bist, ist das Skript schon gut so. Es passiert ja auch in diesem Fall/in diesem Skript nichts wirklich schlimmes. Nur halt eine Warnmeldung um Server-Log. Verbuch den Hinweis erstmal unter "Feinheiten"

                    Kommentar


                    • #11
                      Hi David

                      Zitat von David Beitrag anzeigen
                      Verbuch den Hinweis erstmal unter "Feinheiten"
                      Pfffhh - Schön das zu hören.

                      Zum Anderen - spräche ja nichts dagegen das so zu schreiben:
                      PHP-Code:

                      if isset($_POST["Vorname"])
                      {
                      $strVorname $_POST["Vorname"];
                      }
                      else
                      {
                      echo 
                      'kein Vorname';
                      die;

                      BTW:

                      Macht es auch Sinn für meine Abfragen, also z.b. auf meiner Bestätigungs - Seite PDO's mit Prepared Statements zu verwenden, also z.b. diese Seite "umzuschnitzen" ?

                      PHP-Code:
                      <?php
                          
                      include("ikenndifunctions.inc.php");

                          
                      mysqlconnect();
                          
                          
                      $query    =    "SELECT * FROM ikenndi ORDER BY id DESC LIMIT 1 ";
                          
                          
                      $result    =    mysql_query$query );
                          
                          if ( ! 
                      $result )
                          {
                              die(
                      "Konnte die Datens&auml;tze nicht auslesen");
                          }

                        
                          
                      ?>
                      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

                      <html>

                          <head>
                              <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
                                      <title>Kontakt2</title>
                                      <link rel="stylesheet" type="text/css" href="gbuch/styles/lalstyle/stylesheet.css"</link>
                              
                                  
                          </head>

                          <body>

                      <div id="headersection">
                      <a href="http://www.lustaufleben.at"><img src="gbuch/img/toplogo.png" border="0" /></a>
                      </div>
                                  ?>
                              <table class="booktable">
                                  <tr class="header">
                                      <td colspan="3" width="100%">
                                          <p class="maintitle">Vorschau ihrer Eingaben</p>
                                      </td>
                                  </tr>
                                  <tr class="seperator">
                                      <td width="20%">&nbsp;</td>
                                      <td width="50%">&nbsp;</td>
                                      <td width="30%">&nbsp;</td>
                                  </tr>

                              </table>
                              <p></p>
                              <table class="booktable">
                              <?php
                                             $datensatz    
                      =    mysql_fetch_array$result );
                              
                      ?>
                              
                                  
                                  <tr class="msgcolumn">    
                                      <td class="label_datfield" width="10%">Vorname</td>
                                      <td class="contentfield01"colspan="2" width="90%">
                                          <p class="titel"><?php echo $datensatz["Vorname"]; ?></p>
                                      </td>
                                  </tr>
                                  <tr class="seperator">
                                      <td width="10%">&nbsp;</td>
                                      <td width="60%">&nbsp;</td>
                                      <td width="30%">&nbsp;</td>
                                  </tr>
                                  <tr class="msgcolumn">
                                      <td class="label_datfield" width="10%">Zuname</td>
                                      <td class="contentfield01"colspan="2" width="90%">
                                          <p class="titel"><?php echo $datensatz["Zuname"]; ?></p>
                                      </td>
                                  </tr>
                                  <tr class="seperator">
                                      <td width="10%">&nbsp;</td>
                                      <td width="60%">&nbsp;</td>
                                      <td width="30%">&nbsp;</td>
                                  </tr>
                                  <tr class="msgcolumn">
                                      <td class="label_datfield" width="10%">Adresse</td>
                                      <td class="contentfield01"colspan="2" width="90%">
                                          <p class="titel"><?php echo $datensatz["frmAdresse"]; ?></p>
                                      </td>
                                  </tr>
                                          <tr class="seperator">
                                      <td width="10%">&nbsp;</td>
                                      <td width="60%">&nbsp;</td>
                                      <td width="30%">&nbsp;</td>
                                  </tr>
                                          <tr class="msgcolumn">
                                      <td class="label_datfield" width="10%">PLZ</td>
                                      <td class="contentfield01"colspan="2" width="90%">
                                          <p class="titel"><?php echo $datensatz["frmPLZ"]; ?></p>
                                      </td>
                                  </tr>
                                  <tr class="seperator">
                                      <td width="10%">&nbsp;</td>
                                      <td width="60%">&nbsp;</td>
                                      <td width="30%">&nbsp;</td>
                                  </tr>
                                  <tr class="msgcolumn">
                                      <td class="label_datfield" width="10%">Ort</td>
                                      <td class="contentfield01"colspan="2" width="90%">
                                          <p class="titel"><?php echo $datensatz["frmOrt"]; ?></p>
                                      </td>
                                  </tr>
                                          
                                          <tr class="seperator">
                                      <td width="10%">&nbsp;</td>
                                      <td width="60%">&nbsp;</td>
                                      <td width="30%">&nbsp;</td>
                                  </tr>
                                          
                                          <tr class="msgcolumn">
                                      <td class="label_datfield" width="10%">Telefon</td>
                                      <td class="contentfield01"colspan="2" width="90%">
                                          <p class="titel"><?php echo $datensatz["frmTelNr"]; ?></p>
                                      </td>
                                  </tr>
                                  <tr class="seperator">
                                      <td width="10%">&nbsp;</td>
                                      <td width="60%">&nbsp;</td>
                                      <td width="30%">&nbsp;</td>
                                  </tr>
                                  <tr class="msgcolumn">
                                      <td class="label_datfield" width="10%">email</td>
                                      <td class="contentfield01"colspan="2" width="90%">
                                          <p class="titel"><?php echo $datensatz["email"]; ?></p>
                                      </td>
                                  </tr>
                                          
                                          <tr class="seperator">
                                      <td width="10%">&nbsp;</td>
                                      <td width="60%">&nbsp;</td>
                                      <td width="30%">&nbsp;</td>
                                  </tr>
                                          
                                              <tr class="msgcolumn">
                                      <td class="label_datfield" width="10%">Anliegen</td>
                                      <td class="contentfield01"colspan="2" width="90%">
                                          <p class="titel"><?php echo $datensatz["Anliegen"]; ?></p>
                                      </td>
                                  </tr>
                                          
                                  <tr class="seperator">
                                      <td width="10%">&nbsp;</td>
                                      <td width="60%">&nbsp;</td>
                                      <td width="30%">&nbsp;</td>
                                  </tr>
                                  <tr class="seperator">
                                      <td width="10%">&nbsp;</td>
                                      <td width="60%">&nbsp;</td>
                                      <td width="30%">&nbsp;</td>
                                  </tr>
                                  
                              </table>
                              
                              
                              <form method="POST" action="phpmailer/phpmailer-fe.php">
                       <input type="hidden" value="kontakt2.html" name="referer">
                        <table style="width:100%">
                           <tr>

                        </tr> 
                        <tr>
                        <input type="hidden" name="Vorname" value="<?php echo $datensatz['Vorname']; ?>"</td>
                        </tr>
                        <tr>
                        <input type="hidden" name="Zuname" value="<?php echo $datensatz['Zuname']; ?>" </td>
                        </tr>
                        <tr>
                        <td><input type="hidden" name="frmAdresse" value="<?php echo $datensatz['frmAdresse']; ?>"</td>
                        </tr>
                        <tr>
                        <td><input type="hidden" name="frmPLZ" value="<?php echo $datensatz['frmPLZ']; ?>"</td>
                        </tr>
                        <tr>
                        <td><input type="hidden" name="frmOrt" value="<?php echo $datensatz['frmOrt']; ?>"</td>
                        </tr>
                        <tr>
                        <td><input type="hidden" name="frmTelNr" value="<?php echo $datensatz['frmTelNr']; ?>"</td>
                        </tr>
                        <tr>
                        <td><input type="hidden" name="email" value="<?php echo $datensatz['email']; ?>"</td>
                        </tr>
                        <tr>
                        <td><input type="hidden" name="Anliegen" value="<?php echo $datensatz['Anliegen']; ?>"</td>
                        </tr>
                        <tr>
                        <td><input type="hidden" name="do" value="insert"></td>
                        </tr>


                      <tr>
                       <td><img src="phpmailer/worxturing.php"></td>
                       </tr>
                      <tr>
                       <td style="color:#FFCC00; font-weight:bold">Enter security code:</td>
                       </tr>
                       <tr>
                      <td><input name="WorxTuringTest" id="WorxTuringTest"></td>
                      </tr>
                      <tr>
                      <td style="color:#FFCC00">Sollten Sie den Code nicht lesen k&ouml;nnen, dr&uuml;cken sie in ihrem Browser auf &quot;reload&quot<br /> um ihre Eingaben zu behalten und einen anderen Code angezeigt zu bekommen.<br />
                      Das kleine 0 - Zeichen ist die Zahl 0</td>
                      </tr>
                      <tr>
                       <td> <input type="submit" value="Submit" name="submit"> </td>
                       </tr>
                      </table>
                        
                          </form>

                          </body>

                      </html>
                      Wobei ich ja die Datenbank - Zugriffsfunktion aus dem erstem Beispiel verwenden könnte.
                      Nur bräuchte ich dann eine SELECT - Abfrage mit ORDER BY und LIMIT und ich habe gelesen, dass das nicht funktioniert ...


                      Liebe Grüße
                      phpels

                      Kommentar

                      Lädt...
                      X