Ankündigung

Einklappen
Keine Ankündigung bisher.

preg_match Suche nach variable geht nicht

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

  • preg_match Suche nach variable geht nicht

    Liebe Community,

    ich habe mich entschlossen, mich hier im Forum zu registrieren und freue mich auf gemeinsame Beiträge.
    Entschuldigung dafür, falls meine Frage zu trivial ist, doch ich sitze nun schon seit über 2 Stunden an diesem Problem und das Programm will einfach nicht funktionieren .
    Vielleicht bin ich auch einfach nur blind... .


    Das Programm soll aus einer .csv das Datum erfassen, welches der User vorher in ein POST HTML Formular eingetragen hat, um dann die gesamte Zeile in dem sich das Datum befindet auszugeben.

    Hier mein Quelltext:


    PHP-Code:
    <html>
    <head>
    <title>Registrierkasse Umsätze</title>
    <meta charset="utf-8">
    </head>
    <body>
    <?php

    #EINLESEN#
    $date=$_POST['date'];
    $needle "$date";
    //VERARBEITUNG & AUSGABE
    $registrierkasse=fopen("protokoll.csv","r");

    while (!
    feof($registrierkasse))
    {
    $ereignis fgets($registrierkasse);

    if ((
    preg_match ('#needle#'$ereignis) === 1))
    {
    echo 
    "$ereignis<br>";
    }
    }
    ?>
    </body>
    </html>
    Nun funktioniert es nicht, dass das Programm nach dem Datum als variable sucht. Ersetzt man nun needle-->durch das entsprechende Datum funktioniert es.

    Für Hilfe wäre ich äußerst dankbar...

    Tschüss, der Dau


  • #2
    Hi,

    um Code leserlicher darzustellen, gibt es hier im WYSIWIG Editor ein PHP icon (zwischen die Tags kannst du deinen Code posten).

    Wie sieht deine txt Datei den genau aus?

    Ansonsten solltest Du sämtliche Parameter vorab validieren (also $_POST["date"] nicht einfach verwenden).

    Hier findest Du bereits ein Forenbeitrag dazu: https://stackoverflow.com/questions/...file-using-php

    mfg
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      Ergänzend:

      PHP-Code:
          if ((preg_match ('#needle#'$ereignis) === 1)) 
      hier suchst du die Zeichenkette "needle" in der Variablen $ereignis.Wenn das Wort needle nicht vorhanden ist gibt es 0 zurück.
      Weiter oben steht aber $needle.

      Kommentar


      • #4
        Dankeschön für deine schnelle Antwort
        tut mir leid, dass mit dem Editor wusste ich nicht.

        Also hier die vollständigen Dateien im Editor:
        Die txt/csv:
        08.01.2018;4711;44.11;2;88.22
        08.01.2018;0011;0.99;1;0.99
        08.01.2018;0012;1.09;5;5.45
        08.01.2018;0013;2.10;6;12.60
        09.01.2018;0011;0.99;6;5.94
        09.01.2018;0012;1.09;2;2.18
        10.01.2018;0013;2.10;3;6.30
        11.01.2018;4711;44.11;1;44.11


        Html
        HTML-Code:
        <html>
        <head>
             <title>Registrierkasse</title>
        </head>
        <body>
        
        <h1>Auswertung der Protkolldaten</h1>
        
        <form action="ausgabe2.php" method="POST" >
        <p>Datum
        <input name="date" type="text" size="30" maxlength="30"> <span>(TT.MM.JJJJ)</span>
        </p>
        <input type="SUBMIT" Value="anzeigen">
        </form>
        
        </body>
        </html>
        Und die PHP
        PHP-Code:
        <html>
        <head>
        <title>Registrierkasse Umsätze</title>
        <meta charset="utf-8">
        </head>
        <body>
            <?php 

            
        #EINLESEN#
            
        $date=$_POST['date'];
            
        $needle $date;
            
        //VERARBEITUNG & AUSGABE
            
        $registrierkasse=fopen("protokoll.csv","r");

            while (!
        feof($registrierkasse))
            {
                
        $ereignis fgets($registrierkasse);

                if ((
        preg_match ('#needle#'$ereignis) === 1))
                {
                echo 
        "$ereignis<br>";
                }
            }
                
        ?>
                </body>
                </html>
        Ich dachte ich brauche das POST um aus der html die Eingabe zu bekommen? :O

        ​​​​

        Kommentar


        • #5
          Ich habe es auch schon mit
          '#$needle#'
          '$$needle'
          Und $needle (hier beschwert er sich über deliver)

          Versucht

          Aber irgendwo da muss garantiert der FeierF liegen.... Wie muss ich die variable richtig angeben?
          Riesen Dankeschön bisher

          Kommentar


          • #6
            Hi,

            Ich dachte ich brauche das POST um aus der html die Eingabe zu bekommen? :O
            korrekt, aber das heißt nicht, das Du allen Parametern und Usereingaben blind vertrauen sollst! Hier mal ganz simple $ rudimentär erklärt: https://www.php-einfach.de/experte/p...en-validieren/

            Für die Lösung deines Problems, bitte einmal den Link aufrufen: dort wird genau auf dein Problem eingegangen.

            mfg
            while (!asleep()) sheep++;

            Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

            Kommentar


            • #7
              Hast du mal dein Datum in diesem Format TT.MM.JJJJ eingegeben
              und geschaut was bei
              PHP-Code:
              $date=$_POST['date']; 
              ankommt?

              Kommentar


              • #8
                Verstehe den Unterschied zwischen single quotes und double quotes in PHP.
                PHP-Code:
                $needle 'hallo';

                var_dump'$needle'"$needle"); 
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar


                • #9
                  Dankeschön für die schnelle Hilfe und die zwei Links.
                  Mit Hilfe der beiden Links und einer Überprüfung was bei ''date' ankommt würde ich das heute Nachmittag noch einmal probieren.
                  Eine so schnelle Hilfe habe ich nicht erwartet, ihr seid ein tolles Forum.

                  Ich bringe ein Update sobald ich es nochmal zu Hause probiert habe.

                  Kommentar


                  • #10
                    Zitat von lstegelitz Beitrag anzeigen
                    Verstehe den Unterschied zwischen single quotes und double quotes in PHP.
                    PHP-Code:
                    $needle 'hallo';

                    var_dump'$needle'"$needle"); 
                    Das offensichtliche habe ich noch nicht probiert....o.O

                    Kommentar


                    • #11
                      Ein ganz großes Dankeschön an alle die bei der Problembehebung geholfen haben.
                      Die Links sind sehr interessant und ich arbeite sie "Stück für Stück" durch.

                      Insbesondere ein großes Dankeschön an protestix (klar, jetzt verstehe ich, das Wort "needle") und an Istegelitz mit dem ganz großen Schubser in die richtige Richtung!

                      So funktioniert das jetzt
                      PHP-Code:
                      if ((preg_match ("#$needle#"$ereignis) === 1)) 

                      Kommentar


                      • #12
                        Besser wäre "#{$needle}#" statt "#$needle#" da es in anderen Konstellationen wieder mal zu Problemen kommen kann. Auch kann es sinnvoll sein, falls noch mehr mit den Daten passieren sollte, dass man $arr_csv = fgetcsv statt fget verwendet und direkt im korrekten Array landet. $csv_datum = $arr_csv[0];
                        bitcoin.de <- Meine Freelancerwährung

                        Kommentar


                        • #13
                          Das mit dem pregmatch ist ja nun geklärt aber was ist mit dem Datum

                          08.01.2018;4711;44.11;2;88.22
                          und dem
                          HTML-Code:
                          <input name="date" type="text" size="30" maxlength="30"> <span>(TT.MM.JJJJ)
                          das sieht nicht gut aus. Wieso denn type text und nicht date. Und was wenn jemand 8.1.2018 eingibt, wie willst du das verhindern und wo kontrollieren.

                          Kommentar


                          • #14
                            Wenn Variablen wie $needle in regulären Ausdrücken benutzt werden sollen müssen diese mit preg_quote() maskiert werden !
                            PHP-Klassen auf github

                            Kommentar


                            • #15
                              Zitat von Alpha Beitrag anzeigen
                              Besser wäre "#{$needle}#" statt "#$needle#" da es in anderen Konstellationen wieder mal zu Problemen kommen kann. Auch kann es sinnvoll sein, falls noch mehr mit den Daten passieren sollte, dass man $arr_csv = fgetcsv statt fget verwendet und direkt im korrekten Array landet. $csv_datum = $arr_csv[0];
                              Das mit den geschweiften Klammern habe ich geändert und für die Zukunft (in der Festplatte da oben) gespeichert, diese so zu verwenden Vielen Dank. Mit Arrays habe ich noch nicht gearbeitet, wäre aber die nächste Lektion in die ich mich stürzen werde

                              protestixFür Falscheingaben würde mir erstmal preg_replace einfallen? dann mache ich mich da dran. Ich glaube es wäre vielleicht sogar besser dafür Auswahllisten zu nehmen in HTML, da ist man dann garantiert auf der sicheren Seite?

                              jspitpreg_quote() Funktion ist mir noch nicht ganz klar, auch nach dem durchlesen :/ Wenn ich das richtig verstanden habe, ist die Maskierung dazu da, damit nichts weiteres in meine Variable hineininterpretaiert wird richtig? Also sichere ich mich dann somit sozusagen ab, dass etwas interpretiert wird was nicht sein soll?

                              Kommentar

                              Lädt...
                              X