Ankündigung

Einklappen
Keine Ankündigung bisher.

Regulärer Ausdruck funktioniert nicht

Einklappen

Neue Werbung 2019

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

  • Regulärer Ausdruck funktioniert nicht

    Ich möchte mittels einer Schleife meine SQL-Abfrage zusammensetzen. Da ich nicht weiss, wieviele Daten der Nutzer einschreibt, muss ich das letzte OR bzw AND mit Hilfe eines Reguären Ausdrucks löschen.
    (Ich habe den selbigen bereits erfolgreich genutzt. In den Fall kam aber nur AND im String vor.)

    Könnt ihr bitte mal schauen, wo mein Fehler liegt?
    Der Reguläre Ausdruck wird nicht bearbeitet. Der String bleibt also gleich und verändert sich nicht.

    PHP-Code:
    $qu="SELECT * FROM `archiv` WHERE `Ersteller` = 1 AND ( ";
                     for (
    $i=1$i<6$i++) {
                         echo
    "schleife";
                         echo 
    $_POST['a'.$i.''];
                         if (!empty(
    $_POST['a'.$i.'']) && !empty($_POST['s'.$i.''] )) {
                             
                             if (
    $_POST['a'.$i.'']=='Laufende Nummer') {
                                 
    $qu.=" `lfd_Nummer` = '".$_POST['s'.$i.'']."' ".$_POST['w'.$i.'']." ";
                             } elseif (
    $_POST['a'.$i.'']=='Inventarnummer, alt') {
                                 
    $qu.=" `Inventarnummer_alt` = '".$_POST['s'.$i.'']."' ".$_POST['w'.$i.'']." ";
                             } elseif (
    $_POST['a'.$i.'']=='relative Datierung') {
                                 
    $qu.=" `relative_Datierung` = '".$_POST['s'.$i.'']."' ".$_POST['w'.$i.'']." ";
                             } elseif (
    $_POST['a'.$i.'']=='absolute Datierung') {
                                 
    $qu.=" `absolute_Datierung` = '".$_POST['s'.$i.'']."' ".$_POST['w'.$i.'']." ";
                             } else {
                                 
    $qu.= " `".$_POST['a'.$i.'']."` = '".$_POST['s'.$i.'']."' ".$_POST['w'.$i.'']." ";
                             } 
                         } 
                      } 
                     
    $par=" )";
                     
    $qu=ereg_replace("(AND|OR)$"$par$qu ); 
    Ich danke euch schonmal für die Hilfe.


  • #2
    Hallo,
    ich löse das ohne reguläre Ausdrücke meist auf diese Weise:
    PHP-Code:
    <?php
    $sql 
    "SELECT * FROM tabelle WHERE 1"// beachte die 1
    for ($i 0$i $max$i++) {
      
    $sql .= " OR irgendwas = irgendwas"// beachte die boolsche Verknüpfung am Anfang
    }
    ?>
    Somit bleibt überhaupt kein "Blinddarm". Andere Möglichkeit wäre, du schreibst die Bedingungen in einen Array
    PHP-Code:
    <?php
    $sql 
    "SELECT * FROM tabelle WHERE ";
    $conditions = array();;
    for (
    $i 0$i $max$i++) {
      
    $conditions[] "irgendwas = irgendwas";
    }
    $sql .= implode(' OR '$conditions);
    ?>
    Bitte den Code nicht buchstäblich nehmen, er ist nur ein Beispiel, aber ich denke einfach zu verstehen.

    Kommentar


    • #3
      Ich habe meinen Fehler gefunden.

      Hinter dem AND bzw OR war noch ein Leerzeichen.
      Der Ausdruck geht jetzt:

      PHP-Code:
      <?php
                                       $par
      =" )";
                       
      $qu=ereg_replace("(AND |OR )$"$par$qu ); 
      ?>

      Kommentar


      • #4
        Reguläre Ausdrücke sollte man trotzdem nur benutzen, wenn es zwingend erforderlich ist oder eine Sache erheblich vereinfacht.

        Kommentar


        • #5
          Und warum, wenn ich fragen darf?

          Kommentar


          • #6
            Das ist wie mit Kanonen auf Spatzen schießen

            Allerdings sollte man immer wenn man diese Mächtigkeit der RegEx
            nicht benötigt die "normalen" String Funktionen verwenden, da diese sehr
            viel schneller
            als RegEx Funktionen sind.

            Kommentar


            • #7
              OK - danke. Wieder was gelernt. :wink:

              Kommentar


              • #8
                Ich schreibe hier auch mal einen RegEx-Problem rein...

                Ich habe in einer Variable eine HTML-Tabelle als String stehen (aus einer DB ausgelesen). Die DB ist eine Preisliste - bzw. mehrere Preislisten (entspricht den Tabellen in den Variablen.).
                Nun möchte ich die Preise aus der Tabelle editieren können und in ein Array schreiben. Dazu habe ich mir eine RegEx gebastelt, die irgendwie nicht ganz funktioniert.
                Den Preis habe ich in HTML-Kommentare geklammert: 14€.

                PHP-Code:
                <?php
                preg_match_all
                ("([<]{1}[!]{1}[-]{2}daten[-]{2}[>]{1})*([<]{1}[!]{1}[-]{2}[/]{1}daten[-]{2}[>]{1})",$dis['text'],$result);
                ?>
                Ich hatte auch an eine andere Möglichkeit gedacht, die aber auch nicht funktioniert, da sie eine Endlosschleife produziert.

                PHP-Code:
                <?php
                $treffer 
                substr_count($dis['text'],"" );
                for (
                $i=0;$treffer;$i++)
                {
                 
                $ausgabe strstr($dis['text'],"");
                 
                $ausgabe strrchr($dis['text'],""); // gibt es eine Funktion, die erstes Vorkommen eines Strings sucht und alles davor wiedergibt?
                 
                echo $ausgabe."
                "
                ;
                }
                ?>

                Kommentar


                • #9
                  PHP-Code:
                  <?php
                  error_reporting
                  (E_ALL);

                  $TXT = <<<Inhalt
                  14€
                  Inhalt;

                  $pattern '#(.*)#isU';
                  preg_match_all($pattern$TXT$array);

                  echo 
                  '<pre>'print_r($arraytrue), '</pre>';

                  ?>

                  Kommentar


                  • #10
                    Danke!! Aber was hast du gemacht?
                    Wie heißt das, damit ich in der Doku nachlesen kann?

                    Vielen Dank!!

                    Kommentar


                    • #11
                      http://tut.php-q.net/regex.html

                      Kommentar


                      • #12
                        Zitat von Rasenkantenstein
                        Danke!! Aber was hast du gemacht?
                        er hat es sich einfach gemacht und nicht wie du - von-hinten-durch-die-brust-ins-auge

                        Zitat von Rasenkantenstein
                        Wie heißt das, damit ich in der Doku nachlesen kann?
                        du hast ja schon ein stichwort genannt :"RegEx" oder auch regular expression"
                        ich kann mir nicht vorstellen, dass du darunter in google nichts findest.

                        Kommentar


                        • #13
                          ([<]{1}[!]{1}[-]{2}daten[-]{2}[>]{1})
                          Eigentlich sehr umständliche Schreibweise.
                          Mit () kommt das selbe raus.
                          Weiterhin hast du Delimiter und Modifer vergessen.
                          Delimiter muss gesetzt werden.
                          Der Modifer hängt vom Umfang der Suche ab.

                          Danke!! Aber was hast du gemacht?
                          Etwas vereinfacht

                          Kommentar

                          Lädt...
                          X