tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
17
ZUGRIFFE
401
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Big-A Big-A ist offline Mitglied Bronze
    Registriert seit
    Jan 2012
    Beiträge
    45
    Hallo liebe Forums Mitgleider,

    ich habe mal wieder eine Frage...dieses mal geht es um Fehlermeldungen, worauf ich leider keine Lösung weiß.

    Ich bin dabei, meine Seite etwas sicherer zu gestalten, ich möchte verhindern, das man eine SQL-Injektion machen kann.

    Ich wollte nun die Datentrückgabe etwas sicherer gestallten, mit Hilfe von dem Prepared Statement. Nun werden mir aber 2 Warnungen und ein fatal error ausgegeben.

    1. Warning: mysqli_prepare() expects parameter 1 to be mysqli, resource given
    2. Warning: mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, null given
    3. Fatal error: Call to undefined function mysql_stmt_execute()

    Das ist mein Code dazu:

    PHP-Code:
        $stmt mysqli_prepare($res,"INSERT INTO Kundendaten (Firma, Nachname, Vorname, Strasse, Hausnummer, PLZ, Ort, Telefonnummer, Fax, Mail, Datum) VALUES (?, ?, ?,?, ?, ?,?, ?, ?,?, ?)");
                
                
    //Parameter daran binden
                
    mysqli_stmt_bind_param($stmt$Firma$Nachname$Vorname$Strasse$Hausnummer$PLZ$Ort$telefonnummer$Fax$Mail$Datum);    
                    
                
    //Preparde Statement ausführen
                
    mysql_stmt_execute($stmt);
                
                
    mysqli_stmt_bind_result($stmt$ID);

                
    mysqli_stmt_fetch($stmt);
                
                
    //das Statement schließen
                
    mysql_stmt_close($stmt);
                
                
    //Verbindung schließen
                
    mysqli_close(); 
    Ich hoffe, das ihr mir helfen könnt.
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Zeig mal wie du die Connection $res erstellst
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    Big-A Big-A ist offline Mitglied Bronze
    Registriert seit
    Jan 2012
    Beiträge
    45
    PHP-Code:
    $res mysql_connect("localhost","root","Passwort") or die ("Keine Verbindung moeglich"); // Verbindung zum Server 
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Wenn du mit mysqli arbeiten willst, dann solltest du auch den mysqli-Connect verwenden. mysql und mysqli sind grundsätzlich nicht kombinierbar. Also alle deine Befehle umschreiben
    PHP-Code:
    $res mysqli_connect("localhost","root","Passwort") or die ("Keine Verbindung moeglich");
    ....
    mysqli_stmt_execute($stmt);
    ...
    mysqli_stmt_close($stmt);
    ... 
    Nachtrag: Am besten gleich auf die OO-Variante umsteigen und mit der MySQLi-Klasse arbeiten
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    Big-A Big-A ist offline Mitglied Bronze
    Registriert seit
    Jan 2012
    Beiträge
    45
    ok...

    Nun habe ich aber noch mehr Fehlermeldungen also vorher

    1. Warning: mysqli_prepare() expects parameter 1 to be mysqli, resource given in...
    2. Warning: mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, null given in...
    3. Warning: mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, null given in...
    4. Warning: mysqli_stmt_bind_result() expects parameter 1 to be mysqli_stmt, null given in...
    5. Warning: mysqli_stmt_fetch() expects parameter 1 to be mysqli_stmt, null given in...
    usw.

    Wieso werden die mir angezeigt und was ist daran falsch?

    was meinst du mit: "Am besten gleich auf die OO-Variante umsteigen und mit der MySQLi-Klasse arbeiten" ?
    Geändert von Big-A (06.02.12 um 11:09 Uhr)
     

  6. #6
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    OO-Variante = Objektorientierte Variante
    http://ch.php.net/manual/de/mysqli.prepare.php -> Beispiel 1: Objektorientierter Stil
    DU gehts nach Beispiel 1: Prozeduraler Stil

    Zud en Fehlern. Hab vergessen, bei mysqli_connect() musst du als 4ten Parameter den DB-Namen mitgeben.
    Big-A bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  7. #7
    Big-A Big-A ist offline Mitglied Bronze
    Registriert seit
    Jan 2012
    Beiträge
    45
    Das Problem ist nun aber das, wenn ich den DB-Namen mit angebe, dann wird mir die gesamte DB nicht mehr geladen.
     

  8. #8
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Fehlermeldung und Code?
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  9. #9
    Big-A Big-A ist offline Mitglied Bronze
    Registriert seit
    Jan 2012
    Beiträge
    45
    Ok, Verbindung steht wieder...aber nun kommt das!?

    1. Warning: mysqli_stmt_bind_param() [function.mysqli-stmt-bind-param]: Number of elements in type definition string doesn't match number of bind variables in ...
    2. Warning: mysqli_close() expects exactly 1 parameter, 0 given in...
    3. Catchable fatal error: Object of class mysqli_stmt could not be converted to string in...
     

  10. #10
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Zeile 45 ist es.
    Ne, im Ernst. Seit du das letzte mal dein Code gepostet hast, hast du diverse Änderungen gemacht. Diese sehen wir hier nicht. Ergo können wir nur raten. Und ich rate nun mal, dass du in de Zeile mit dem mysqli_stmt_bind_param() oder davor irgend einen Fehler hast.
    Wenn du die Fehlermeldung liest, könnte es also sein, dass du zu wenig oder zu viele Parameter mitgibst.
    Also, her mit dem Code.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  11. #11
    Big-A Big-A ist offline Mitglied Bronze
    Registriert seit
    Jan 2012
    Beiträge
    45
    Sorry...

    PHP-Code:
        if ($stmt $mysqli->prepare("SELECT * FROM Kundendaten")){
        
        
    $stmt->bind_param("s"$ID$Firma$Nachname$Vorname$Strasse$Hausnummer,   $PLZ$Ort$telefonnummer$Fax$Mail$Datum);
        
    $stmt->execute();
        
    $stmt->bind_result($district);
        
    $stmt->fetch();
        
    printf("%s is in district %s\n"$ID$disstrict);
        
    $stmt->close();
        }
        
        
    $mysqli->close(); 
    oder

    PHP-Code:
        $stmt mysqli_prepare($res,"INSERT INTO Kundendaten (Firma, Nachname, Vorname, Strasse, Hausnummer, PLZ, Ort, Telefonnummer, Fax, Mail, Datum) VALUES (?, ?, ?,?, ?, ?,?, ?, ?,?, ?)");
                
                
    //Parameter daran binden
                
    mysqli_stmt_bind_param($stmt$Firma$Nachname$Vorname$Strasse$Hausnummer$PLZ$Ort$telefonnummer$Fax$Mail$Datum);    
                    
                
    //Preparde Statement ausführen
                
    mysqli_stmt_execute($stmt);
                
                
    mysqli_stmt_bind_result($stmt$ID);

                
    mysqli_stmt_fetch($stmt);
                
                
    //das Statement schließen
                
    mysqli_stmt_close($stmt);
                
                
    //Verbindung schließen
                
    mysqli_close(); 
    Habe beides ausprobiert
     

  12. #12
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Also beim ersten. Was für Parameter willst du denn dort binden? Dein SQL hat keine Platzghalter für Parameter. Somit weiss MySQLi nicht was es mit $firma etc. anfangen soll.

    Und bei welchem Versuch kommen welche Fehlermeldungen?
    Gib auch mal alle deine zu bindenen Variablen mit var_dump() aus.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  13. #13
    Big-A Big-A ist offline Mitglied Bronze
    Registriert seit
    Jan 2012
    Beiträge
    45
    Wenn ich mir meine Variablen ausgeben lasse, kommt überall das raus, was ich grade neu eingegeben habe:
    PHP-Code:
    object(mysqli)[1]

    object(mysqli_stmt)[2]

    string 'Musterhaus' (length=10)

    string 'Muster' (length=6)

    string 'Max' (length=3)

    string 'Testweg' (length=7)

    string '1' (length=1)

    string '123456' (length=6)

    string 'Musterhausen' (length=12)

    string '123456789' (length=9)

    string '987654321' (length=9)

    string 'MMuster@mustermail.com' (length=22)

    string '2012-02-06' (length=10
    Und mir werden dann noch genau 3 Fehler angezeigt:

    1. Warning: mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, string given in...
    2. Warning: mysqli_close() expects exactly 1 parameter, 0 given in...
    3. Catchable fatal error: Object of class mysqli_stmt could not be converted to string in...


    der Code sieht dazu so aus:

    PHP-Code:
        $stmt mysqli_prepare($res,"INSERT INTO Kundendaten (Firma, Nachname, Vorname, Strasse, Hausnummer, PLZ, Ort, Telefonnummer, Fax, Mail, Datum) VALUES (?, ?, ?,?, ?, ?,?, ?, ?,?, ?)");
                
    var_dump($res);
                
    var_dump($stmt);
                
    var_dump($Firma);
                
    var_dump($Nachname);
                
    var_dump($Vorname);
                
    var_dump($Strasse);
                
    var_dump($Hausnummer);
                
    var_dump($PLZ);
                
    var_dump($Ort);
                
    var_dump($Telefonnummer);
                
    var_dump($Fax);
                
    var_dump($Mail);
                
    var_dump($Datum);
                        
                
    //Parameter daran binden
                
    mysqli_stmt_bind_param($Firma$Nachname$Vorname$Strasse$Hausnummer$PLZ$Ort$telefonnummer$Fax$Mail$Datum);    
                    
                
    //Preparde Statement ausführen
                
    mysqli_execute($stmt);
                
                
    mysqli_stmt_fetch($stmt);
                
                
    //das Statement schließen
                
    mysqli_stmt_close($stmt);
                
                
    //Verbindung schließen
                
    mysqli_close();
                
                
    //früher ($eintrag), übergabe der Daten
                
    mysql_query($stmt); 
     

  14. #14
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Ist $Firma das preparierte Statement?
    Schau doch mal in der Doku nach, was als erster Parameter bei mysqli_stmt_bind_param() kommen muss.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  15. #15
    Big-A Big-A ist offline Mitglied Bronze
    Registriert seit
    Jan 2012
    Beiträge
    45
    ich weiß, weigentlich soll da vor $Firma noch $stmt kommen, jedoch wird mir dann vollgendes angegeben:

    Warning: mysqli_stmt_bind_param() [function.mysqli-stmt-bind-param]: Number of variables doesn't match number of parameters in prepared statement in
     

Ähnliche Themen

  1. Fatal Error
    Von Sasser im Forum PHP
    Antworten: 4
    Letzter Beitrag: 18.01.11, 23:01
  2. error LNK2019 & fatal error LNK1120
    Von HORNSWOGGLE im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 24.11.09, 16:31
  3. Möglich einen Fatal Error abzufangen und darzustellen?
    Von ThirdKeeper im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 10.01.09, 11:45
  4. Fatal Error
    Von Soapp im Forum PHP
    Antworten: 2
    Letzter Beitrag: 15.10.06, 19:49

Stichworte