php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.12.2008, 00:19  
Benutzer
 
Registriert seit: 25.10.2008
Beiträge: 50
phpels befindet sich auf einem aufstrebenden Ast
Standard [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
phpels ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.12.2008, 00:22  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Was hindert Dich daran, das Objekt per return zurückzugeben?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 02.12.2008, 00:58  
Benutzer
 
Registriert seit: 25.10.2008
Beiträge: 50
phpels befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
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>
phpels ist offline  
Alt 02.12.2008, 01:04  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Guck ich morgen mal rüber. Müde
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 02.12.2008, 01:06  
Benutzer
 
Registriert seit: 25.10.2008
Beiträge: 50
phpels befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Guck ich morgen mal rüber. Müde

Gute Nacht und erholsamen Schlaf

lg phpels
phpels ist offline  
Alt 02.12.2008, 02:09  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Zitat:
<script language="php">
Das funktioniert? Wow, man lernt nie aus.
Zitat:
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.


Zitat:
include("ikenndifunctions3.inc.php");
Dein Skript kann ohne die Datenbankverbindung nicht "leben". Da würde ich eher require 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.


Zitat:
if ( isset($_POST["do"]) && $_POST["do"] == "insert" )
Vielleicht an dieser Stelle etwas pingelig:
Zitat:
$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.
Zitat:
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

Geändert von David (02.12.2008 um 02:14 Uhr).
David ist offline  
Alt 02.12.2008, 12:22  
Benutzer
 
Registriert seit: 25.10.2008
Beiträge: 50
phpels befindet sich auf einem aufstrebenden Ast
Standard

Hi David

Vielen Dank für deine Mühe

Zitat:
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:
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:
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:
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:
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:
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
phpels ist offline  
Alt 02.12.2008, 12:31  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Zitat:
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 
David ist offline  
Alt 02.12.2008, 13:20  
Benutzer
 
Registriert seit: 25.10.2008
Beiträge: 50
phpels befindet sich auf einem aufstrebenden Ast
Standard

Hi David

Zitat:
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:
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:
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
phpels ist offline  
Alt 02.12.2008, 13:32  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Zitat:
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
Zitat:
$_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"
David ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
JS: Einführung - Javascript im Schichtenmodell nikosch Tutorials 4 11.04.2009 17:06
stored procedure, prepared statement wird nicht ausgeführt Horst79 PHP Tipps 2008 9 28.09.2008 15:08
PDO: beginTransaction nicht mit prepared statements? HStev PHP Tipps 2008 0 16.09.2008 14:35
PHP-GTK Tutorial Beitragsarchiv 9 02.11.2005 21:07
Rückgabewert einer rekrusiven Funktion PHP-Fortgeschrittene 7 06.10.2005 18:44
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
Funktion in einer Funktion aufrufen? PHP Tipps 2005-2 11 14.06.2005 15:14
[Erledigt] Wie kann ich beliebig viele Werte an eine Funktion übergeben PHP Tipps 2005 11 25.01.2005 10:44

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
Überprüfung des sicherheitscodes ist fehlgeschlagen!, datenbankzugriff mit php class und pdo, preparedstatement example, datenbank eintrag pdo, pdo prepare as function, tutorial php datenbankverbindung pdo, pdo reset statement, php datenbankzugriff prepare, $connection->prepare(), funktionen php return mysql statement;, php function in pdo, city code function connect, php pdo insert if insert, new pdo in funktion, pdo php connection function, php pdo include zugriff in funktion, prepared statements in function, pdo connection class example, php pdo connection class, php pdo connection

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:35 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum