Foreach für mehrere Arrays oder Alternative?

Nikke123

Mitglied
Hallo Leute,

Ich will zwei Arrays abfragen, die aber von einander abhängen. In einem Array steht an einer Stelle der Name für etwas und in dem anderen Array an der selben Stelle ein Wert zu dem Namen. Jetzt möchte ich die beiden Arrays in der selben Reihenfolge abfragen, da ich den Namen nur anzeigen lassen will, wenn ein entsprechender Wert dazu vorliegt. Ich kenne die Anzahl der Werte in den Arrays durch eine MYSQL Abfrage. Es sieht momentan so aus:
PHP:
		<?php
		include "../scripts/mysql.php";
		$sql = "SELECT * FROM blumen";
		$query = mysql_query($sql);
		$anzahl = mysql_num_rows($query);
		$z = 0;
		$array_name = $_POST["name"];
		$array_menge = $_POST["anzahl"];	
		for($i = 0; $i <= $anzahl; $i++){
			if($array_menge[$i] != 0){
				echo "".$array_name[$i]."<br>";
				echo "".$array_menge[$i]."<br>";
			}
		}
		?>

Leider kommt der folgende Fehler
Notice: Undefined offset: 1 in C:\xampp\htdocs\shopsys\order\schritt3.php on line 24

Was kann ich tun?
Danke schonmal im Vorraus
MFG
NIklas
 
Hi NIklas,

wie es scheint, ist dein PHP-Code nicht komplett? Deine gepostetes Script hat keine 24 Zeilen. Ich gehe aber davon aus, dass
Code:
if($array_menge[$i] != 0){
die 24. Zeile ist.
Dein "Fehler" ist in Wirklichkeit keiner. Es ist lediglich eine (in dem Fall unwichtige) Information, die PHP generiert, wenn es auf zu Sensible eingestellt ist :-)
Du kannst diese Informationen (Die keine Fehler sind) einfach mit folgendem ausblenden :
Code:
@ini_set('error_reporting', E_ALL & ~E_NOTICE);
 
Nun, wie sieht denn der Inhalt von "$_POST["anzahl"];" und "$_POST["name"];" aus ?
Du greifst ja auf `$array_menge[$i]` zu, das Du davor mit `$array_menge = $_POST["anzahl"];` zugewiesen hast. Wie es also scheint, ist `$_POST["anzahl"]` kein Array.
 
Also eigentlich ist das eher ein PHP-Problem.

Man müsste mal das Script sehen mit dem Formular zu deinen Hidden-Fields und wie sie befüllt werden.

PHP:
        $array_name = $_POST["name"];
        $array_menge = $_POST["anzahl"];
Irgendwie glaube ich das $_POST["name"] und $_POST["anzahl"] Arrays beinhaltet sonst würde deine Schleife nicht wirklich Sinn machen. Überhaupt ist mir nicht wirklich klar was du machen willst.
 
Zuletzt bearbeitet:
Okay dann hier mal die vollständigen Skripte. Erst die erste Seite, auf der die Input Felder sind:
PHP:
<html>
	<head>
		<title> Blumen - Shop </title>
		<link rel="stylesheet" type="text/css" href="../style/main.css">
		<script type="text/javascript">
		<?php
		$kastenname = $_POST['kastenname'];
		$kastengroeße = $_POST['kastengroeße'];
		echo "
		var check = ".$kastengroeße.";
		";
		?>
		var k = 0;
		function minus(id, size, postid){
		var anzahlDiv = document.getElementById(id);
		var anzahl =parseInt(anzahlDiv.innerHTML);
		anzahl -= 1;
		if(anzahl <= 0){
		anzahl = 0;
		k = 0;
		} else{
		k -= size;
		}
		anzahlDiv.innerHTML = anzahl;
		document.getElementById("fortschritt").style.width = k;
		var postidnowunparsed = document.getElementById(postid);
		var postidnow =parseInt(postidnowunparsed.innerHTML);
		var postidthen = postidnow - 1;
		document.getElementById(postid).value = postidthen;
		}
 
		function plus(id, size, postid){
		var anzahlDiv = document.getElementById(id);
		var anzahl = parseInt(anzahlDiv.innerHTML);
		anzahl += 1;
		anzahlDiv.innerHTML = anzahl;
		k += size;
		document.getElementById("fortschritt").style.width = k;
		if(k == check){
			alert("Der Kasten ist voll");
		} else if(k > check){
			alert("Der Kasten ist zu voll");
		}
		var postidnowunparsed = document.getElementById(postid);
		var postidnow =parseInt(postidnowunparsed.innerHTML);
		var postidthen = postidnow + 1;
		document.getElementById(postid).value = postidthen;
		}
		</script>
	</head>
	<body>
		<div id="content">
		<h2> Schritt 2: Die Blumen </h2>
		<p> Hier können sie sich die ganzen im Shop vorhandenen Blumen ansehen und auswählen, um sie in ihren zuvor gewählten Blumenkasten
		    pflanzen zu lassen. Beachte sie, dass die Pflanzen eine eingerechnete Größe haben und in den Kasten passen müssen. Die Anzeige hier
			drunter, zeigt ihnen an, wie viel schon belegt ist und wird rot, wenn der Kasten zu voll wird.
		</p>
		<p> Sie haben folgenden Kasten ausgewählt:</p>
		<?php echo "Name:".$kastenname."<br>Größe:".$kastengroeße." cm"; ?>
		<div id="fortschrittrahmen" style="width:<?php echo $kastengroeße;?>px">
			<div id="fortschritt" style="width:0px">
			</div>
		</div>
		<form action='schritt3.php' method='post'>
		<?php
			include "../scripts/mysql.php";
			$sql = "SELECT * FROM blumen";
			$query = mysql_query($sql) or die (mysql_error());
			while($blumen_array = mysql_fetch_assoc($query)){
			echo "
					<div id='maincontent'>
					<div id='maincontenthead'>
					<h3> ".$blumen_array['name']." </h3>
					</div>
						<table>
							<tr>
								<td>
									<img src='".$blumen_array['img']."'>
								</td>
								<td valign='top'>
									<p> Größe: ".$blumen_array['groeße']." cm<br>
										Farbe: ".$blumen_array['farbe']." <br>
										Pflegehinweise: ".$blumen_array['pflegehinweise']." <br>
										Wetterbedingungen: ".$blumen_array['wetterinfos']." <br><br>
										Beschreibung: <br> ".$blumen_array['beschreibung']."
									</p>
								</td>
							</tr>
						</table>
					<p> Preis: ".$blumen_array['preis']." EUR</p>
					<input type='hidden' name='name[]' value='".$blumen_array['name']."'></input>
					<input type='hidden' name='anzahl[]' id='".$blumen_array['id']."' value='4'></input>
					<div onclick='minus(\"".$blumen_array['name']."\", ".$blumen_array['groeße'].", \"".$blumen_array['id']."\");'>-</div>
					<div id=\"".$blumen_array['name']."\">0</div>
					<div onclick='plus(\"".$blumen_array['name']."\", ".$blumen_array['groeße'].", \"".$blumen_array['id']."\");'>+</div><br>  
					</div>
				";
			}
		?>
		<input type="submit" value="Diese Pflanzen verwenden"></input>
		</form>
		</div>
	</body>
