PHP Uyarı Yardım?

5 Cevap

3. hatta aşağıda listelenen aşağıdaki uyarıyı alıyorum.

Warning: Invalid argument supplied for foreach()

İşte php kodudur.

	function dyn_menu($parent_array, $sub_array, $qs_val = "menu", $main_id = "nav", $sub_id = "subnav", $extra_style = "foldout") {
		$menu = "<ul id=\"".$main_id."\">\n";
		foreach ($parent_array as $pkey => $pval) {
			if (!empty($pval['count'])) {
				$menu .= "  <li><a class=\"".$extra_style."\" href=\"".$pval['link']."?".$qs_val."=".$pkey."\">".$pval['label']."</a></li>\n";
			} else {
				$menu .= "  <li><a href=\"".$pval['link']."\">".$pval['label']."</a></li>\n";
			}
			if (!empty($_REQUEST[$qs_val])) {
				$menu .= "<ul id=\"".$sub_id."\">\n";
				foreach ($sub_array as $sval) {
					if ($pkey == $_REQUEST[$qs_val] && $pkey == $sval['parent']) {
						$menu .= "<li><a href=\"".rebuild_link($sval['link'], $qs_val, $sval['parent'])."\">".$sval['label']."</a></li>\n";
					}
				}
				$menu .= "</ul>\n";
			}
		}
		$menu .= "</ul>\n";
		return $menu;
}

Burada üzerinde çalışıyorum bütün kodudur.

$mysqli = new mysqli("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT id, label, link_url, parent_id FROM dyn_menu ORDER BY parent_id, id ASC");

if (!$dbc) {
	// There was an error...do something about it here...
	print mysqli_error();
}

while ($obj = mysqli_fetch_assoc($dbc)) {
	if (empty($obj['parent_id'])) {
		echo $parent_menu . $obj['id']['label'] = $obj['label'];
		echo $parent_menu . $obj['id']['link'] = $obj['link_url'];
	} else {
		echo $sub_menu . $obj['id']['parent'] = $obj['parent_id'];
		echo $sub_menu . $obj['id']['label'] = $obj['label'];
		echo $sub_menu . $obj['id']['link'] = $obj['link_url'];
		echo $parent_menu . $obj['parent_id']++;
	}
}
mysqli_free_result($dbc);




	function dyn_menu($parent_array, $sub_array, $qs_val = "menu", $main_id = "nav", $sub_id = "subnav", $extra_style = "foldout") {
		$menu = "<ul id=\"".$main_id."\">\n";
		foreach ($parent_array as $pkey => $pval) {
			if (!empty($pval['count'])) {
				$menu .= "  <li><a class=\"".$extra_style."\" href=\"".$pval['link']."?".$qs_val."=".$pkey."\">".$pval['label']."</a></li>\n";
			} else {
				$menu .= "  <li><a href=\"".$pval['link']."\">".$pval['label']."</a></li>\n";
			}
			if (!empty($_REQUEST[$qs_val])) {
				$menu .= "<ul id=\"".$sub_id."\">\n";
				foreach ($sub_array as $sval) {
					if ($pkey == $_REQUEST[$qs_val] && $pkey == $sval['parent']) {
						$menu .= "<li><a href=\"".rebuild_link($sval['link'], $qs_val, $sval['parent'])."\">".$sval['label']."</a></li>\n";
					}
				}
				$menu .= "</ul>\n";
			}
		}
		$menu .= "</ul>\n";
		return $menu;
}


function rebuild_link($link, $parent_var, $parent_val) {
	$link_parts = explode("?", $link);
	$base_var = "?".$parent_var."=".$parent_val;
	if (!empty($link_parts[1])) {
		$link_parts[1] = str_replace("&amp;", "##", $link_parts[1]);
		$parts = explode("##", $link_parts[1]);
		$newParts = array();
		foreach ($parts as $val) {
			$val_parts = explode("=", $val);
			if ($val_parts[0] != $parent_var) {
				array_push($newParts, $val);
			}
		}
		if (count($newParts) != 0) {
			$qs = "&amp;".implode("&amp;", $newParts);
		}
		return $link_parts[0].$base_var.$qs;
	} else {
		return $link_parts[0].$base_var;
	}
}

echo dyn_menu($parent_menu, $sub_menu, "menu", "nav", "subnav");

5 Cevap

Bu $parent_array bir dizi olmadığını söylüyor.

Bu işlevi çağıran kod gönderebilir, biz daha söyleyebilirim.

Eğer forearch içine bir dizi değil tedarik Bu hata olur. Her foreach) (print_r deneyin ilk argümanı

Eğer Tür Dayatma (sadece diziler ve nesneler için çalışır) eklemek için fonksiyon imza değiştirirseniz, işlev ihtiyacı ne alır emin olacak:

function dyn_menu(array $parent_array, array $sub_array, //etc.)

Ve sorunu really nerede olduğunu fonksiyonunun arayan saptar bir hata mesajı almalısınız.

Eğer başında o while döngüye $parent_array oluşturmak için bekliyorduk gibi görünüyor. Bunun yerine sadece echo ING şeyler.

Hatları gibi:

     echo $parent_menu . $obj['id']['label'] = $obj['label'];

Muhtemelen gibi olmalıdır:

$menu['label'] = $obj['label'];

Sonra (iç) döngünün sonunda gibi bir şey eklemek:

$parent_menu[$obj['id']] = $menu;

Yani dyn_menu kullanmakta olduğunuz dizi oluşturmak.

Her durumda, while döngüsü sorunun benziyor. Bu $parent_menu verilerden bina değil.