1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Zeichen aus String entfernen

Dieses Thema im Forum "PHP" wurde erstellt von nchristoph, 11. Oktober 2016.

  1. nchristoph

    nchristoph Erfahrenes Mitglied

    Hallo zusammen,

    ich muss eine SQL Abfrage absichern.

    Ich gebe in ein Formular eine Reihe von Zahlen ein, getrennt mittels Beistrich.
    Der String wird dann beim Beistrich in einen Array aufgesplittet. Die einzelnen Arrayfelder werden mit einer Datenbank abgeglichen.

    Aktuell sieht der Code so aus:

    PHP:
    1. if( preg_match('/\d+ ?(, ?\d+)*/', $_POST['liste']) === 1 ){
    2.       $sql=(" SELECT
    3.                    Pfad,
    4.                    Partie
    5.                FROM
    6.                    suchmaschine
    7.                WHERE
    8.                     Partie IN (".$_POST['liste'].")");
    9.                
    10.     $stmt = $db_conn->prepare($sql);
    11.     //$stmt->bindValue(':suchbegriff', "{$_POST['liste']}", PDO::PARAM_STR);
    12.     $stmt->execute();
    13.    
    14.     if($stmt->rowCount()>=1) {
    15.         foreach($stmt->fetchAll() as $row) {
    16.                 $partie[] = $row['Partie'];              
    17.             }
    18.         }
    19.     }
    Wenn allerdings jetzt ein Sonderzeichen im String vorkommt, bekomme ich folgenden MySQL Fehler.

    Ein Versuch, den das Feld $_POST['liste'] mittels trim oder preg_replace zu bereinigen, funktioniert nur bedingt, weil auch alle Sonderzeichen in der Mitte des Strings entfernt werden wodurch ich kein Ergebnis retourkriege.

    Auch mittels RTRIM und LTRIM habe ich es versucht, leider kommt dabei wieder nur ein MySQL Fehler raus.

    Kann mir von euch wer einen Rat geben?
     
  2. Yaslaw

    Yaslaw n/a Moderator

    Ich verstehe nicht ganz wie dein String aussieht. Mach bitte mal ein Beispiel mit IST und SOLL Strings.
    Auch mit den Sonderzeichen mittendrin, die erhalten bleiben sollen.
     
  3. nchristoph

    nchristoph Erfahrenes Mitglied

    Also ein normaler String in meinem Fall sieht so aus:

    74125 Bei einem Paket
    74125,74126,74127,74128 usw. bei mehreren Paketen.

    Wenn ich jetzt aber eingebe z.b. 74125, wirft mit MySQL den oben genannten Fehler aus.
    Die Zahlen zwischen den Beistrichen sind aktuell 5 Zahlen lang, ich komme aber immer schneller Richtung 6 Stellen.

    Kannst man sich jetzt ungefähr vorstellen, was ich meine?
     
  4. Yaslaw

    Yaslaw n/a Moderator

    Und was willst du Bereinigen?
    In deinem Beispiel sehe ich nix, was es zu bereinigen gibt
     
  5. nchristoph

    nchristoph Erfahrenes Mitglied

    Sorry, im Stress vergessen.

    Wenn jetzt im Textfeld z.b. eingeben wird

    ,74125, muss der String von den Beistrichen bereinigt werden.

    Mit einem Paket kein Problem. Wenn allerdings mehrere Pakete benötigt werden und schaut der String so aus
    ,74125,74126,74127,74128,

    muss der String vom ersten und vom letzten Beistrich bereinigt da sonst der bereits erwähnte MySQL Error kommt.

    Es geht mir um Fehlerbehandlung bzw. vermeidung.

    //EDIT

    Ich könnte mich gerade selber Ohrfeigen. Man sollte natürlich die Arbeit auch speichern bevor man was testet....

    PHP:
    1. $charlist =",.-;:_+*#!§$%&/()=?`´öäüÖÄÜ ";
    2.    $trimmedtext = ltrim($_POST['liste'], $charlist);
    3.    $trimmedtext = rtrim($trimmedtext, $charlist);
    4.    
    5.    if( preg_match('/\d+ ?(, ?\d+)*/', $trimmedtext) === 1 ){
    6.        $sql=(" SELECT
    7.                            Pfad,
    8.                            Partie
    9.                        FROM
    10.                            suchmaschine
    11.                        WHERE
    12.                             Partie IN (".$trimmedtext.")");
    13.                
    14.    $stmt = $db_conn->prepare($sql);
    15.    $stmt->execute();
    16.    
    17.    if($stmt->rowCount()>=1) {
    18.        foreach($stmt->fetchAll() as $row) {
    19.                $partie[] = $row['Partie'];              
    20.            }
    21.        }
    22.    }
    Frage: Gibt es eine schönere Lösung?
     
    Zuletzt bearbeitet: 11. Oktober 2016
  6. Yaslaw

    Yaslaw n/a Moderator

  7. nchristoph

    nchristoph Erfahrenes Mitglied

    WOW einfach hammer die beiden Seite, gleich zu den Bookmarks legen.

    Danke für die Hilfe Yaslaw.
     
Die Seite wird geladen...
Ähnliche Themen - Zeichen String entfernen
  1. Rocky
    Antworten:
    7
    Aufrufe:
    363
  2. Templorials
    Antworten:
    6
    Aufrufe:
    2.338
  3. FingerSkill
    Antworten:
    4
    Aufrufe:
    11.598
  4. soa
    Antworten:
    2
    Aufrufe:
    3.705