Sortierung in der zweiten schleife (MYSQL /PHP)

fRagiLeMOD

Mitglied
Moin Leute,

ich habe ein Script geschrieben für die Administration von Modulen im Adminbereich meines CMS. Funktioniert auch bestens, nur leider habe ich da ein kleines Problem.

Ich hole die Werte in einer ersten while-Schleife aus der Datenbank (mit Sortierung: "position" - geholt aus der Datenbank), um sie in einem Array unterzubringen.

In einer weiteren for($i = 0 ...)-Schleife werden dann die Module aufgelistet (Daten werden aus dem Array herausgeholt), wo sie allesamt auf einmal bearbeitet werden können.

Leider ist dann die Sortierung futsch, weiß jemand eine Lösung, wie ich es hinbekomme, dass die Module korrekt sortiert werden (Position 1, 2, 3, 4,....)?

MySQL Query: ... [weiterer Code] ...
PHP:
	$query_get_modules = mysql_query("SELECT * FROM ".$table_modules." ORDER BY position DESC");
	$num_modules = mysql_num_rows($query_get_modules);

Erste Schleife:
PHP:
		echo '<b>Module verwalten</b><br /><br />';

		while($fetch_obj_modules = mysql_fetch_object($query_get_modules)) {
		
			$id = $fetch_obj_modules->id;	
			$name = $fetch_obj_modules->name;
			$activated = $fetch_obj_modules->activated;
			$number = $fetch_obj_modules->number;
			$sub_position = $fetch_obj_modules->sub_position;
			$image = $fetch_obj_modules->image;
			$head_module = $fetch_obj_modules->head_module;
			$title = $fetch_obj_modules->title;
			$position = $fetch_obj_modules->position;
		
			$module[$number] = array(	1=>$id, 
										2=>$name, 
										3=>$activated, 
										4=>$number, 
										5=>$sub_position, 
										6=>$image, 
										7=>$head_module, 
										8=>$title,
										9=>$position
							   );
			
		}
... [weiterer Code] ...

Zweite Schleife: ... [weiterer Code] ...
PHP:
		for($i = 0; $i < $num_modules; $i++) {
				
			$number = $i+1;
			if($module[$number][5] == 'l') {
			
				if($module[$number][3] == 1) $ch = 'checked';
				if($module[$number][3] == 0) $ch = '';
				
				$n = $module[$number][1];
				
				echo '
				<input type="hidden" name="id" value="', $n, '">
				  <tr>
					<td class="tcenter">', $module[$number][8], '</td>
					<td class="tcenter"><select name="sub_position', $n, '">
					  <option selected="selected">', $adm['modules_left'], '</option>
					  <option>', $adm['modules_center'], '</option>
					  <option>', $adm['modules_right'], '</option>
					</select></td>
					<td class="tcenter"><input type="checkbox" name="activated', $n, '" value="', $module[$number][1], '" ', $ch, '></td>
					<td class="tcenter" align="center"><input type="text" size="3" maxlength="3" name="position', $n, '" value="', $module[$number][9], '"></td>
					<td class="tcenter" align="center"><input type="text" size="30" maxlength="255" name="image', $n, '" value="', $module[$number][6], '"></td>
					<td class="tcenter" align="center"><input type="text" size="30" maxlength="200" name="head_module', $n, '" value="', $module[$number][7], '"></td>
				  </tr>';		
		
			}
			
		}
... [weiterer Code] ...

Viele Grüße
fRagiLeMOD
 
Wieso speicherst du die Daten erst in einem Array zwischen und verarbeitest sie nicht direkt?
PHP:
while( $module = mysql_fetch_object($query_get_modules) ) {
	if( $module->sub_position == 'l') {
		echo '
                  <tr>
                    <td class="tcenter"><input type="hidden" name="id" value="', $module->id, '">', htmlspecialchars($module->title), '</td>
                    <td class="tcenter"><select name="sub_position', $module->id, '">
                      <option selected="selected">', $adm['modules_left'], '</option> 
                      <option>', $adm['modules_center'], '</option> 
                      <option>', $adm['modules_right'], '</option> 
                    </select></td> 
                    <td class="tcenter"><input type="checkbox" name="activated', $module->id, '" value="', $module->id, '" ', ($module->activated ? ' checked' : null) , '></td>
                    <td class="tcenter" align="center"><input type="text" size="3" maxlength="3" name="position', $module->id, '" value="', $module->position, '"></td>
                    <td class="tcenter" align="center"><input type="text" size="30" maxlength="255" name="image', $module->id, '" value="', $module->image, '"></td>
                    <td class="tcenter" align="center"><input type="text" size="30" maxlength="200" name="head_module', $module->id, '" value="', $module->head_module, '"></td>
                  </tr>';
	}
}
Denn wieso einfach wenn es auch kompliziert geht?