</html>
Für value habe ich nur zum testen mal 4 eingesetzt, weil der javascript teil noch nicht ganz funktioniert.
Und nun die zweite Seite.
PHP:
<html>
	<head>
		<title> Blumen - Shop </title>
		<link rel="stylesheet" type="text/css" href="../style/main.css">
		<?php
		include "../scripts/mysql.php";
		$sql = "SELECT * FROM blumen";
		$query = mysql_query($sql);
		$anzahl = mysql_num_rows($query);
		$z = 0;
		$array_name = $_POST["name"];
		$array_menge = $_POST["anzahl"];			
		?>
	</head>
	<body>
		<div id="content">
		<h2> Schritt 3: Die Bestellinformationen </h2>
		<p> Hier müssen sie ihre persönlichen Daten abgeben, an die ihr Blumenkasten geschickt wird, sobald er fertig ist. Sie bekommen eine Bestell
		    bestätigung per EMail und können auswählen ob sie eine Benachrichtigung per Mail oder Telefon erhalten wollen, wenn ihr Blumenkasten
			fertig zusammengestellt ist.
		</p>
		<?php
		for($i = 0; $i <= $anzahl; $i++){
			if($array_menge[$i] != 0){
				echo "".$array_name[$i]."<br>";
				echo "".$array_menge[$i]."<br>";
			}
		}
		?>
		<form action="schritt4.php" method="post">
	<table>
	<tr>
		<td>
			<p>
			Name: 
			</p>
		</td>
		<td>
			<input name="name" type="text" size="30"></input>
		</td>
	</tr>
	<tr>
		<td>
			<p>
			Straße:
			</p>
		</td>
		<td>
			<input name="strasse" type="text" size="30"></input>
		</td>
	</tr>
	<tr>
		<td>
			<p>
			Hausnummer:
			</p>
		</td>
		<td>
			<input name="hausnummer" type="text" size="30"></input>
		</td>
	</tr>
	<tr>
		<td>
		<p> 
		Posleitzahl: 
		</p>
		</td>
		<td>
		<input type="text" name="plz" size="30"></input>
		</td>
	</tr>
	<tr>
		<td>
		<p> 
		Ort: 
		</p>
		</td>
		<td>
		<input type="text" name="ort" size="30"></input>
		</td>
	</tr>
		<tr>
		<td>
		<p> 
		Telefon: 
		</p>
		</td>
		<td>
		<input type="text" name="telefon" size="30"></input>
		</td>
	</tr>
		<tr>
		<td>
		<p> 
		E-mailadresse: 
		</p>
		</td>
		<td>
		<input type="text" name="mail" size="30"></input>
		</td>
	</tr>
	</table>
	<br><br>
	<input type="hidden" name="id" value="<?php echo $anzahl + 1;?>"></input>
	<input type="hidden" name="menge" value="<?php echo $menge;?>"></input>
	<input type="hidden" name="array" value="<?php echo $array;?>"></input>
	<input type="submit" value=" Weiter mit diesen Daten ">
	</form>
		</div>
	</body>
</html>
 
Hmm mit dem Arrays übergeben ist anscheinend so ein Sache wenn ich mich nicht irre müsstest du die Arrays zur Übergabe serialisieren und dann wieder deserialisieren.

PHP:
<?
    $array = array ("a", "b", "c";)
 
    $data = serialize ($array);
 ?>
    <form method="post" action="script.php">
      <input type="hidden" name="data" value="<? echo $data; ?>">
      <input type="submit" name="submit" value="Los geht's">
    </form>
 
 // -----------------------------------------------------------
 //
 // script.php
 //
 <?
     $array = unserialze ($_POST["data"]);
 
	foreach ($array as $value)
      echo "$value<br>";
?>
 

Neue Beiträge

Zurück