#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 + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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). + Multi-Zitat Zitieren
#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? + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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 ^^' + Multi-Zitat Zitieren
#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); + Multi-Zitat Zitieren
#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 ); + Multi-Zitat Zitieren
#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]); + Multi-Zitat Zitieren