Daten ausgeben und in Abhängigkeit schreiben

msycho

Erfahrenes Mitglied
Hallo!

Folgendes: Ich habe eine MSSQL-Datenbank. Darunter ist unteranderem eine Spalte namens "Namen". Diese widerrum hat z.B. folgende Datensätze:
Peter
Fritz
Ludwig
Erhard
Richard
Ewald
Hannelore
Ursel
Sagen wir, Peter, Fritz und Ludwig gehören zur Familie Müller. Erhard, Richard und Ewald zur Familie Maffay. Hannelore und Ursel gehören zur Famile Williams.
Jetzt möchte ich die Spalte "Namen" ausgeben lassen und dann (in einem Formular (?)) den jeweiligen Namen eine Zahl zuweisen. Das ganze sollte über ein Formular gehen. Habe ich den jeweiligen Namen, die aus der DB-Spalten "Namen" ausgelesen wurden, eine Zahl zugewiesen, soll in eine andere DB-Spalte in Abhängigkeit des Namens die zugewiesene Zahl reingeschrieben werden.
Also, ich weise Peter, Fritz und Ludwig die Zahl 1 zu. Erhard, Richard und Ewald die Zahl 2. Den beiden Frauen die 3.
So sollte dann nachher in der Datenbank das stehen:
Namen: Peter, Fritz, Ludwig, Erhard, Richard, Ewald, Hannelore, Ursel
Zugewiesen Zahl über das Formular: 1, 1, 1, 2, 2, 2, 3, 3

Nun, wie stelle ich es jetzt an, dass die Namen aus der Datenbank in eine HTML-Tabelle, welches sich widerrum in einem Formular befindet, in eine HTML-Spalte eingelesen wird und ich gleichzeitig in der anderen HTML-Spalte die Zahlen zuweisen kann?
Zudem, wie stelle ich das dann mit dem reinschreiben an?

Ich hoffe Ihr habt mir ein paar Denkanstöße, Ratschläge und/oder Tipps, wie ich das umsetzen könnte.
 
Also ich bin jetzt soweit, dass über eine Datenbankabfrage jeden Namen einmal ausgeben lasse in einer HTML-Tabelle, die sich widerrum in einem Formular befindet. Gleichzeitig sind input-Felder in einer weiteren HTML-Tabellen-Spalte angebracht.
Nur wie bekomme ich es jetzt, hin dass wenn ich auf den submit-button klicke, die Zuweisung in Äbhängigkeit des Namens in eine weitere DB-Spalte geschrieben wird, bitte?

PHP:
// Beginn des Formulars
echo "<form action=\"". $_SERVER['PHP_SELF'] ."\" method=\"POST\">" . "\n";

echo "<table cellspacing=\"0\" cellpadding=\"0\" class=\"tablebox\" width=\"40%\">";
echo "<tr>";
echo "<td class=\"tablecontentheader\" width=\"20%\">Namen</td>";
echo "<td class=\"tablecontentheader\" width=\"20%\">Zuweisungen</td>";
echo "</tr>";

// Verbindung zur Datenbank herstellen
$dbverbindung = mssql_connect ('xxx', 'xxx', 'xxx') or die (mssql_get_last_message());
mssql_select_db ('xxx', $dbverbindung) or die (mssql_get_last_message());

$query = 'SELECT DISTINCT spalte '
	   . 'FROM tabelle';

$sql = mssql_query($query) or die (mssql_get_last_message());
while ( $result = mssql_fetch_object($sql) )
{
	$spalte_1 = $result -> spalte;

	echo "<tr>";
	echo "<td class=\"tablecontent\" width=\"20%\">". $spalte_1 ."</td>";
	echo "<td class=\"tablecontent\" width=\"20%\"><input class=\"tableeingabe\" type=\"text\" size=\"15\" /></td>";
	echo "</tr>";
}

echo "<tr>";
echo "<td class=\"tablecontent\" width=\"100%\" colspan=\"2\"><input class=\"tablebutton\" type=\"submit\" name=\"send_aliases\" value=\"Ab damit!\">";
echo "</tr>";

echo "</table>";

// Ende des Formulars
echo "</form>";

// Wenn Submitbutton gedrueckt wurde...
if ( isset($_POST['send_aliases']) )
{
	// ...werden eingegebene Aliases in Abhaengigkeit der Namen in DB-Spalte geschrieben
}

// Verbindung zum MS SQL Server wird geschlossen
mssql_close() or die (mssql_get_last_message());
 
