Ankündigung

Einklappen
Keine Ankündigung bisher.

Input Eingabe per PHP Verändern

Einklappen

Neue Werbung 2019

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

  • Input Eingabe per PHP Verändern

    Hallo !
    Ich bin die ganze Zeit am rum rätseln, wie man eingaben aus input, bestimmte Inhalte abändern. Zum beispiel wenn ich bei in das Input Feld, für meine News, schreibe :

    PHP-Code:
    [youtube=http://www.youtube.com/watch?v=Nhg_jmK8Sao] 
    eingebe. Und wenn ich dann auf absenden klicke. das Aus dem Link der Einbetten Code von youtube wird

    PHP-Code:
    <object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/Nhg_jmK8Sao?fs=1&amp;hl=de_DE"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Nhg_jmK8Sao?fs=1&amp;hl=de_DE]" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object
    Das wird dann ja in die Datenbank und so eingetragen.
    Wie ist das möglich?
    Auf so seiten wie SchuelerVZ.net ist das ja möglich.
    Da wird nur der Youtube Link angegeben, dann wird das Video eingebettet.

    Ich frage mich das eben auch in anderem Sinne.
    Zum beispiel wie man in der Art einen eigenen BB Code Editor oder ähnliches schreibt

    Ist das möglich, ohne riesen langen Script?

    lg Elias

  • #2
    Es ist relativ leicht möglich, indem du die Eingabe einfach in den Rest dynamisch einsetzt und dann in der Datenbank speicherst:
    PHP-Code:
    <?php

    $link 
    '';
    if (isset(
    $_POST['link'])) $link trim($_POST['link']);
    if (!empty(
    $link)) {
      
    $youtubeObject '<object width="480" height="385"><param name="movie" value="'.$link.'?fs=1&amp;hl=de_DE"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Nhg_jmK8Sao?fs=1&amp;hl=de_DE]" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object>';
      
    //Datenbankspeicherung
      //Testausgabe:
      
    echo '<html><head><title>Test-Ausgabe</title></head><body>'.$youtubeObject.'</body></html>';
    } else {
      echo 
    'Sie haben nichts eingegeben';
    }
    Das war jetzt sehr kurz das verarbeitende Skript.
    Um das ganze angenehmer zu gestalten, solltest du vielleicht ein Template erstellen, dass du dann entsprechend füllst. Dieses Skript ist auch ohne jegliche Inhaltsprüfung. Es könnte also auch JavaScript eingeschleust werden. Daher Validierung müsste noch vorgeschaltet werden und natürlich ein vernünftiges Formular.
    Mit freundlichen Grüßen
    Jim Martens

    Kommentar


    • #3
      Das mit dem Javascript ist nicht das Problem, da nur wir Admins reinschreiben werden.

      Ich verstehe das nicht wirklich wie du das meinst .
      Weil ich habe ja normale News. Bei denen ich schreibe zum Beispiel.

      Unser Neues Youtube Video: (Youtube-Link).
      Und versende das jetzt mit einem Input Formular.

      Nun möchte ich das PHP das so verarbeitet, das "Unser Neues Youtube Video" Ganz normal bleibt und das nur der Youtube Link umgeändert wird. Daher muss PHP ja irgendwie abfragen ob ein Youtube-Link abgefragt wurde.

      lg Elias

      Kommentar


      • #4
        BB-Code, und dazu gehört auch dein oben angesprochenes Youtube-Beispiel, funktioniert anders als du es dir scheinbar denkst.
        Die eingetragenen BB-Codes werden nicht beim Speichern interpretiert und ausgewertet, sondern, sinnvollerweise, erst dann, wenn sie auf der Seite wieder ausgegeben werden sollen.
        In der Datenbank steht IMMER [youtube=http://www.youtube.com/watch?v=Nhg_jmK8Sao] .
        Erst beim Laden der Webseite wird daraus ein eingebettetes Video.
        Und ob oder was anhand des BB-Codes dargestellt werden soll, das entscheidet dann halt der BB-Code-Parser.

        Hier gibt es den kostenlosen BB-Code-Parser von Christian Seiler
        Ein sehr gutes Tool, das wir auf der Arbeit auch auf sehr großen Websites einsetzen.
        Das Rad neu zu erfinden ist also eigentlich nicht notwendig

        Und um zu verstehen, wie sowas funktioniert, musst du dir nur den Programmcode dort anschauen.
        "Nein, nein das Beste an Zombieland ist: Keine Facebook-Status-Updates mehr.
        'Rob Curtis freut sich schon auf Freitag', wen interessierts?"

        Kommentar


        • #5
          Du meinst also BB-Codes. OK, das wird dann ein wenig komplizierter. Dann könntest du folgendes machen:
          PHP-Code:
          <?php
          //vorausgesetzt $_POST['bb_youtube'] enthält die Eingabe
          $eingabe '';
          $result '';
          $ausgabe '';
          $content '';
          $error '';
          $tmp '
          <object data="{LINK}" style="height: 390px; width: 640px" type="application/x-shockwave-flash">
          <param name="movie" value="{LINK}" />
          <param name="allowFullScreen" value="true" />
          <param name="allowScriptAccess" value="always" />
          <embed src="{LINK}" type="application/x-shockwave-flash" 
          allowfullscreen="true" allowScriptAccess="always" width="640" height="390" />
          </object>'
          ;
          $resultLinks = array();

          if (isset(
          $_POST['bb_youtube'])) {
              if (isset(
          $_POST['bb_youtube'])) $eingabe htmlspecialchars(trim($_POST['bb_youtube']));
              if (empty(
          $eingabe)) $error 'Nichts eingegeben';
              if (
          preg_match_all('!(\[youtube\]{1}.{1,}\[/youtube\]{1})!'$eingabe$matches)) {
                  foreach (
          $matches[0] as $match) {
                      
          $link substr($matchstrlen('[youtube]'));
                      
          $link substr($link0strlen($link) - strlen('[/youtube]'));
                      
          $resultLinks[] = str_replace('{LINK}'$link$tmp);
                  }
              }
              
          $result $eingabe;
              
          $result str_replace("\n"'<br />'$result);
              foreach (
          $resultLinks as $value)
              {
                  
                  if (
          $tmp preg_replace('!(\[youtube\]{1}.{1,}\[/youtube\]{1})!'$value$result1)) {
                      
          $result $tmp;
                      continue;
                  }
                  continue;
              }
              
          $ausgabe $result;
          }
          $content file_get_contents('./forum.tpl');
          $content str_replace('{CONTENT}'$eingabe$content);
          $content str_replace('{AUSGABE}'$ausgabe$content);
          $content str_replace('{error}'$error$content);
          echo 
          $content;
          //weitere Verwendung
          Dazu die Datei forum.tpl:
          Code:
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
          <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
          <head>
          	<title>Youtube-BB-Code</title>
          	<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
          	<meta name="author" content="Jim Martens" />
          	<meta name="description" content="Test von Youtube-BB-Codes" />
          	<meta name="keywords" content="bb, youtube" />
          	<meta name="robots" content="noindex" />
          	<meta name="DC.Language" content="de" />
          	<meta http-equiv="X-UA-Compatible" content="IE=8" />
          </head>
          <body>
          <div id="form">
          	<form action="Forum.php" method="post">
          		<fieldset>
          			<legend>Youtube-Test</legend>
          			<div id="eingabe">
          				<label for="bb_youtube">Eingabetext:</label>
          				<textarea id="bb_youtube" name="bb_youtube" cols="30" rows="10">{CONTENT}</textarea>
          				<p>{error}</p>
          			</div>
          			<div id="submit">
          				<button type="submit">Abschicken</button>
          			</div>
          		</fieldset>
          	</form>
          </div>
          <div id="ausgabe">
          	{AUSGABE}
          </div>
          </body>
          </html>
          Damit hast du eine einfache BB-Code-Ersetzung.

          Dieser Code sollte verwendbar sein. Eine Garantie auf Richtigkeit kann ich aber nicht geben.
          Mit freundlichen Grüßen
          Jim Martens

          Kommentar


          • #6
            Danke schon mal .
            kannst du den Code vielleicht einmal m einzelnen erklären ?
            Das wäre total nett

            LG Elias

            Kommentar


            • #7
              Wie ich bereits sagte, es ist das Grundlegende und es gibt bereits solche Lösungen. Der php-Code macht im Grunde nichts anderes, als zunächst den Parameter 'bb_youtube' zu überprüfen und im Anschluss in den Eingaben nach einem [youtube]-Tag zu suchen. Wird eines gefunden, wird der angegebene Link in den HTML-Code geschrieben und dann ausgegeben.
              Wichtig dabei ist, dass die Syntax der Links so lauten muss:
              http://www.youtube.com/v/[Video-Kürzel]
              Nur dann funktioniert das ganze.
              Mit freundlichen Grüßen
              Jim Martens

              Kommentar


              • #8
                so, ich habe mir jetzt versucht einige Funktionen im Internet nachzulesen.
                Ich würde ihn nicht einfach nur gerne verwenden sondern ihn auch selbst schreiben können.
                nun habe ich bei dem Punkt ein Problem

                PHP-Code:
                preg_match_all('!(\[youtube\]{1}.{1,}\[/youtube\]{1})!' 
                Was bedeuten all diese Zeichen?

                Und du hast ja um manceh Zahlen oder Wörter "{}" rum gemacht . Was bedeutet das wie zum beispiel hier:
                PHP-Code:
                $tmp '
                <object data="{LINK}" style="height: 390px; width: 640px" type="application/x-shockwave-flash">
                <param name="movie" value="{LINK}" />
                <param name="allowFullScreen" value="true" />
                <param name="allowScriptAccess" value="always" />
                <embed src="{LINK}" type="application/x-shockwave-flash" 
                allowfullscreen="true" allowScriptAccess="always" width="640" height="390" />
                </object>'

                Wie dort du {LINK} geschrieben hast. Ich kenne das nicht was bewirkt das?

                danke dir

                Kommentar


                • #9
                  Bei "preg_match_all" ist der erste Parameter ein regulärer Ausdruck. Den hier komplett zu erklären würde ein wenig umfangreich werden.
                  Daher nur eine kurze Einführung:
                  Code:
                  '!(\[youtube\]{1}.{1,}\[/youtube\]{1})!'
                  ! ist nur ein Begrenzer des regulären Ausdrucks; Es könnte auch ein Slash verwendet werden
                  () - zeichnet eine Gruppe von Elementen aus
                  \[ - bedeutet, dass [ escaped wird; Das passiert, weil [ in der RegexEngine für den Beginn einer Klasse steht.
                  \] - dito (] steht für das Ende einer Klasse)
                  {1} - bedeutet, dass (die vorangehende (Klasse/Gruppe)/der vorangehende Platzhalter) nur einmal vorkommen darf
                  . - steht für alles außer einem Zeilenumbruch
                  {1,} - bedeutet, dass (die vorige (Klasse/Gruppe/)/der vorige Platzhalter) mindestens einmal vorkommen muss
                  ' - steht für den Anfang und das Ende eines Strings (äquivalent zu ")

                  {LINK} macht gar nichts. Aber es ist ein Platzhalter für den tatsächlichen Link und später im Code benutze ich die Funktion "str_replace()", um dieses Platzhalter mit dem echten Link zu ersetzen.

                  Aber, der Code ist natürlich nur auf Youtube-BB-Codes beschränkt und das verwendete Template enthält auch nur die minimalen Erfordernisse. In einer Textarea kann man keinen vernünftigen Text schreiben. Außerdem ließe sich das Ergebnis natürlich nicht in einer produktiven Seite verwenden.
                  Dafür wäre eine OOP-basierte Lösung besser, bei der das verarbeitende Skript nach der Grundvalidierung die Eingabe einer BB-Code-Fabrik übergibt, die dann entsprechend der erlaubten BB-Codes die Eingabe nacheinander durch die einzelnen BB-Code-Parser laufen lässt und das Resultat an das verarbeitende Skript zurück gibt.

                  Aber, wie ich schon in vorigen Posts geschrieben habe, das ist keine Ideallösung und das alles gibt es bereits und wahrscheinlich auch besser.
                  Mit freundlichen Grüßen
                  Jim Martens

                  Kommentar


                  • #10
                    Haha, ich habe gerade noch ein paar Fragen gestellt und während ich die geschrieben habe, bin ich durchgestiegen .

                    Jetzt habe ich glaube ich nur noch die Frage:

                    Wo liesst du aus, was zwischen [youtube] [/youtube] liegt?

                    Kommentar


                    • #11
                      Das mache ich in folgendem Abschnitt:
                      PHP-Code:
                       foreach ($matches[0] as $match) {
                                  
                      $link substr($matchstrlen('[youtube]'));
                                  
                      $link substr($link0strlen($link) - strlen('[/youtube]'));
                                  
                      $resultLinks[] = str_replace('{LINK}'$link$tmp);
                              } 
                      Zunächst schneide ich für jede Übereinstimmung mit dem regulären Ausdruck, ein paar Zeilen vorher, die Zeichenfolge "[youtube]" (ohne ") ab. Danach schneide ich "[/youtube]" (ohne ") ab. Zum Schluss ersetze ich {LINK} mit dem eben gewonnenen Link und speichere die Rückgabe in $resultLinks in einem neuen Element.
                      Mit freundlichen Grüßen
                      Jim Martens

                      Kommentar


                      • #12
                        [youtube=http://www.youtube.com/watch?v=Nhg_jmK8Sao]

                        An dem ganzen String ist doch nur die Videokennung Nhg_jmK8Sao interessant. Ich sehe keinen Sinn darin, zigtausendmal "youtube.com/watch" in eine Datenbank zu speichern.

                        Auch der Ausgabecode für das Video
                        <object width="480" height="385"><param name="movie" value=...
                        gehört nicht in die DB. Es ist vollkommen ausreichend, die Video-ID und, wenn man die Infos hat auf das Format (4:3, 16:9 usw) mitzuspeichern.

                        Wenn YT morgen den Zugriffscode für die Darstelung ändert, dann hast du eine Tabelle voll mit Müll.
                        [PHP]if ($var != 0) {
                        $var = 0;
                        }[/PHP]

                        Kommentar


                        • #13
                          Wenn sich das auf meinen Code bezieht, dann ist das OK. Ich habe auch mehrfach gesagt, dass dieser Code lediglich Youtube-BB-Codes erkennt und anschließend durch entsprechende html-tags ersetzt und das Ergebnis ausgibt. Das der Code nicht für eine Speicherung in der Datenbank nützlich ist, sollte eigentlich klar sein.
                          Mit freundlichen Grüßen
                          Jim Martens

                          Kommentar


                          • #14
                            Danke dir
                            So habe es jetzt hingekriegt,habe es noch so bearbeitet, das nur der Link in die Datenbank eingetragen wird und das dann wie in deinem Beispiel $_POST[''bb_youtube], mit der Variable die den Inhalt der Datenbank hat. Nur einen kleinen Fehler habe ich noch endeckt und selber behoben, da du as super erklärt hat. Beim einbetten ist der Video Link nicht mehr
                            PHP-Code:
                            http://www.youtube.com/watch?v=HhpzX3F_qew 
                            sondern
                            PHP-Code:
                            http://www.youtube.com/v/HhpzX3F_qew 
                            Daher klappte das erstmal nicht.

                            Habe in deinem Code jetzt nur noch einen kleine Anweisung hinzugefügt nämlich:

                            PHP-Code:
                                    foreach ($matches[0] as $match) {
                                        
                            $link substr($matchstrlen('[youtube]'));
                                        
                            $link substr($link0strlen($link) - strlen('[/youtube]'));
                                        
                            $link str_replace('watch?v=''v/'$link);
                                        
                            $resultLinks[] = str_replace('{LINK}'$link$tmp);
                                    } 
                            Also das er das
                            PHP-Code:
                            watch?v
                            durch
                            PHP-Code:
                            v
                            ersetzt.
                            Jetzt Funktioniert alles super
                            Danke

                            Kommentar

                            Lädt...
                            X