[PHP] Fehler beim Losesenden

Eine Leerzeile sind zwei "neue Zeile"-Zeichen hintereinander. Je nach OS sind das \r\n, \r oder nur \n.

PHP:
$text = str_replace("\r\n\r\n", "\r\n", $text); // Windows
$text = str_replace("\n\n", "\n", $text); // Unix
$text = str_replace("\r\r", "\r", $text); // Mac

edit:
Man darf natürlich nur eins dieser Zeichen entfernen.
 
Erstmal Danke für die Antwort.
Das schein soweit zu funktionieren, allerdings löst es mein eigentliches Problem nicht. (Dachte es würde eben daran liegen).

Ich versuchs mal zu erklären.

Also ich kopiere in einFormular KlammID´s aus einem Verschenkthread.
Da sind 5 Zeilen a´5 ID`s.
Danach ne Leerzeile und dann wieder 5 Zeilen a´5 ID`s.
(Die Leerzeilen könnt ich natürlich jetzt entfernen, soll aber automatisch gehen)
Hier mal der Code - Habt mal versucht den etwas zu kommentieren.
PHP:
<?php
$ids = $_POST["ids"];     //Die KlammID`s aus dem Formular
$loseanzahl = $_POST["loseanzahl"]; //Anzahl der Lose die verschenkt wird
$check = str_replace(",",";",$ids);   //Ersetzt ein eventuelles , durch einen ;
$check2 = str_replace("\r\n\r\n", "\r\n", $check);  //Das soll dann die Leerzeilen entfernen
$klammid = explode(";", $check2);   //Das soll alle vorhandenen ID`s in ein Array schreiben
$result = array_unique($klammid);   //Das soll doppelte ID`s aus dem Array entfernen

$user = count($result);   //Zählt wieviele ID`s im Array enthalten sind
$summe = round ($loseanzahl/$user); //Anzahl der Lose die jeder einzelne bekommt (gerundet)

echo "Loseanzahl: ",number_format($loseanzahl, '', '', '.')," Lose <br>";
echo "An ",number_format($user, '', '', '.')," User wurden je ",number_format($summe, '', '', '.')," Lose überwiesen:";
echo"<br><br>";
for($count = 0; $count < $user; $count++)
	{
		echo $result[$count]," ";    //Listet alle ID`s auf
	}
?>


Mein Problem:
Wenn ich im Formular die Leerzeilen entferne, funktioniert das soweit ich bisher gesehen habe, einwandfrei. Auch wenn doppelte ID`s vorhanden sind. Die werden dann eben rausgelöscht.
Steht im Formular aber folgendes:

1;2;1;2;
1;2;1;2;
1;2;1;2;
1;2;1;2;

Also mit den Leerzeilen.
Dann funktioniert das nicht mehr richtig.
Dann bekomm ich als Ergebnis zwar die richtigen KlammID`s angezeigt, aber die Anzahl der User stimmt nicht mehr.
Im obigen Beispiel würde die Ausgabe folgendermassen aussehen:

User: 4
KlammID`s: 1 2

Hoffe ich hab das einigermaßen verständlich ausgedrückt.

Gruss
LK
 
Lass dir mal das Array ausgeben, für das es nicht funktioniert:
PHP:
/* 8 */ print_r($result);
Und btw. verwende doch nicht für jeden Sch*** ne neue Variable, das verwirrt nur. Du kannst ruhig sowas da schreiben:
PHP:
$ids = ...($ids);
 
Mit dem print_r($result); bekomm nun folgendes:

Array ( [0] => 1 [1] => 2 [4] => 1 [16] => )
nehm ich nach der letzten 2 den ; weg, dann siehts so aus:
Array ( [0] => 1 [1] => 2 [4] => 1 )

Wo kommt denn die jeweils letzte ID her?

*edit*
Schreib ich die obigen 16 ID`s in eine Reihe und entferne den letzten ;
funktioniert das einwandfrei.

Array ( [0] => 1 [1] => 2 )

Das mit den Variablen ist für mich irgendwie übersichtlicher als diese zu verschachteln. Das dient nur zu meinem besseren Verständnis.
 
Zuletzt bearbeitet:
Jupp, das wollte ich grade sagen.
Du willst keine Leerzeilen entfernen, sondern wirklich alle Zeilenumbrüche, also
PHP:
$check2 = str_replace("\r\n\r\n", "", $check);
 
dann sind es wieder Leerzeilen, also:
PHP:
$check2 = str_replace("\r\n", "", $check);

Danke, habs eben auch selbst rausgefunden.
Ich hatte das anfangs mal so, allerdings ohne dem \r .
Jetzt funktioniert das mal, muss nurnoch den letzten ; automatisch wegbekommen dann läuft das einwandfrei.

Danke für die schnelle Hilfe
 
Öhrm:
PHP:
$ids = array_unique(array_filter(array_map('trim', explode(';', str_replace(array("\n", "\r"), ';', $input)))));
Und da ich weiss, dass nicht alle Einzeiler so sehr lieben wie ich:
  1. Ersetze alle Zeilenumbruchszeichen durch Semikolons.
  2. Splitte den entstandenen String anhand der Semikolons auf.
  3. Entferne alle Leerzeichen aus jedem Eintrag des Arrays.
  4. Entferne alle so entstanden (oder eh schon vorhandenen) leeren Einträge.
  5. Und letztendlich gib mir jeden Eintrag nur einmal zurück.
Et voila. :ugly:

Umgeht btw auch das Problem mit dem letzten Semikolon.
 
Also wenn ich mir die Codezeile so ansehe...:roll:
Da bleib ich lieber bei meinen einzelnen Variablen:ugly:
Ich glaub ich lern das nie richtig.:mrgreen:

Hab das mit dem Semikolon übrigens schon.
Funktioniert jetzt einwandfrei.

Gruss
LK
 
Nochmals Hallo!

Hab jetzt noch ein kleines Problemchen.

Also kurz nochmal zur Erklärung:
Ich geb über ein Formular die KlammID´s, die Anzahl der Lose und den Betreff ein. Danach werden die Lose an die User verteilt.
Funktioniert bereits auch soweit.

Problem:
Verwende ich im Betreff ein Leerzeichen, meldet der EF einen unbekannten Fehler.
Ist das normal?

Thx schonmal für Eure Hilfe.

LiveKeeper