Tomchy: Formular mit Text weiterverarbeiten

Hallo,

bin PHP-Neuling. Ich habe mich in etwa durch die verschiedenen PHP-Funktionen gearbeitet, blicke aber noch nicht ganz durch. Ich braeuchte  eure Hilfe bei einer konkreten Aufgabenstellung.

Und zwar will ich ein mehrzeiliges Textarea so weiterverabeiten, dass jede darin eingegebene Zeile nach dem Absenden des Formulars separat in ein Array gespeichert wird und das das Array sich selber "ausdehnt", je nach Zeilenanzahl.

Vielen Dank fuer Tipps, wie ich ueberhaupt da dran gehen soll.

Tomchy

  1. Hi,

    Und zwar will ich ein mehrzeiliges Textarea so weiterverabeiten, dass jede darin eingegebene Zeile nach dem Absenden des Formulars separat in ein Array gespeichert wird und das das Array sich selber "ausdehnt", je nach Zeilenanzahl.

    Wie du den Inhalt der Textarea im Script in Empfang nimmst, erklärt dir jedes Grundlagen-Tutorial, und dann brauchst du nur noch explode (oder preg_split, falls du auf ggf. unterschiedliche Zeilenumbruchformate Rücksicht nehmen willst/musst).

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Chris, danke für den Tip, habe mir das Script schon zusammen gebastelt :-)

      Jetzt bräuchte ich eine Funktion, mit der ich in einem String überprüfen kann, ob es Wortzwischenräume enthält ... Hm?

      lg, Tomchy

      1. Hi,

        Jetzt bräuchte ich eine Funktion, mit der ich in einem String überprüfen kann, ob es Wortzwischenräume enthält ... Hm?

        Definiere „Wortzwischenräume“.
        Schau dir die Stringfunktionen im Handbuch an.
        Beschäftige dich ggf. mit regulären Ausdrücken, falls die Definition von „Wortzwischenräume“ komplexer ausfallen sollte.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hi,

          Definiere „Wortzwischenräume“.

          in meinem Fall ein normales Space.

          Ich nehme mal an, das die Funtion preg_match die richtige ist.
          Wenn ich aber das Skript ausführe, kennt preg_match anscheinend nicht das $keyword aus der foreach-Schleife. Was mache ich falsch?

          .
          .
          .
          foreach ($keyword_array as $keyword) {

          if (preg_match(' ', $keyword)) {

          .
          .
          .
          .

          1. Damit es deutlicher wird, was ich erreichen will:

            $keyword_list = $_REQUEST['keyword_list'] ;
            $keyword_array = explode("\n", $keyword_list);

            foreach ($keyword_array as $keyword) {

            if (preg_match(' ', $keyword)) {
                        echo 'Space vorhanden';

            } else {
                        echo 'Space nicht vorhanden';
                        }

            }

            im Array sind ganz normale Text-Sätze gespeichert und falls ein Satz nur aus einem WOrt besteht, soll er anders behandelt werden.

            lg, Tomchy

          2. Hi,

            Hi,

            Definiere „Wortzwischenräume“.
            in meinem Fall ein normales Space.

            Ich nehme mal an, das die Funtion preg_match die richtige ist.

            Nein, dafür würde str_pos schon ausreichen.

            Wenn ich aber das Skript ausführe, kennt preg_match anscheinend nicht das $keyword aus der foreach-Schleife. Was mache ich falsch?

            if (preg_match(' ', $keyword)) {

            preg_match arbeitet mit regulären Ausdrücken. Ein einzelnes Leerzeichen ist kein solcher.

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Hallo Chris,

              danke für deine Tipps, ich habe es nun mit strpos versucht, komme aber leider nicht weiter, das Skript gibt mir einfach keine richtigen Ergebnisse.

              Hier ist nun das komplette Listing, weiss jemand wo der Hund begraben ist?

              Danke,
              Tomchy

              --------------
              <?php
              echo "<FORM METHOD='POST' ACTION='$PHP_SELF'>
              <textarea name='keyword_list' rows='15' cols='40'>
              SatzOhneLeerzeichen
              Zweiter Satz
              Dritter Satz</textarea><br />
              <br /><input type='submit' value='submit' name='submit'><br />
              </FORM>";

              $keyword_list = $_REQUEST['keyword_list'] ;
              $keyword_array = explode("\n", $keyword_list);
              $i=0;
              $search = ' ';

              foreach ($keyword\_array as $keyword) {  
              	echo "(Kontrolle des aktuellen Satzes):<BR>  
              	\$keyword\_array[$i]= <b>".$keyword\_array[$i].'</b><br>';  
              
              	$spaceinside = strpos($keyword\_array[$i], $search);  
              

              if ($spaceinside === true) {
              echo "<B>Leerzeichen ist enthalten!</B><br><br>";

              		} else {  
              			echo "<B>Leerzeichen ist NICHT enthalten!</B><br><br>";  
              		}  
              	$i++;  
              }  
              

              ?>

              1. Hallo,

                $keyword_list = $_REQUEST['keyword_list'] ;

                warum benutzt du hier $_REQUEST? Du versendest dein Formular mit POST, also wäre es naheliegend, die Daten aus $_POST zu lesen. Wenn du auf $_REQUEST zugreifst, könntest du ebensogut einen gleichnamigen Parameter aus $_GET oder $_COOKIE erwischen. Ist das erwünscht?

                  $spaceinside = strpos($keyword\_array[$i], $search);  
                

                if ($spaceinside === true)

                Diese Bedingung wird nie erfüllt sein, denn strpos() gibt entweder den numerischen Index des ersten gefundenen Zeichens zurück, oder false, wenn das gesuchte Zeichen nicht vorkommt. Aber niemals true.
                Das hättest du aber auch selbst nachlesen können - und anhand des Funktionsnamens könnte man sogar selbst drauf kommen, dass strpos() bevorzugt die *Position* des gesuchten Zeichens ermittelt.

                Ciao,
                 Martin

                --
                Abraham sprach zu Bebraham: Kann i mal dei Cebra ham?
                Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                1. Hallo Martin,

                  strpos hat mir Chris in einer vorigen Antwort suggeriert, anscheinend haben wir uns da irgendwie missverstanden.

                  Ich habe nun wieder preg_match verwendet, diesmal mit reg. Ausdruck (hoffe, ich habe es so richtig definiert), damit ein whitespace gesucht wird.

                  Es klappt aber dennoch noch immer nicht. Hm ...

                  mfg, Tomchy

                  <?php
                  echo "<FORM METHOD='POST' ACTION='$PHP_SELF'>
                  <textarea name='keyword_list' rows='15' cols='40'>
                  SatzOhneLeerzeichen
                  Zweiter Satz
                  Dritter Satz</textarea><br />
                  <br /><input type='submit' value='submit' name='submit'><br />
                  </FORM>";

                  $keyword_list = $_POST['keyword_list'] ;
                  $keyword_array = explode("\n", $keyword_list);
                  $i=0;
                  $search = ' ';

                  foreach ($keyword\_array as $keyword) {  
                  	echo "(Kontrolle des aktuellen Satzes):<BR>  
                  	\$keyword\_array[$i]= <b>".$keyword\_array[$i].'</b><br>';  
                  	  
                  		$spaceinside = preg\_match('\s', $keyword\_array[$i]);  
                  

                  if ($spaceinside === true) {
                  echo "<B>Leerzeichen IST enthalten!</B><br><br>";

                  		} else {  
                  			echo "<B>Leerzeichen ist NICHT enthalten!</B><br><br>";  
                  		}  
                  	$i++;  
                  }  
                  

                  ?>

                  1. Hallo,

                    strpos hat mir Chris in einer vorigen Antwort suggeriert, anscheinend haben wir uns da irgendwie missverstanden.

                    das glaube ich nicht, strpos() ist tatsächlich eine gute Wahl, wenn nicht gar die beste, um auf das Vorhandensein *eines bestimmten* Zeichens im String zu testen. Dass du im positiven Fall sogar noch die Position des Zeichens bekommst, ist in deinem Fall vielleicht nicht notwendig, aber oft eine willkommene Zusatzinformation. Nochmal:

                    Zeichen kommt nicht vor         -> strpos() liefert false (Boolean)
                    Zeichen kommt an Position n vor -> strpos() liefert n (Zahlenwert)

                    Du kannst also explizit auf false testen, wie es ja auch in den Beispielen auf der Manual-Seite gezeigt wird. Lesen musst du schon selbst.

                    Ich habe nun wieder preg_match verwendet, diesmal mit reg. Ausdruck (hoffe, ich habe es so richtig definiert), damit ein whitespace gesucht wird.
                    Es klappt aber dennoch noch immer nicht. Hm ...

                      	$spaceinside = preg\_match('\s', $keyword\_array[$i]);  
                    

                    Das ist auch immer noch kein RegEx. Ein RegEx besteht mindestens aus einem frei wählbaren Delimiter-Zeichen am Anfang, gefolgt vom Suchmuster, und nochmal dem Delimiter-Zeichen; danach können noch zusätzliche Switches folgen.

                    Du solltest dir wirklich ein paar Grundlagen von dem anlesen, was du verwenden willst.

                    So long,
                     Martin

                    --
                    Wenn alle das täten, wass sie mich können,
                    käme ich gar nicht mehr zum Sitzen.
                    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                    1. Martin, vielen Dank!

                      Jetzt klappts!

                      Tut mir leid, dass ich so lange brauchte, am Anfang ist es sehr schwer den Durchblick zu haben bei einem so umfangreichem (für mich) Ding wie PHP ...

                      Danke nochmals!

                      Tomchy