Explode im Foreach

06/21/2014 01:57 league-factory#1
Hi,
habe leider wieder ein Problem bei meiner zukünftigen Webseite.
Ich möchte eine Userliste die zeilenweise im Format (user:pw) aus einer Textarea an PHP übergeben und schließlich zeilenweise auslesen.

Hier mein PHP Code:

Code:
<?php
if (isset ($_POST['accountData'])) {
	//Die Textarea nach jeder Zeile trennen und in einem Arrayfeld speichern
	$msg = explode( "\r\n", $_POST['accountData'] );
	foreach( $msg as $data )
		list($user, $pass) = explode(":", $data);
		echo "User: $user , Passwort: $pass <br>";
	}
?>
Problem ist, dass immer nur der letzte Datensatz der Textarea ausgegeben wird. Wo liegt mein Fehler ?

Danke im voraus!
06/21/2014 02:27 マルコ#2
Bist du dir bei dem Trennzeichen sicher? Schau dir deine Liste mal mit nem Hex Editor an.
06/21/2014 02:38 league-factory#3
Quote:
Originally Posted by マルコ View Post
Bist du dir bei dem Trennzeichen sicher? Schau dir deine Liste mal mit nem Hex Editor an.
Meinst du den Doppelpunkt oder den Zeilenumbruch? Die zwei Wörter sind definitiv durch einen Doppelpunkt getrennt.

Ich habe vorher mal die Zeilenweise Ausgabe getestet und das hat geklappt. Also ich konnte mit folgendem Code in jeder Zeile "user:passwort" der jeweiligen Zeile ausgeben.

Code:
<?php
if (isset ($_POST['accountData'])) {
	$msg = explode( "\r\n", $_POST['accountData'] );
	foreach( $msg as $data )			
		echo "$data <br>";
}
?>
06/21/2014 13:44 マルコ#4
Ich mein schon den Zeilenumbruch. Darüber gehts doch in dem Thread, oder?
06/21/2014 14:34 league-factory#5
Der funktioniert aufjedenfall. Siehe mein Post darüber, die zeilenweise Ausgabe bekomme ich hin. Hier nochmal zur Verdeutlichung. Die Eingabe sieht z.b. so aus:

Username1:Passwort1
Username2:Passwort2
Username3:Passwort3
Username4:Passwort4

Ich möchte nun jeden User mit seinem entsprechenden Passwort in eine MySQL DB speichern, beziehungsweise zum Testen erstmal per echo einzeln ausgeben können.
06/22/2014 14:42 league-factory#6
Push - Problem besteht immernoch! :(
06/22/2014 16:09 Thr!ce#7
Führe das mal aus:

PHP Code:
<form method="POST">
    <textarea name="accountData"></textarea>
    <input type="submit"></input>
</form>

<?php
if (isset ($_POST['accountData'])) {
    
$msg explode"\r\n"$_POST['accountData'] );

    
print_r($msg);

    echo 
"<h4>Original</h4>";

    foreach( 
$msg as $data )
        list(
$user$pass) = explode(":"$data);
        echo 
"User: $user , Passwort: $pass <br>";
    }
?>
<hr>

<?php
if (isset ($_POST['accountData'])) 
{
    
$data $_POST['accountData'];
    
preg_match_all("/[\w]+:[\w]+/"$data$matches);

    
print_r($matches[0]);

    echo 
"<h4>Method1</h4>";
    foreach(
$matches[0] as $data) {
        list(
$user$pass) = explode(":"$data);
        echo 
"User: $user , Passwort: $pass <br>";
    }
}
?>
<hr>

<?php
if (isset ($_POST['accountData'])) 
{
    
$msg explode("\r\n"$_POST['accountData']);

    
print_r($msg);

    echo 
"<h4>Method2</h4>";
    for(
$i 0$i sizeof($msg); $i++) {
        list(
$user$pass) = explode(":"$msg[$i]);
        echo 
"User: $user , Passwort: $pass <br>";
    }
}
?>
Bei allen 3 Methoden ist der Array exakt gleich. Verwundert deswegen natürlich warum deine Variante nicht funktioniert.
06/22/2014 16:13 league-factory#8
Perfekt! Beide Methoden haben funktioniert, das Original allerdings nicht. Wo liegt der Fehler ??

Danke aufjedenfall schon einmal!!