php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.07.2007, 18:41  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard Werte aus SQL-Abfrage in HTML-Tabelle bringen

Hallo,

ich komme mal wieder nicht weiter:
Ich habe folgende MySQL-Abfrage, die mir alle Familienmitglieder, die zu einer Familien gehören aus einer Tabelle liest
Code:
$daten_members = mysql_fetch_array( mysql_query("SELECT * FROM `$table_family_members` where id='$id'") );
Ausgehend von dieser Abfrage will ich nun eine Tabelle füllen, die wie folgt aussieht:

Vorname Geburtsdatum
Mann
Frau
Kind
Kind
Kind

Ich habe gerade überhaupt keinen Ansatz, wie ich das reinbringen könnte
Die Spalten (Vorname, Gebdatum) sollen Inputfelder sein, die jeweils einen eigenen Namen haben, z.B: Vorname_Mann, Gebdatum_Mann, Vorname_Frau, Gebdatum, Frau, etc.

Bin für jeden Vorschlag offen.

Danke und Gruß,
Marcel
maeck ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 15.07.2007, 18:55  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo maeck,

an sich musst du lediglich die Datensätze aus der DB holen (mysql_fetch_assoc()) und die Daten in die Strukur einer Tabelle ausgeben. Das geht beispielsweise so:

PHP-Code:
$select ''SELECT FROM '.$table_family_members.' where id=''.$id.'\';';
$result mysql_query($select);

echo 
'<table>';

while(
$data mysql_fetch_assoc($result)){

   echo 
'<tr>';

   echo 
'<td>'.$data['Vorname'].', $data['GeburtsDatum'].'</td>';
   echo '
<td>'.$data['Frau'].'</td>';
   echo '
<td>'.$data['Mann'].'</td>';

   echo '
</tr>';

}

echo '
</table>; 
Das ist jedoch nur ein rudimentäres Beispiel, das dich zum Denken anregen soll. Ob du nun den Text blanko oder in einem Input-Feld ausgibst ist dabei zweitrangig. Hättest auch selbst drauf kommen können, denn ich glaube zu diesem Thema wurde hier im Forum schon n mal diskutiert.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 16.07.2007, 08:49  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard

Hallo dr.e.,
danke für die Antwort.
Ist es egal ob ich es so mache wie du, oder so wie ich schon gepostet hatte?
PHP-Code:
$daten_members mysql_fetch_arraymysql_query("SELECT * FROM `$table_family_members` where id='$id'") ); 

und dann einfach nur