Dass die Reihenfolge in deinem Array nachher wieder der Nummerierungsreihenfolge entspricht, liegt übrigens daran, dass du ebendiese als Index für das Array nimmst.
 
Erstmal danke für deine Antwort. :)

Nun - das hatte ich noch vergessen anzumerken -
das ist eigentlich ganz einfach zu beantworten. Die zweite Schleife gibt es drei mal. Denn die Module sind nochmal nach links, mitte und rechts geordnet. Filtern tu ich sie mit einer if-Bedingung.

if($module[$number][5] == 'l') { ... }
if($module[$number][5] == 'c') { ... }
if($module[$number][5] == 'r') { ... }

So sieht das aus im Adminbereich: http://88.84.148.48/modules.jpg
 
Alles klar ich hab's jetzt nur mit while-Schleifen gemacht. War wohl eine mittelgroße Denkblokade von mir.

Danke nochmal für deine Hilfe.

Hier ein Teil des Codes (erste Schleife):

PHP:
				echo '	
			<table class="tcenter" border="1" cellpadding="2" cellspacing="0" width="700">
			<form action="', $_SERVER['PHP_SELF'], '?admin" method="post">
			  <tr>
				<td class="theader" align="center"><b>', $adm['modules_name'], '</b></td>
				<td class="theader" align="center"><b>', $adm['modules_sub_position'], '</b></td>
				<td class="theader" align="center"><b>', $adm['modules_active'], '</b></td>
				<td class="theader" align="center"><b>', $adm['modules_position'], '</b></td>
				<td class="theader" align="center"><b>', $adm['modules_image'], '</b></td>
				<td class="theader" align="center"><b>', $adm['modules_head'], '</b></td>
			  </tr>
			  <tr>
				<td class="theader" align="center" colspan="6"><b>', $adm['modules_left_head'], '</b></td>
			  </tr>';
			
			// Linke Seite
			$query_get_left = mysql_query("SELECT * FROM ".$table_modules." WHERE sub_position='l' ORDER BY position");
		
			while($fetch_obj_modules = mysql_fetch_object($query_get_left)) {
			
				$module = array(	1  =>  $fetch_obj_modules->id, 
											2  =>  $fetch_obj_modules->name, 
											3  =>  $fetch_obj_modules->activated, 
											4  =>  $fetch_obj_modules->number, 
											5  =>  $fetch_obj_modules->sub_position, 
											6  =>  $fetch_obj_modules->image, 
											7  =>  $fetch_obj_modules->head_module, 
											8  =>  $fetch_obj_modules->title,
											9  =>  $fetch_obj_modules->position
								   );
				
				if($module[3] == 1) $ch = 'checked';
				if($module[3] == 0) $ch = '';
					
				$n = $module[1];
					
				echo '
				<input type="hidden" name="id" value="', $n, '">
				  <tr>
					<td class="tcenter">', $module[8], '</td>
					<td class="tcenter"><select name="sub_position', $n, '">
					  <option selected="selected">', $adm['modules_left'], '</option>
					  <option>', $adm['modules_center'], '</option>
					  <option>', $adm['modules_right'], '</option>
					</select></td>
					<td class="tcenter"><input type="checkbox" name="activated', $n, '" value="', $n, '" ', $ch, '></td>
					<td class="tcenter" align="center"><input type="text" size="3" maxlength="3" name="position', $n, '" value="', $module[9], '"></td>
					<td class="tcenter" align="center"><input type="text" size="30" maxlength="255" name="image', $n, '" value="', $module[6], '"></td>
					<td class="tcenter" align="center"><input type="text" size="30" maxlength="200" name="head_module', $n, '" value="', $module[7], '"></td>
				  </tr>';		
	
			}
			
			echo '
			  <tr>
				<td class="theader" align="center" colspan="6"><b>', $adm['modules_right_head'], '</b></td>
			  </tr>';
		
			// Rechte Seite
			$query_get_right = mysql_query("SELECT * FROM ".$table_modules." WHERE sub_position='r' ORDER BY position");


// usw...
 
Zuletzt bearbeitet:
Zurück