Hm, hab ich mich irgendwie schlecht ausgedrückt?
Hier sind es jetzt ja nur 8 Namen. Später sind es mehrere hunderte, womöglich mehrere tausende. Und ich kann das ja nicht tausend mal schreiben. Zudem werden die Namen immer mehr. Dann müsste ich das ja immer manuell erweitern. Wie setze ich es um, dass ich es nicht tausend mal schreiben muss, also das Schreiben in die DB, bitte?
Kann mir wer weiterhelfen?
 
Also wenn es sich dabei um die Zuweisung von Personen (Vornamen) zu Familien (Nachnamen) handelt dann find es ich irgendwie unpraktisch gleich die Zahlen einzugeben.
Besser waere es meiner Meinung nach die Vornamen auszugeben und daneben Comboboxen mit den verfuegbaren Nachnamen. So kann dann einfach der entsprechende Nachname ausgewaelt werden ohne gross mit irgendwelchen verwirrenden Zahlen hantieren zu muessen. Vor allem wenn Du viele Eintraege hast werden die Zahlen irgendwann extrem unuebersichtlich und verwirrend.
 
Dieses Beispiel laesst sich aber auch auf andere Daten uebertragen. Zum Beispiel die Zuordnung von Liedern zu CDs, Buechern zu Schriftstellern, etc.
In allen Faellen hast Du 2 Tabellen welche ueber ein Feld miteinander verknuepft sind.
 
Naja, wenn Du neben jedem Namen (bleiben wir mal beim ersten Beispiel) ein Eingabefeld haben willst wo Du dann eine Zahl reinschreibst kannst Du ungefaehr sowas machen:
PHP:
echo '<form method="post" action="'.$_SERVER['PHP_SELF'].'">';
echo '<table>';
$results=mssql_query("select * from [vornamen] order by [vorname]");;
while ($result=mssql_fetch_assoc($results))
{
 echo '<tr><td>'.$result['vorname'].'</td><td><input type="text" name="name'.$result['id'].'" value="'.$result['nachnameid'].'"></td></tr>';
}
echo '<input type="submit" name="update" value="Update">';
echo '</table>';
echo '</form>';
Wie gesagt, meiner Meinung nach waere sowas besser:
PHP:
echo '<form method="post" action="'.$_SERVER['PHP_SELF'].'">';
echo '<table>';
$results=mssql_query("select * from [vornamen] order by [vorname]");;
while ($result=mssql_fetch_assoc($results))
{
 echo '<tr><td>'.$result['vorname'].'</td><td>';
 echo '<select name="name'.$result['id'].'">';
 $subresults=mssql_query("select * from [nachnamen] order by [nachname]");
 while ($subresult=mssql_fetch_assoc($nachnamen))
 {
  echo '<option value="'.$subresult['id'].'"';
  if ($result['nachnameid']==$subresult['id'])
  {
   echo ' selected';
  }
  echo '>'.$result['nachname'].'</option>';
 }
 echo '</select></td></tr>';
}
echo '<input type="submit" name="update" value="Update">';
echo '</table>';
echo '</form>';
In beiden Faellen sieht der uebernehmende Code gleich aus. Falls Du dazu einen Denkanstoss brauchst, den kannst Du in ein paar Minuten haben, muss erstmal fix einkaufen gehen.
 
Danke Dir.

Um auf Dein erstes Beispiel zu sprechen zu kommen: Die Daten werden ja bei Dir als assoziatives Array ausgelesen.
Woher kommen die Werte für name und value her?
PHP:
name="name'.$result['id'].'" value="'.$result['nachnameid'].'"

Und wie schreibe ich das ganze, nachdem ich die Zahlen in die input-Felder eingetragen habe und den Submitbutton geklickt habe, in die Datenbank, bitte?
PHP:
if ( isset($_POST['send_aliases']) )
{
    UPDATE tabelle SET aliases = x?x WHERE name = x?x ;
}
 
Zuletzt bearbeitet:
Der Name des Felds ergibt sich aus dem String "name" und daran angehaengt der ID des Datenbankeintrages des Vornamens, z.B. 1 oder 27, also name1, bzw. name27. Der Wert ist die zugewiesene ID des Nachnamens, falls bereits gesetzt, ansonsten duerfte das Feld leer bleiben.

Um die Daten dann einzutragen kannst Du z.B. sowas machen:
PHP:
$results=mssql_query("select * from [vornamen] order by [id]");
while ($result=mssql_fetch_assoc($results))
{
 mssql_query("update [vornamen] set [nachnameid]='".$_POST['name'.$result['id']]."' where [id]='".$result['id']."'");
}
 
Zurück