ich hexe hier immer noch an einem Problem.
Ausgangspunkt ist eine Datei:
auto:123,567,8910,
bus:222,444,444,
Nun m�chte ich die Zahlen der gew�hlten Gruppe ausgeben, doch es wird immer
noch eine der Leere String ausgegeben, obwohl ich das eigentlich abfangen
will...
$gruppen = file($datei);
$gewaehlteGruppen = $_POST['empfaenger'];
echo "<table>";
foreach($gruppen as $gruppe){
$parts = explode(':', $gruppe, 2);
if($parts[0]==$gewaehlteGruppen){
//echo "In der If Abfrage";
echo "$parts[1]";
$parts[1] = trim($parts[1]);
$einzelnummer = explode (',',$parts[1]);
var_dump($einzelnummer);
foreach($einzelnummer as $i){
if(isset($i)==true){
echo "IF_'$i'<br/>";
echo "<tr><td>$i</td><td>L�schen</td></tr>";
}
}
}
}
echo "</table>";Aber irgendwie wird immer noch das leere Feld ausgegeben...
Stefan
> Nun möchte ich die Zahlen der gewählten Gruppe ausgeben, doch es wird
> immer noch eine der Leere String ausgegeben, obwohl ich das eigentlich
> abfangen will...
Ich kann nur raten was Du eigentlich meinst.
> foreach($einzelnummer as $i){
> if(isset($i)==true){
^^^^^^^^^^^^^^^
Das ist in diesem Szenario nur dann false wenn $i mit NULL belegt ist. Ich
vermute eher Du willst ! empty($i) statt isset($i).
Gewöhn' Dir mal andere Bezeichner an. Du mischt Englisch mit Deutsch. $i ist
in der Regel ein Zähler beim Iterieren. Und Ausgabe mit Logik zu mischen war
selten eine gute Idee. Und dann gibt's noch den hier:
Halte Code links. Verwende Wächter statt Schachtel-if
http://www.php-faq.de/q-stil-waechter.html
--
<http://bav.malkusch.de/de/> - Mit PHP Kontonummern auf Gültigkeit prüfen
<http://php-autoloader.malkusch.de/de/> - PHP Autoload Implementierung
> Ausgangspunkt ist eine Datei:
>
> auto:123,567,8910,
> bus:222,444,444,
>
> Nun möchte ich die Zahlen der gewählten Gruppe ausgeben, doch es wird
> immer noch eine der Leere String ausgegeben, obwohl ich das eigentlich
> abfangen will...
>
> $gruppen = file($datei);
Die Zeile Weglassen. Der Dateiinhalt graucht keine Variable
> $gewaehlteGruppen = $_POST['empfaenger']; echo "<table>";
Hier prüfst Du nicht ob $_POST['empfaenger'] überhaupt gesetzt ist und
handelst Dir damit, streng genommen Code ein der Fehler enthält
$gewaehlteGruppen = isset($_POST['empfaenger'])
? $_POST['empfaenger'] : array();
Wobei ich annehme das $_POST['empfaenger'] ein array ist, da Du ja hier
die Mehrzahl im Namen nutzt.
> foreach($gruppen as $gruppe){
foreach(file($datei) as $datensatz) {
> $parts = explode(':', $gruppe, 2);
list ($gruppenname, $gruppendaten) =
explode(':', $datensatz, 2);
> if($parts[0]==$gewaehlteGruppen){
Wieso vergleichst Du hier eine Zeichenkette mit einem Array? Wenn
$gewaehlteGruppen kein Array ist so enthält es ja maximal mehrere Gruppen
(namen?) die man dan auch nicht mit einem einzelnen in der Form
vergleichen kann.
Bei einem Array so:
if (in_array($gruppenname, $gewaehlteGruppen)) {
Bei einer Zeichenkette in etwa so, wobei es hier drauf ankommt wie die
aufgebaut ist (ggf anpassen):
if (preg_match('~(?<=\A|[,;\s])' . preg_quote($gruppenname,'~') .
'(?=\Z|[,;\s])'))
> echo "$parts[1]";
Das erbibt als Output '<table>123,567,8910,' usw. Das ist kein gültiges
HTML!
> $parts[1] = trim($parts[1]);
> $einzelnummer = explode (',',$parts[1]);
$gruppennummern = explode(
',',
rtrim(
rtrim($gruppendaten, "\r\n\t \0"),
','
)
);
> foreach($einzelnummer as $i){
$i wird eigentlich immer als Index genutzt, Die Namensvergabe ist
irritierend
foreach($gruppennummern as $gruppennummer){
> if(isset($i)==true){
Für was soll diese Prüfung gut sein? (Mal abgesehen von überflüssigen
Code in der Bedingung)
> echo "IF_'$i'<br/>";
> echo "<tr><td>$i</td><td>Löschen</td></
Alles in Aem ergibt das kein gültiges Html!
MfG + Frohes Fest, Ulf
--
Jeder ist ein Mond, denn jeder hat seine dunkle Seite.
[Mark Twain]
"Ulf [Kado] Kadner" <dr_l...@gmx.net> schrieb im Newsbeitrag
news:hh00dm$54v$02$1...@news.t-online.com...
>
> Wobei ich annehme das $_POST['empfaenger'] ein array ist, da Du ja hier
> die Mehrzahl im Namen nutzt.
>
Hier wird nur ein String aus einem vorherigen Formular übergeben, welcher
der Nutzer nur auswählen kann,
>> if($parts[0]==$gewaehlteGruppen){
>
> Wieso vergleichst Du hier eine Zeichenkette mit einem Array? Wenn
> $gewaehlteGruppen kein Array ist so enthält es ja maximal mehrere Gruppen
> (namen?) die man dan auch nicht mit einem einzelnen in der Form
> vergleichen kann.
Ich möchte auf der Seite nur die Nummern angeben, die zu der Gruppe gehören,
welche auch in dem POST übergeben wurde.
>
> if (preg_match('~(?<=\A|[,;\s])' . preg_quote($gruppenname,'~') .
> '(?=\Z|[,;\s])'))
>
Das verstehe ich nicht so ganz. Ich durchsuche jetzt die $gruppenname auf
was?
Müsste es nicht so sein: if (preg_match($gewaehlteGruppen,$gruppenname)),
aber dort erhalte ich Warning: preg_match() [function.preg-match]: Delimiter
must not be alphanumeric or backslash
Bisher sehe ich das so:
if($_POST['editieren_gruppe']=="Gruppe editieren"){
//echo "Editor starten";
//Gruppendatei
$datei = "lists/.".$gruppe; //Gruppendatei
$gewaehlteGruppen = $_POST['empfaenger']; //Die Gruppe von der die Nummern
angezeigt werden sollen
echo "<table>";
foreach(file($datei) as $datensatz){
list ($gruppenname, $gruppendaten) = explode(':', $datensatz, 2); //Teilen
der Daten nach Gruppenname und den Nummern
if (preg_match($gewaehlteGruppen,$gruppenname)){ //Überprüfen, ob nun die
gewünschte Gruppe dran ist
$gruppennummern = explode(',',rtrim(rtrim($gruppendaten, "\r\n\t
\0"),',')); //Zeilenwechsellöschen, Nummern teilen
foreach($gruppennummern as $gruppennummer){ //Nummern auflisten
echo "IF_'$i'<br/>"; //Nur zu Testzwecken
echo "<tr><td>$gruppennummer</td><td>Löschen</td></tr>"; //Ausgaben der
Nummern
}
}
}
echo "</table>";}
Stefan
> "Ulf [Kado] Kadner" <dr_l...@gmx.net> schrieb:
>> Wobei ich annehme das $_POST['empfaenger'] ein array ist, da Du ja hier
>> die Mehrzahl im Namen nutzt.
>>
> Hier wird nur ein String aus einem vorherigen Formular übergeben,
> welcher der Nutzer nur auswählen kann,
Dann ist der Name der Variable falsch. Sihst ja selbst wie irritierend
das ist. also besser $gewaehlteGruppe (Einzahl)
> Ich möchte auf der Seite nur die Nummern angeben, die zu der Gruppe
> gehören, welche auch in dem POST übergeben wurde.
Ausgeben meinst Du. OK
>> if (preg_match('~(?<=\A|[,;\s])' . preg_quote($gruppenname,'~') .
>> '(?=\Z|[,;\s])'))
>>
>>
> Das verstehe ich nicht so ganz. Ich durchsuche jetzt die $gruppenname
> auf was?
Nein. Sowas (Fehlerhaftes + Unvollständiges) kommt zustande wenn man
alles im Newsclient schreibt und kein Syntax-Highlighting nutzt (Meinen
Code meine ich damit). Aber mal abgesehen davon brauchst Du das ja nicht
da $gewaehlteGruppe ja nur ein element enthält
>
> Müsste es nicht so sein: if
> (preg_match($gewaehlteGruppen,$gruppenname))
Nein. Der erste Parameter wird als regulärer Ausdruck erwartet, aber das
ist ja jetzt nicht mehr von relevanz.
> Bisher sehe ich das so:
>
> if($_POST['editieren_gruppe']=="Gruppe editieren"){ //echo "Editor
if (isset($_POST['editieren_gruppe']) &&
'Gruppe editieren' == $_POST['editieren_gruppe'])
> //Gruppendatei
> $datei = "lists/.".$gruppe;
Es ist generell keine so gute Idee mit relaviven Pfad zu arbeiten, Diese
setzen immer voraus das ein bestimmtest Verzeichnis als
Arbeitsverzeichnis gesetzt ist. In manchen (einigen) Situation kann man
das aber nur garantieren wenn man die vprher prüft. Daher ist es immer
anzuraten mit absoluten Pfaden zu arbeiten. Es spart einen u.U. Sucherei.
z.B.:
$datei = dirname(__FILE__) . '/lists/.' . $gruppe;
Aber wo kommt $gruppe her? Im bisherigen Code wurde diese Variable nicht
definiert!
> //Gruppendatei
> $gewaehlteGruppen = $_POST['empfaenger'];
$gewaehlteGruppe = $_POST['empfaenger'];
> echo "<table>";
> foreach(file($datei) as $datensatz){
> list ($gruppenname, $gruppendaten) = explode(':', $datensatz, 2);
> //Teilen
> der Daten nach Gruppenname und den Nummern
> if (preg_match($gewaehlteGruppen,$gruppenname)){ //Überprüfen,
Nein. da Du jetzt geklärt hast das in $gewaehlteGruppe nur ein Wert drin
steht nicht so sondern:
if ($gruppenname == $gewaehlteGruppe)
> $gruppennummern = explode(
> ',',
> rtrim(rtrim($gruppendaten, "\r\n\t \0"),',')
> );
OK
> foreach($gruppennummern as $gruppennummer){ //
Nummern auflisten
> echo "IF_'$i'<br/>"; //Nur zu Testzwecken
echo
> "<tr><td>$gruppennummer</td><td>Löschen</
td></tr>"; //Ausgaben der
> Nummern
> }
if (count($gruppennummern) > 0) echo
'<tr><td>',
join('</td><td>Löschen</td></tr><tr><td>',gruppennummern),
'</td><td>Löschen</td></tr>';
Aber besser gleich mit einer Templateengine arbeiten damit nicht Markup
und Code so wild verwürfelt werden.
MfG, Ulf
--
Ich fragte die Zecke warum hatse es abgesehen auf diese Katze.
Sie sprach: Das war nur ein Vehikel um bei dir zu sein als
temporärer Pickel . Dir bin gerne gänzlich nah wegen deiner
schönen DNA! [K. Lauer in d.r.t.k]
Bei jedem Eintrag ein Formular oder ein Link mit Zusatzvariablen?
Stefan