while($daten_members){ 

?

Gruß Marcel
maeck ist offline  
Alt 16.07.2007, 11:32  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo maeck,

ich mag deine verschachtelte Schreibweise mit mysql_fetch_array(mysql_query()) nicht da das schwer zu lesen ist. Theoretisch sollte es aber auch so gehen. Die Listendarstellung musst du dann eben nach gusto anpassen.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 16.07.2007, 12:06  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard

Okay, danke für deine Hilfe.
Werde mich dran versuchen und mich ansonsten nochmal melden.

Schönen Tag,
Marcel
maeck ist offline  
Alt 16.07.2007, 14:08  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Nein das geht so nicht, denn mysql_query() liefert dir eine Resource. Mittels mysql_fetch_*() holst du genau einen Datensatz dieser Resource ab. Danach wird der interne Zeiger der Resource um eins erhöht. Um die restlichen Datensätze auch noch abzuholen, musst du die Resource erneut mit einer mysql_fetch_*() Funktion aufrufen. Solange bis irgendwann alle Datensätze abgerufen sind und FALSE zurückgegeben wird.

Wenn du mysql_query() aber direkt in mysql_fetch_*(<-- hier -->) aufrufst, wird die Resource nicht gespeichert und geht verloren. Somit hast du nur einen Datensatz abgeholt, der Rest verliert sich im Nirvana.

Das heißt, wenn du mehrere Datensätze zu erwarten hast, musst du den Rückgabewert von mysql_query() speichern und in einer Schleife an mysql_fetch_*() übergeben. Mögliche Rückgabewerte von mysql_fetch_assoc() sind FALSE oder ein Array.

Verwende also am Besten folgendes Konstrukt:
PHP-Code:
<?php
$sql 
"SELECT * FROM tabelle";
$res mysql_query($sql) or die(mysql_error());
while (
$line mysql_fetch_assoc($res)) {
  
// $line ist ein Array, dessen Schlüssel die Spaltennamen der Tabelle und dessen Werte der Inhalt ist
}
?>
http://de.php.net/mysql_query
http://de.php.net/mysql_fetch_array
http://de.php.net/mysql_fetch_assoc
http://de.php.net/mysql_fetch_object
Zergling-new ist offline  
Alt 17.07.2007, 17:01  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard

Mein Problem weitet sich ein wenig aus:
Zu Anfang dachte ich, es reicht wenn ich die Mitglieder der angemeldeten Familie auslese und ausgebe. Dies reicht nicht, denn was ich mache ist ein AdminTool für die Anmeldungen und da muss es auch möglich sein, dass man weitere Personen zu der Familie hinzufügt.

Also z.B. eine Familie hat sich mit 1 Ehepartner und 2 Kindern angemeldet, dann hätte ich drei Zeilen mit diesen drei Personen drin.
Eigentlich müsste ich aber die Möglichkeit haben, im Admintool noch den 2.Ehepartner und ein zusätzliches Kind nachzutragen.

Bei der Anmeldung ist es schon nicht perfekt, denn da gebe ich fix 2 Erwachsene und 6 Kinder vor (in der Hoffnung, dass keine Familie mit mehr als 6 Kindern kommt). Würde das gerne irgendwann mal dynamisch machen, aber das kann ich noch nicht.

Deshalb bräuchte ich im Admintool jetzt auch so eine Tabelle mit Zeilen für 2 Ehepartner und 6 Kinder. Nach dem Beispiel oben, würde dann nur die Zeile des einen Ehepartners und der 2 Kinder ausgefüllt sein, aber ich könnte noch den zweiten Ehepartner nachtragen.

Sorry, dass es so kompliziert ist, aber ich weiß echt nicht wie ich es machen soll

Muss ich dann jetzt in der while-Schleife alle Inhalte aus der DB auslesen und in Variablen schreiben (z.B. mit einer extra for-Schleife, durch die ich die Variablen mit nem Counter hochzähle) und die Variablen dann in die Tabelle schreiben?

Danke für eure Hilfe, langsam wirds mir zu komplex.

Gruß Marcel
maeck ist offline  
Alt 17.07.2007, 18:46  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo,
verstehe jetzt den Zusammenhang zum Anfangsposting nicht, aber das ist Datenbank-technisch kein Problem. Eine dynamische Anzahl 0..n (bei 0..1 kannst du ein Feld füllen oder leer lassen) setzt du in einer relationalen Datenbank immer durch eine dynamische Anzahl an Datensätzen um, also nicht etwa über Spalten. Wenn du allerdings noch nicht einmal mehrzeilige SELECTs ausgegeben bekommst, wird es sehr kritisch.
Lies dir mal den Artikel in Wikipedia durch:
http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
(Link kaputt, kopiers bitte manuell)
Zumindest bis zur dritten Normalform.

Auch dieser Artikel könnte interessant sein:
http://de.wikipedia.org/wiki/SQL
Speziell JOINS im Zusammenspiel bei normalisierten Datenbanken.

Bitte lies dir zumindest Normalisierung durch, sonst macht eine weitere Diskussion keinen Sinn, denn für dich die Arbeit erledigen kann keiner.

Eine Tabellenstruktur bei dynamischer Anzahl Ehepartner (0..1) und Kindern (0..n) könnte dann so aussehen:
Code:
family
id

persons
id | family| gender | is_parent / is_child | lastname | firstname
family hat keine Eigenschaft, außer ihre Familienmitglieder. Du kannst höchstens das Familien-Passwort oder den "Nicknamen" festlegen.
Die Personen haben ihren Nach- und Vornamen, Geschlecht und Flag ob sie Kind oder Elternteil sind. Natürlich könntest du hier auch den Nachnamen auslagern oder vom Vater/Mutter ableiten, aber was wenn Mutti Meyer, Vati Müller und das Kind Meyer-Müller heißen soll? Du solltest beim Datenbankdesign immer den Worst-Case im Blick haben.

Du kannst jetzt soviele Kinder (und als Nachteil, auch soviele Elternteile) hinzufügen wie du möchtest, bzw. deine Applikation zuläßt.
Zergling-new ist offline  
Alt 17.07.2007, 20:06  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard

Hallo Zergling,

okay, ich versuche es nochmal anders. Bitte ein bisschen Geduld.
Das Problem liegt nicht darin, dass ich keine SELECTs erstellen kann, oder nicht weiß, dass man ein assoziatives Array durch eine While-Schleife ausliest (auch wenn das in diesem Post so scheint ).
Meine Datenbank ist bereits normalisiert (hoffe ich) und sieht folgendermaßen aus:

Tabelle family
id | regdate | lastname | street | zipcode | land | city | phone | fax | email

Tabelle family_members
id | famid (fremdschlüssel zu family.id) | surname | sex | birthday

Jetzt folgt die Beschreibung meines Problems :
Ich habe ein Anmeldeformular, wo sich eine Familie mit allen Mitgliedern anmelden kann (eben max. 6 Kinder, weil ich es noch nicht geschafft habe, über JS dynamisch weitere Eingabefelder hinzuzufügen).

Zu dieser Anmeldung habe ich ein AdminTool geschrieben, wo man sich alle Familien inkl. der Mitglieder auflisten lassen kann. Hier soll man nun die Möglichkeit haben, die Familien nochmals zu bearbeiten. D.h. noch ein weiteres Kind hinzufügen, oder vielleicht einen Ehepartner löschen.

Dazu wollte ich eine Tabelle mit Input-Felder erstellen und die Values direkt aus der Datenbank füllen. Dann könnte ich etwas verändern und danach wieder alles in die DB zurückschreiben.

Erster Ansatz war, dass ich einfach alles aus der DB auslese und dies anzeige. Dann hätte ich aber nicht die Möglichkeit, ein weiteres Kind hinzuzufügen oder dergleichen.

Deswegen dachte ich mir jetzt, dass ich ein Formular erstellen muss, was ungefähr so aussieht: http://www.forum-altoetting.de/beispiel.html

Um das füllen zu können, muss ich aber die Werte aus der DB über eine Whileschleife auslesen und in Variablen speichern. Diese Variablen kann ich dann in die Valuetags schreiben, damit die Werte angezeigt und verändert werden können.

Dazu dachte ich, dass ich eine While-Schleife erstelle, und darin eine for-schleife, die einen counter hochzählt und damit die variablen füllt; also vorname1, vorname2, ... .

Und jetzt die Frage:
Geht das auch einfach??

Danke für deine / eure Geduld,
schöne Grüße, Marcel
maeck ist offline  
Alt 17.07.2007, 21:40  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
Dazu dachte ich, dass ich eine While-Schleife erstelle, und darin eine for-schleife, die einen counter hochzählt und damit die variablen füllt; also vorname1, vorname2, ... .

Und jetzt die Frage:
Geht das auch einfach?? :Wink:
Hmm, dir fehlt es an Grundlagen, oder einfach am Mut das beschriebene auch auszuprobieren. Wie ich bereits gesagt habe (gaaanz weit oben) macht es keinen unterschied, ob du Daten ausliest und als plain/text darstellst oder in ein Input-Feld. das sieht dann ganz einfach so aus (Kategorie Q&D):

PHP-Code:
<form action="" method="">
<?php
$sql 
"SELECT * FROM tabelle";
$res mysql_query($sql) or die(mysql_error());
while (
$line mysql_fetch_assoc($res)) {

   echo 
'Vorname: <input type="text" name="surname" value="'.$line['surname'].'" />';
   echo 
'
'
;
   echo 
'Name: <input type="text" name="name" value="'.$line['name'].'" />';

 
// end while
}
?>
</form>
Fertig. Nun kannst du das erweitern.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
HTML Tabelle ausgeben PHP-Fortgeschrittene 7 22.02.2011 17:59
abfrage mit bedingung bei einer zweiten tabelle marcelglaeser Datenbanken 6 29.05.2008 19:10
Frage: richtige SQL Abfrage von einer MySQL Spalte die SET werte besitzt Seb PHP Tipps 2008 2 29.05.2008 11:36
MySQL und html Tabelle sven88 PHP Tipps 2008 10 12.05.2008 17:31
Abfrage auf fehlende ID in einer Tabelle maeck Datenbanken 2 04.07.2007 19:44
where Abfrage in anderer Tabelle?? Matthiasnet Datenbanken 10 11.04.2007 17:35
werte einer tabelle in andere tabelle speichern high_scorer Datenbanken 3 30.09.2005 16:28
[Erledigt] mysql abfrage über 4 Tabelle - bis 3 geht, bei der 4. habert Datenbanken 2 08.09.2005 11:59
Abfrage einer Tabelle mit mehreren wörtern Diego1978 PHP Tipps 2005-2 4 15.08.2005 14:58
[Erledigt] html Tabelle mit scrollbars HTML, Usability und Barrierefreiheit 16 09.04.2005 12:54
Tabelle existiert, if Abfrage Datenbanken 9 15.02.2005 14:00
Word Tabelle direkt in HTML Datei einfügen nsane HTML, Usability und Barrierefreiheit 7 28.12.2004 09:02
Werte in Tabelle änder und in DB speichern PHP Tipps 2004-2 5 17.12.2004 22:11
werte einer tabelle mit werten einem array vergleichen PHP Tipps 2004 1 08.07.2004 21:33
[Erledigt] Werte eines Arrays aus Tabelle auslesen ? PHP-Fortgeschrittene 12 08.06.2004 19:57

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
html sql abfrage, db abfrage in html tabelle, html sql select in tabelle, php in eine tabelle bringen, sql abfrage in html, sql abfragen in html, sql select tble html, sql select in an html table, sql select in html table, sql abfrage tabellen füllen, sql .html tabelle, html tabelle mit sql, sqlabfrage in html, yql html table, tabelle mit html mit werten von sql abfrage erstellen, html tabelle füllen mit sql, php sql abfrage in einer html tabelle, sql abfrage über html, familien sql, werte aus sql tabelle in php tabelle anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:40 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.