[PHP] einzelen Zeile aus Textarea in mysql

Dieses Thema im Forum "Webentwicklung" wurde erstellt von ronny130286, 22. Dezember 2009 .

Schlagworte:
  1. 22. Dezember 2009
    einzelen Zeile aus Textarea in mysql

    Hi

    ich wollte eine eingabe Maske programmieren die wie folgt aufgebaut ist:

    der User kann Links über eine Textarea eingeben die wird in einer Mysqlspalte gespeichert, nun ist das Problem wenn der User unnutze Leerzeichen oder Zeilenumbrüche einfügt => bekomme ich bei der explode Methode zuviel Arrays da ich auch die Leerzeichen als Array angezeigt bekommt. Nach dem explode läuft das ganze durch einen for schleife für die ausgabe.

    jetzt hatte ich versucht das er beim speichern über einen preg_replace den zusammenhängen http:// pfad selectiert und nach jedem link ein \n (also Zeilenumbruch einfügt) damit ich anschließen mit der explode methode die array bekomme => das ganze funktioniert nur leider nicht
    Beispiel:
    Code:
    Eingabe:
    http://www.google.de/test.jpg http://www.google.de/test1.jpg 
    
    http://www.google.de/test3.jpg 
    
    Code:
    Ausgabe:
    http://www.google.de/test.jpg
    http://www.google.de/test1.jpg
    http://www.google.de/test3.jpg 
    
    kann mir jemand weiterhelfen?

    achso das ganze muss auch noch funktioieren wenn ich diese eingabe editieren möchte über ein sperates forumlar
     
  2. 22. Dezember 2009
    AW: einzelen Zeile aus Textarea in mysql

    prinzpielle frage, wie willst du alle erdenklichen eingaben abfangen?

    z.b.
    der user gibt ein variante1:
    Code:
    http://www.google.de/test.jpg
    http://www.google.de/test1.jpg
    http://www.google.de/test3.jpg
    
    der user gibt ein variante2:
    Code:
    http://www.google.de/test.jpg, http://www.google.de/test1.jpg, http://www.google.de/test3.jpg
    
    der user gibt ein variante3:
    Code:
    http://www.google.de/test.jpg|http://www.google.de/test1.jpg|http://www.google.de/test3.jpg
    
    der user gibt ein variante4:
    Code:
    http://www.google.de/test.jpg http://www.google.de/test1.jpg http://www.google.de/test3.jpg
    
    der user gibt ein varianteXXX:
    Code:
    und was man sonst so eingeben kann
    
    das ist keine gute lösung.
    vorschlag, wie wäre ein normaler input type text?
    mit js kannst du dem user die möglichkeit geben mehrer inputs anzulegen.
    dann brauchst du nur noch kontrollieren, ob das eine richtigt url ist usw.
    in zeilen für dein mysql eintrag zu schreibe ist dann auch keine kunst mehr.
     
  3. 22. Dezember 2009
    AW: einzelen Zeile aus Textarea in mysql

    preg_replace_callback könnte dir helfen, ich arbeite oft bei solchen Problemen damit.

    PHP:
    $links  = array();
    function 
    getLinks ( $found ) {
      global 
    $links ;
      
    $links [] =  $found [ 1 ];
    }
    preg_replace_callback ( "/((([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?)/" "getLinks" $textarea );
    Was für einen regulären Ausdruck benutzt du für URLs? Wenn du mein Beispiel benutzt, achte darauf, dass der gesamte Link nachher 1. Fundstück ist, sonst muss man die Funktion anpassen.

    EDIT// Habe hier einen regulären Ausdruck für URLs gefunden, damit funktioniert das Beispiel einwandfrei (auch mit Subdomains).
     
  4. 22. Dezember 2009
    AW: einzelen Zeile aus Textarea in mysql

    @onip

    also mir als schon im vorhinein klar das es zich varianten gibt wie man die links eingeben kann, ich wollte eigentlich nur die varianten ausschließen die in meinen augen häufig vorkommen, wie da wäre
    1.doppelte oder mehrer leerzeichen
    2.doppelte oder meherer Zeilenumbrüche

    mehr wollte ich eigentlich nicht betrachten als varianten


    @powernator
    ich werde mal mir die funktion angucken die du im edit gepostet hast, vielleicht kommen ich damit auch hin

    EDIT// Also die variante im link schein irgendwie nur solange zu funktioieren solange ich nur einen link eingebe

    kann man das nicht so lösen das ich die textarea durchsuchen lasse und er lediglich links speichert ohne leerzeichen und zeilenumbrüche, weil eine link ist ja im web immer ohne leerzeichen => dann dürfte er mir ja wenn ich nach einer zusammenhängenden zeichenkette nach dem http:// suche auch nur den link ausgeben oder?
     
  5. 23. Dezember 2009
    AW: einzelen Zeile aus Textarea in mysql

    vergiss den schmarrn von powernator ^^ (sorry, aber auf was passt der regexp denn alles? schwachsinnig :lol //google.de is für mich kein link ...

    das hast was leichteres + von mir getestet:

    PHP:
    <? php
    $linkPattern 
    'https?://(?:[a-z_0-9\x7f-\xff]+\.)+[a-z\x7f-\xff]{2,}(?:/[a-z_0-9\-&=%\+\?\./]+(?:#[a-z\x7f-\xff_][a-z\x7f-\xff0-9_])?)?' ;

    $input  'http://google.de bla bla http://google.de/test1234 http://google.de/test.jpg kein link, auch keiner http://google.de/asdf' ;
    $match  = array();
    preg_match_all ( '~('  $linkPattern  ')~i' $input $match );

    print_r ( $match [ 1 ]);
    "\x7f-\xff" sind umlaute, ich hab diese auch in der domain-endung erlaubt, weil man ja irgendwann auch eigene tld's erstellen kann (mit nachnamen der familie zb)

    @powernator: hier hast nen regex der auf die gängigsten url's passt
    Code:
    /[a-z\-\.0-9_\+]+:\/\/(?:\w+(?::\w+)?@)?(?:[a-z_0-9\x7f-\xff_\-]+\.)+[a-z\x7f-\xff]{2,}(?::[0-9]+)?(?:\/(?:[a-z_0-9\-&=%\+\?\.\/]+)?(?:#[a-z\x7f-\xff_][a-z\x7f-\xff0-9_])?)?/i
     scheme login host port file,path,query anker
    man kann natürlich nen schritt weiter gehen und exakt nach rfc-3986 nen regex baun, aber das is viel zu komplex (allein wegen ipv6).

    in meinem regex validiere auch auch ned domain|ip... und irgendwann wird der regex zu lang, das hat ich auch schon
     
  6. 23. Dezember 2009
    AW: einzelen Zeile aus Textarea in mysql

    Ok, Danke

    Hatte gerade keinen passenden Ausdruck für URLs parat und einfach über Google nach einem passenden gesucht

    Muss auch zugeben, dass preg_match_all die elegantere Lösung ist ^^'
     
  7. 23. Dezember 2009
    AW: einzelen Zeile aus Textarea in mysql

    also das ganz schein erstmal zu funktionieren

    er holt echt mur vorhandene links aus der textarea und speichert das ganze in einem array

    nun ist nur komisch was wenn ich mir das array via schleife ausgeben lassen will damit er den links als text in der mysql spalte ablegen kann (und ich och einen trenner einbaue) => ich habe jetzt eine foreach genommen und das ganze in eine variable gelegt nun zeig er mir alle richtig an aber komischer weise nur max 2 links auch wenn ich zb 10 habe

    Code:
    $linkPattern = 'https?://(?:[a-z_0-9\x7f-\xff]+\.)+[a-z\x7f-\xff]{2,}(?:/[a-z_0-9\-&=%\+\?\./]+(?:#[a-z\x7f-\xff_][a-z\x7f-\xff0-9_])?)?';
     $bilder = array();
     preg_match_all('~(' . $linkPattern . ')~i', $_POST['bilder'], $bilder);
     $i=0;
     foreach ($bilder as $wert){
     $bild.=$wert[$i];
     $bild.=";\n";
     $i++;
     }
     print_r($bild);
    
     
  8. 23. Dezember 2009
    AW: einzelen Zeile aus Textarea in mysql

    Benutz doch implode, ist für so etwas entwickelt worden

    PHP:
    $linkPattern  'https?://(?:[a-z_0-9\x7f-\xff]+\.)+[a-z\x7f-\xff]{2,}(?:/[a-z_0-9\-&=%\+\?\./]+(?:#[a-z\x7f-\xff_][a-z\x7f-\xff0-9_])?)?' ;
    preg_match_all ( '~('  $linkPattern  ')~i' $_POST [ 'bilder' ],  $bilder );
    $bilder  implode ( ";" $bilder );
     
  9. 23. Dezember 2009
    AW: einzelen Zeile aus Textarea in mysql

    ja okay oder über das implode nur bekomme ich ja dort wieder über das print($bild) angezeigt Array

    das würde ja heisen wenn ich jetzt die variabel $bild in eine mysql splate speichere, würde dann ja Array eingetragen werden und nicht der "klartext"(die links) die im array gespeichert sind


    => ich glaube irgendwie stehe ich gerade auf dem schlauch


    aaaa okay ich glaube ich habe es, muss so aussehen
    Code:
    $bilder = implode(";", $bilder[1]);
    
     
  10. 23. Dezember 2009
    AW: einzelen Zeile aus Textarea in mysql

    stimmt ^^
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.