tutorials.de Buch-Aktion 05/2012
Like Tree3Danke
  • 1 Beitrag von Yaslaw
  • 1 Beitrag von Yaslaw
  • 1 Beitrag von Yaslaw
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
274
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von 123123123
    123123123 123123123 ist offline Mitglied Gold
    Registriert seit
    Aug 2011
    Beiträge
    177
    Morgen Leute und nachträglich Frohe Weihnachten!

    Meine Frage:
    Ich habe eine Datebank erstellt mit "input Felder", die Kunden in einer Kundenliste sucht.
    Jezt möchte ich einen Namen mit Hochkomma schreiben, aber MySQL kann die nicht verarbeiten?
    Geht es mit "mysql_real_escape_string", wenn ja, wo ist es am besten einzufügen!

    Danke!
     

  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 doch mal wie du dein SQL aufbaust. Also ein bisschen 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

  3. #3
    Avatar von 123123123
    123123123 123123123 ist offline Mitglied Gold
    Registriert seit
    Aug 2011
    Beiträge
    177
    Also mein SQL sieht so aus:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    $db->query("    SELECT * 
                        FROM kundenliste 
                        WHERE vorname LIKE '%{$_REQUEST['suche_vorname']}%' 
                        AND nachname LIKE '%{$_REQUEST['suche_nachname']}%' 
                        AND strasse LIKE '%{$_REQUEST['suche_strasse']}%' 
                        AND hausnummer LIKE '%{$_REQUEST['suche_hausnummer']}%' 
                        AND postleitzahl LIKE '%{$_REQUEST['suche_postleitzahl']}%' 
                        AND stadt LIKE '%{$_REQUEST['suche_stadt']}%'
                        ORDER BY vorname ASC, nachname ASC, strasse ASC, hausnummer ASC, postleitzahl ASC, stadt ASC 
                        LIMIT 100 
                    ");
     

  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
    Und du willst also nach [Mü"ller] und [vom "Berg"] etc. suchen können? Oder wie meinst du das?



    PS: mysql_real_escape_string() solltest du sowieso verwenden
    PPS: Du solltest prüfen ob die Felder wirklich abgefüllt sind: [PHP] [MySQL] Einfacher SQL-Filter aus $_POST zusammenstellen
    123123123 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

  5. #5
    Avatar von 123123123
    123123123 123123123 ist offline Mitglied Gold
    Registriert seit
    Aug 2011
    Beiträge
    177
    Ja genau! Ich möchte das die Datenbank die Namen auch findet, wenn die mit Anführungszeichen geschrieben wurden!
     

  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
    Also nohcmals zum verstehen für mich.

    Du Suchst nach [Mü"ller] weil [Mü"ller] in der DB steht oder
    du suchst ["Müller"] weil der User die Anführungszeichen dazu geschrieben hat, aber eigentlich [Müller] sucht weil nur [Müller] aber nicht ["Müller"] in der DB steht?
     
    ---------------------------------------------------------------------------------------------------
    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
    Avatar von 123123123
    123123123 123123123 ist offline Mitglied Gold
    Registriert seit
    Aug 2011
    Beiträge
    177
    Ja das zweite habe ich gemeint.
    Wenn jemand den Namen so engegeben hat ["Müller"], müssen trotzdem alle [Müller] angezeigt werden. In der Datenbank sind die Anführungszeichen nicht vorhanden!
     

  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
    Ah - so.

    Das ist doch einfach. Mittels trim() in PHP einfach die " entfernen

    PHP-Code:
    $string trim($_POST['string'], '"'); 
    Oder in MySQL
    Code sql:
    1
    2
    3
    
    SELECT *
    FROM myTable
    WHERE string = TRIM(BOTH '"' FROM '"Müller"')
     
    ---------------------------------------------------------------------------------------------------
    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
    Avatar von 123123123
    123123123 123123123 ist offline Mitglied Gold
    Registriert seit
    Aug 2011
    Beiträge
    177
    Also irgendwie geht das nicht bei mir.
    Kannst du dein Beipiel mit MySQL mit meinem Code verbinden, weiß nicht direkt wie ich das anwenden soll! Danke!
     

  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
    Was, das ist doch nicht so schwer

    Code sql:
    1
    2
    3
    4
    
    SELECT * 
    FROM kundenliste 
    WHERE vorname LIKE CONCAT('%', TRIM(BOTH '"' FROM '{$_REQUEST['suche_vorname']}'), '%' )
    ....
    123123123 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

  11. #11
    Avatar von 123123123
    123123123 123123123 ist offline Mitglied Gold
    Registriert seit
    Aug 2011
    Beiträge
    177
    Hmm, ist mir etwas peinlich, aber bei mir klappt das nicht.
    Wie würde das mit "mysql_real_escape_string()" aussehen oder ist es was anderes?
     

  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
    Zitat Zitat von 123123123 Beitrag anzeigen
    aber bei mir klappt das nicht.
    Bitte genauer definieren. Hast du Fehlermeldungen? Wenn ja: WELCHE!
    Wie sieht dein fertiges SQL-Script aus?


    Zitat Zitat von 123123123 Beitrag anzeigen
    Wie würde das mit "mysql_real_escape_string()" aussehen oder ist es was anderes?
    Das macht was anderes. Siehe dazu die Anleitung von PHP zu diesem Thema.


    Achja, hab noch herausgefunden dass ev. der Wert mit \" anstelle von " übergeben wird. Alos noch mit stripcslashes() die \ entfernen

    Am saubersten würde das ganze so aussehen
    PHP-Code:
    /**
     * Erstellt eine MySQL-WHERE-Anweisung mit LIKE und entfernten umgebenden "
     * @param   String      Name des Feldes in der DB
     * @param   String      Index-Name des Items in $_REQUEST
     * @return  String      MySQL-WHERE Anweisung
     */
    function getLikeWithoutQuotas($field$requestIndex){
        
    $item mysql_real_escape_string(trim(stripcslashes($_REQUEST[$requestIndex]), '"'));
        return 
    "$field LIKE '%{$item}%'";
    }

    // Array initializieren. Falls kein argument angegeben wurde,
    // dann ist die Argumentliste ein leeres Array
    $wheres = array();

    //Jedes Feld prüfen und ggf in den Where-Array einfügen
    if(isset($_REQUEST['suche_vorname']))       $wheres[] = getLikeWithoutQuotas('vorname''suche_vorname');
    if(isset(
    $_REQUEST['suche_nachname']))      $wheres[] = getLikeWithoutQuotas('nachname''suche_nachname');
    if(isset(
    $_REQUEST['suche_strasse']))       $wheres[] = getLikeWithoutQuotas('strasse''suche_strasse');
    if(isset(
    $_REQUEST['suche_hausnummer']))    $wheres[] = getLikeWithoutQuotas('hausnummer''suche_hausnummer');
    if(isset(
    $_REQUEST['suche_postleitzahl']))  $wheres[] = getLikeWithoutQuotas('postleitzahl''suche_postleitzahl');
    if(isset(
    $_REQUEST['suche_stadt']))         $wheres[] = getLikeWithoutQuotas('stadt''suche_stadt');

    // WHERE-Tel des SQL-String zusammenstellen
    if(count($wheres)>0$whereString "WHERE ".implode(' AND '$wheres);

    //SQL-String zusammensetzen
    $sql = <<<SQL
    SELECT
        * 
    FROM    
        kundenliste
    {$whereString} 
    ORDER BY
        vorname ASC, 
        nachname ASC, 
        strasse ASC, 
        hausnummer ASC, 
        postleitzahl ASC, 
        stadt ASC 
    LIMIT 100 
    SQL;

    //FIXME: Zu Debug-Zwecken den SQL ausegeben. Sobld dieser gut aussieht, an die DB senden
    var_dump($sql); 
    123123123 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

  13. #13
    Avatar von 123123123
    123123123 123123123 ist offline Mitglied Gold
    Registriert seit
    Aug 2011
    Beiträge
    177
    So es geht! Hab vergessen vor dem Anführungszeichen den Querstrich zu machen, also hier -->[ \" ].
    Danke dir für deine Hilfe und auch Geduld!! Frohes neues Jahr!

     

  14. #14
    Avatar von Sebastian Schmidt
    Sebastian Schmidt Sebastian Schmidt ist offline Mitglied Silber
    Registriert seit
    Dec 2002
    Ort
    Hannover
    Beiträge
    75
    Für Programmierung sollte man immer etwas Ruhe und Geduld im Handgepäck haben
     

Ähnliche Themen

  1. Rechte Tastaturhälfte defekt? Andere Zeichen?
    Von bigfella im Forum Microsoft Windows
    Antworten: 2
    Letzter Beitrag: 11.10.08, 19:14
  2. [mysql] Newsletter-user aus Datenbank in eine andere Datenbank
    Von Scofields im Forum Relationale Datenbanksysteme
    Antworten: 8
    Letzter Beitrag: 11.06.08, 21:20
  3. Slashes und andere Zeichen entfernen
    Von redheador im Forum PHP
    Antworten: 6
    Letzter Beitrag: 08.03.08, 13:50
  4. Antworten: 3
    Letzter Beitrag: 12.08.07, 22:52
  5. %20 und viele andere Zeichen umwandeln
    Von Kerwin im Forum PHP
    Antworten: 2
    Letzter Beitrag: 30.07.06, 14:20