[PHP] Problem mit Array Ausgabe

E

ExtiQ

Gast
Hallo CBler,
mein Problem ist folgendes:
Ich habe 2 Mysql Tabellen "gaeste" und "gruppe".
Ich möchte nun auf einer Admin Page, dem jeweiligen Admin möglich machen bei den Benutzern die Gruppe zu ändern.
Also z.B. Gast1 ist in Gruppe A, soll aber in Gruppe B.
Mein Problem ist nun, wenn ich alle Gaeste mit einer Schleife ausgebe und innerhalb dieser einzelnen rows eine weitere Schleife mache, welche alle Gruppen in ein <select> als <option> schreibt, dass dann nur beim 1. Gast die Gruppen sichtbar sind, bei allen anderen Gästen aber nicht. Liegt wohl daran, dass der interne Zeiger des Gruppenarrays am Ende ist und ich diesen reseten muss, damit er für die anderen rows wiederverwendbar ist, aber so wie ich das mache schmiert mir der Explorer ab(Endlosschleife) ^^. Jedoch sind meine Programmierkenntnisse nicht ausgereift genug oder meine Logik kommt mal an seine Grenze :evillol:.

Ich hoffe ich konnte mein Problem einigermaßen darstellen

PHP:
<?
## Codebeispiel ##
// DB connected bla bla

$gaeste = "SELECT * FROM gaesteliste";
$gruppe = "SELECT * FROM gruppe";

$q_gaeste = mysql_query($gaeste) or DIE(mysql_error());
$q_gruppe = mysql_query($gruppe) or DIE(mysql_error());

while ($r_gaeste = mysql_fetch_assoc($q_gaeste)) 
{
    echo "<form action=\"phpseite.php?action=aendern\" method=\"post\">";
    echo "<label for=\"name\">Name:</label>";
    echo "<input type=\"text\" name=\"name\" value=\"".$r_gaeste['name']."\">";
    echo "<label for=\"name\">Gruppe:</label>";
    echo "<select name=\"gruppe\">";
    while ($r_gruppe = mysql_fetch_assoc($q_gruppe)) 
    {
        echo "<option value=\"".$r_gruppe['ID']."\">".$r_gruppe['name']."</option>"; // Hier ist das problem, Gruppen werden nur einmal dargestellt
    }
    echo "</select>";
}
?>
 
Zuletzt bearbeitet von einem Moderator: ([code] -> [php])
AW: [PHP]Problem mit Array Ausgabe

Hi, les alle Gruppen doch vor der Schleife aus, und Speicher sie in einem gruppen array.
So musst du die Gruppen nicht jedesmal neu aus der DB holen.

wenn du dieses Array dann innerhalb der großen Schleife // benutzer darstellen mit for each durchläufst um das select feld aufzubauen, musst du es auch nicht resetten.

Alternativ könntest du sogar, wenn du in einem weiteren Schritt nicht markieren möchtest welcher Gruppe der Benutzer zugeordnet ist, sogar dieses select feld oder zumindest die options schon vor der Schleife zusammenbauen also den dafür nötigen html code in einer Variable speichern und dann jedesmal bei jedem Benutzer einfügen lassen. Dann hättest du nur noch eine Schleife und keine verschachtelte mehr.

Wenn du allerdings nachher noch die Gruppe bei einem Benutzer vorselektieren willtst zu welcher dieser gehört kannst du das select feld nicht im vorraus generieren, da du ansonsten keine möglichekeit mehr hast ein "selected" in das entsprechende Option feld zubekommen (ok, über Umwege mit Javascript würde es immer noch gehn).
 
AW: [PHP]Problem mit Array Ausgabe

Ja ok, danke, aber so weit war ich leider auch schon ( ich merke ich hab was vergessen zu erwähnen.. sry :rolleyes:) Wie stelle ich das ganze nun an? Ich bräuchte da nen Denkanstoss ( meine Gruppen Tabelle ist so: ID und name , Gäste Tabelle: ID, name, gruppe, kommt, bezahlt )

Greetz

eXtiQ
 
AW: [PHP]Problem mit Array Ausgabe

wenn du auch soweit bist weiss ich nicht wo dein problem ist.

Gruppen auslesen in Array Speichern
Gäste auslesen

Schleife für jeden Gast
Gast daten + Schleife für Gruppen

PHP:
<? 
## Codebeispiel ## 
// DB connected bla bla 

$gaeste = 'SELECT * FROM gaesteliste'; 
$gruppe = 'SELECT * FROM gruppe'; 

$q_gaeste = mysql_query($gaeste) or DIE(mysql_error()); 
$q_gruppe = mysql_query($gruppe) or DIE(mysql_error()); 

 while ($r_gruppe = mysql_fetch_assoc($q_gruppe))  
    { 
	$gruppen[$r_gruppe['ID']]=$r_gruppe['name'];
    } 
?>
<form action="phpseite.php?action=aendern" method="post"> 
<?php
while ($r_gaeste = mysql_fetch_assoc($q_gaeste))  
{ 
    ?>
    <label for="name">Name:</label>
    <input type="text" name="gast[<?php echo $r_gaeste['id']; ?>]['name']" value="<?php echo $r_gaeste['name']; ?>"> 
    <label for="name">Gruppe:</label> 
    <select name="gast[<?php echo $r_gaeste['id']; ?>]['gruppe']"><?php
   	foreach($gruppen as $id =>$name) {
		?><option <?php ($r_gaeste['gruppe']==$id) ? echo '"selected"'; ?> value="<?php echo $id; ?>"><?php echo $name; ?></option><?php
	}
    ?></select><?php
} 
?>
</form>

Ich würde dir noch empfehlen Die Gast Id mit zu übertragen da du ansonsten, so wie es momentan musst die Zuordnung zum Speichern über den Namen machen musst, wenn dann 2 gleich heissen bekommst du Probleme. // hab ich schon oben eingebaut.

In dem php an das du dieses Formular sendet bekommst du dann ein Array Gast
wo jeweils id und gruppe drin gespeichert sind, das kannst du dann in die DB jagen.

Bei der Gäste Schleife musst du lediglich überprüfen ob die aktuelle ID der gruppe gleich der ID ist welche bei dem Gast als Gruppen id gesetzt ist, wenn ja dann fügst du in den option html code ein "selected" ein.
 
Zuletzt bearbeitet:
Zurück
Oben