PHP5: Feldeingabe aufsplitten

  • mal angenommen ein private nachrichten system
    ich hätte gerne die möglichkeit gehabt, ne nachricht an mehrere empfänger zu senden. als trennzeichen würde ich strichpunkt oder beistrich akzeptieren. oder meinetwegen einfach ein leerzeichen. wie erkenne ich das mit php?

    "benutzer1 benutzer2"
    "benutzer1; benutzer2"
    "benutzer1;benutzer2"
    "benutzer1,benutzer2"
    "benutzer1; bentzer2,benutzer3"

    sollten alle erkannt werden

    ich hab das derzeit so, dass ich die eine feldeingabe durch die datenbank grasen lasse. bei einer übereinstimmung krall ich mir die userid vom empfänger und speichere den beitrag mit empfuid in der datenbank. die pm-index seite gibt dann einfach "where empfuid=" aus.

    ich denke mal da wird man ein array nutzen müssen? ich hab die irgendwie nie verstanden öö

    Einmal editiert, zuletzt von freaked (24. Dezember 2014 um 12:54)

  • Mit explode()

    PHP
    $aufgesplittet=explode("trennzeichen",$original);

    Beispielsweise

    PHP
    $aufgesplittet=explode(";",$original);

    Du hast dann in $aufgesplittet ein Array mit den einzelnen Teilen die durch das Trennzeichen getrennt sind.

    Das kannst du noch mit foreach kombinieren und so nach und nach verarbeiten:

    PHP
    echo "<ul>";
    foreach($aufgesplittet as $eintrag)
    {
    	echo "<li>$eintrag</li>";
    }
    echo "</ul>";


    In diesem Beispiel einfach als HTML-Liste ausgegeben.


  • okay. filtert das ding dann aber auch leerzeichen raus?
    sonst würde ja "benutzer1; benutzer2" nur "benutzer1" als richtig anerkennen - "benutzer2" würde als " benutzer2" erkannt werden

    Ich würde dir raten, das Leerzeichen einfach wegzulassen. Der wird halt beim Trennzeichen splitten.


  • okay. filtert das ding dann aber auch leerzeichen raus?
    sonst würde ja "benutzer1; benutzer2" nur "benutzer1" als richtig anerkennen - "benutzer2" würde als " benutzer2" erkannt werden

    Ich würde das so machen:

    PHP
    <?php
         $original = mysql_real_escape_string($_POST['empfaenger']); //Empfange die Empfängerliste aus dem Formular
         $empfaenger = explode(';', str_replace(' ', '', $original)); //Entferne alle Leerzeichen, egal wo im String und trenne in einen Array mit Trennzeichen ";".

    Die Gegenfunktion zu explode() ist übrigens implode(), mit dem die aus einem Array wieder einen String machen kannst, Trennzeichen für die einzelnen Werte wird dann von die festgelegt.

    Einmal editiert, zuletzt von winfreak (24. Dezember 2014 um 13:15)

  • PHP
    $array_ohne_leerzeichen = array_map('trim', explode(';', $str));

    Macht aus dem String "Benutzer 1; Benutzer 2" das Array ["Benutzer 1", "Benutzer 2"].

    (Im Kontrast zu winfreaks Lösung, die ["Benutzer1", Benutzer2"] macht)

    Einmal editiert, zuletzt von gandro (24. Dezember 2014 um 14:42)

  • funktioniert prima. danke leute!

    andere frage: ich nutze seit ewig folgendes für [ quote] [ /quote] und [ quote=xxx]

    PHP
    $text = preg_replace("/\[quote\](.*?)\[\/quote\]/si","<div style=\"padding:4px;vertical-align:middle;text-align:left;width:700px;color:#FFFFFF;background-color:$bgcolor;margin:0px auto;\"><b>Zitat:</b></div><div style=\"padding:4px;vertical-align:middle;background-color:#E7E7E7;text-align:left;width:700px;color:#000000;margin:0px auto;\">\\1</font></div>", $text);
    $text = preg_replace("/\[quote=(.*?)\](.*?)\[\/quote\]/si", "<div style=\"padding:4px;vertical-align:middle;text-align:left;width:700px;color:#FFFFFF;background-color:$bgcolor;margin:0px auto;\"><b>Zitat von \\1:</b></div><div style=\"padding:4px;vertical-align:middle;background-color:#E7E7E7;text-align:left;width:700px;color:#000000;margin:0px auto;\">\\2</font></div>", $text);

    jetzt fällt mir aber zum ersten mal auf, dass wenn es mehrere quotes bei ner weiterleitung gibt
    z.b.

    was sich hier im WHF schön verschachtelt bei mir zu dem problem führt, dass nur das erste [quote ] und das erste [ /quote] erkannt wird. daher nur quote=freaked von nachricht 2 wird umgeändert, jedoch auch nur [ /quote] von nachricht 1..

    also ein failing auf ganzer linie

    hat jemand einen ersatz?

    Einmal editiert, zuletzt von freaked (24. Dezember 2014 um 14:45)

  • gandros Lösung ist definitiv die beste.


  • Leute, ernsthaft?

    Code
    $parts = preg_split('/[\s,;]+/', $input);

    Volles Beispiel:

    Vorraussetzung, dass der Benutzername keine Leerzeichen enthält. Ansonsten eher

    Code
    $parts = array_map('trim', preg_split('/[,;]+/', $input));

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!