Variabelnübergabe Fehler

redX

Erfahrenes Mitglied
Ich könnte mir die Haare ausreisen. Wieso in Gottes namen geht folgendes nicht:

PHP:
			while (($file = readdir ($verz))) {
				$result = mysql_query("SELECT title FROM program WHERE file = '" . $file . "'");
				if($file != "." && $file != ".." && mysql_num_rows($result) == 0 && $counter < 21) {
					echo "
							<tr>
								<td> " . $counter . ".)</td><td>Filename: <input type='text' name='p_filename[".$counter."]' value='" . $file . "' size='35' readonly></td>
								<td>Title: <input type='text' name='p_title[".$counter."]' value='".$file."' size='35'></td>
								<td>Game: <input type='checkbox' name='p_game[".$counter."]' value=\"y\"></td>
								<td>Comment: <input type='text' name='p_comment[".$counter."]' size='20'></td>
							</tr>
					";
					$counter ++;
				}
				$anz_files++;
			}

Das zeigt mal alle 20 Files aus einem Folder an. Die Inputfelder sollen als Array weitergegeben werden.

Dann kommt die Auswertung:

PHP:
			for ($counter = 1;isset($p_filename[$counter]);$counter++){
						if ($p_game[$counter] == "")
							$isgame = "n";
						else
							$isgame = "y";
						echo "<nobr>" . $p_filename[$counter] . " ->" . $p_game[$counter] . "<->" .$isgame . "<->" . $p_comment[$counter] . "<-<nobr><br>";
			}

Alle Daten kommen ohne Problem an. Also werden auch angezeigt. Bis auf die Variable $p_game[]. Muss irgend ein Flüchtigkeitsfehler sein. Sieht ihn jemand?

MFG
redX
 
Hi!

also die Variable der Checkbox wird nur ankommen, wenn diese "gechecked" ist.
lässt sich mit

PHP:
if(isset($_POST['p_game'])){
   //... tu etwas
}

am besten prüfen.

weiterhin brauchst du die namen nicht mit definierten Array-Keys vergeben.

Also nicht:

PHP:
<td>Title: <input type='text' name='p_title[".$counter."]' value='".$file."' size='35'></td>

sondern:

PHP:
<td>Title: <input type='text' name='p_title[]' value='".$file."' size='35'></td>

(Die Key werden hierbei automatisch vergeben)

Du kannst dann die Post-Vars sehr einfach fetchen:

PHP:
foreach($_POST['p_title'] AS $_key => $_value){
    echo $_key ." => ". $_value ."<br>";
}

MfG Sebastian
 
Das PHP bei <td>Title: <input type='text' name='p_title[]' value='".$file."' size='35'></td> den Arraykey selber handelt wusste ich nicht.

Wie funktioniert das mit der foreach wenn ich mehrere Arrays habe. Dann brauche ich ja trotzdem wieder ne Countervariable. Oder sehe ich was falsch?

Hmpf.. wenn ich folgendermassen $_POST['p_game'][$counter] auf p_game zugreife funktioniert es. Wenn ich aber $p_game[$counter] mache geht es nicht. Wieso das? Bei den anderen Variabeln geht das doch auch..

MFG
redX
 
Hmpf.. wenn ich folgendermassen $_POST['p_game'][$counter] auf p_game zugreife funktioniert es. Wenn ich aber $p_game[$counter] mache geht es nicht. Wieso das? Bei den anderen Variabeln geht das doch auch..

ist mir in deinem Code gar nicht aufgefallen ^^
nein, dass wird nicht gehen. $p_game wurde zuvor nicht definiert.
$_POST ist eine Server-Variable, in der alle Daten, welche per POST übertragen wurden vorhanden sind.

du kannst es aber auch so machen:

PHP:
$p_game = (isset($_POST['p_game']) AND !empty($_POST['p_game'])) ? $_POST['p_game'] : null;

$p_filename = (isset($_POST['p_filename']) AND !empty($_POST['p_filename'])) ?  $_POST['p_filename'] : null;

    if(!empty($p_game)){
        foreach($p_game AS $_key => $_value){
            echo "p_game[$k_key] = $_value";
        }
    }

     if(!empty($p_filename)){
        foreach($p_filename AS $_key => $_value){
            echo "p_filename[$k_key] = $_value";
        }
    }

foreach durchläuft ein Array automatisch, und zwar nur solange, bis alle Elemente durchlaufen wurden.

mfg sebastian
 
Zurück