PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : dynamischer (wechselnder) tablelen-name


gerhard
12.08.2004, 09:33:25
wer kann mir bei wechselnden tabellennamen helfen?

ich habe mehrere mysql-tabellen (mit identer struktur) und möchte mit hilfe einer schleife deren felder in (unterschiedlich bezeichneten) php-tabellen einlesen:

mysql-tabelle "mitarbeiter" und
mysql-tabelle "kunden"

in der (php-)tabelle "datenliste" steht auf

datenliste[0] = "mitarbeiter" und
datenliste[1] = "kunden"

<?php


for($i=0;$i<count($datenliste);$i++)
{
$result = mysql_db_query("datenbank", "SELECT * FROM $datenliste[$i] ORDER BY name");
while($row = mysql_fetch_array($result))
{

HIER SOLL EINE TABELLE ENSTEHEN, DEREN NAME $datenliste[$i] IST UND AUF DER DIE DATEN ÜBERTRAGEN WERDEN SOLLEN:

$datenliste[$i] = $row[name] FUNKTIONIERT ABER NICHT

$$datenliste[$i] = $row[name] AUCH NICHT!!!

} // ende der while-schleife

} // ende der for-schleife


wer kann weiterhelfen?

c4
12.08.2004, 09:39:09
datenliste[0] = "mitarbeiter" und
datenliste[1] = "kunden" Die fehlenden Dollarzeichen sind doch aber im Skript vorhanden, nicht wahr?

Auch wenn an der Abfrage sicher nichts falsch ist, schreib's mal so: mysql_db_query("datenbank", "SELECT * FROM $datenliste[$i] ORDER BY name") or die(mysql_error()); Wenn Du eh mit assoziativen Arrays arbeitest, dann kannst Du auch mysql_fetch_assoc() statt mysql_fetch_array() nutzen.

Wenn Du Felder assoziativer Arrays ansprichst, dann setz sie bitte auch in " oder ', besser aber ', also so:$variable['feld'] Bei der Verwendung von Variablen als Feldbezeichner ist das natürlich nicht notwendig.

Und was funktioniert eigentlich nicht? Fehlermeldungen? Falscher Inhalt? Klodeckel fällt runter? ...?

gerhard
12.08.2004, 09:49:10
danke für die prompte antwort --> nur ist mir das zu hoch (ich bin zu blöd dazu)(?)

also:

wenn ich anstatt mysql_fetch_array() das "mysql_fetch_assoc()" für die while-abfrage benutze:

wie sieht dann die zuweisung der felsinhalte in der whiole-schleife aus?

???? =$row[name]


$familienname[$datenliste[$i]]= $row[name] ???????

(ergäbe eine 2-dimensionale tabelle mit namen "familienname" ????

c4
12.08.2004, 09:53:49
Habe ich das so kompliziert geschrieben?

Wenn Du mysql_fetch_assoc() nutzt, dann sieht das Ganze nicht viel anders aus: $result=mysql_db_query(...) or die(mysql_error());
while ($row=mysql_fetch_assoc($result)) {
echo $row['id'].$row['name']...;
} Ganz simpel also.

Der Unterschied zwischen mysql_fetch_assoc() und mysql_fetch_array() ist einfach der, dass mysql_fetch_assoc() NUR assoziative Arrays ausspuckt und mysql_fetch_array() assoziative UND numerische gleichzeitig. mysql_fetch_array() frisst also bloß mehr Speicher. Wenn man das numerische Zeugs nicht braucht, kann man es also auch weglassen.

Also ich glaube, DAS war unverständlich geschrieben... ;)

gerhard
12.08.2004, 10:14:00
tut mir leid - möglich, dass ich irgendwie am falschen gleis (dampfer) bin ... oder doch zu wenig php-sattelfest...

mein problem war, dass ich einen array-namen (in php) innerhalb einer "for"-schleife für eine abfrage (while) mit jedem for-durchgang anders benennen will:

ich will, dass beim 1. durchgang der for-schleife ein php-array entsteht mit dem namen "mitarbeiter" (weil im array, das mittels der for-schleife abgearbeitet wird, im ersten elemente "mitarbeiter" drinnsteht), im 2. durchgang soll ein (weiteres) php-array mit dem namen "kunden" (im 2. element des arrays steht nämlich "kunde" ... und falls im 3. element "vereinsmitglieder" steht, soll ein array mit dem namen "vereinsmitglieder" entstehen).

innerhalb der forschleife wird

1) die entsprechende datebank-tabelle (also zuerst "mitarbeiter", dann "kunden" ... etc) mit "query" abgefragt und
2) die werte aus der mysql-tabelle in das entsprechende arry übertragen

also:

for($i=0;$i<count($datenliste);$i++)
{
$result = mysql_db_query("datenbank", "SELECT * FROM $datenliste[$i] ORDER BY name");
while($row = mysql_fetch_array($result))
oder "while ($row=mysql_fetch_assoc($result))"
{

xxxxx[] = $row[name]

wobei "xxxx" beim ersten durchlauf für "mitarbeiter", beim zweiten . durchlauf "kunden" (usw) steht


} // ende der while-schleife

} // ende der for-schleife


sorry, wenn ich dich nerve ... --> und danke für deine geduld!

c4
12.08.2004, 10:22:00
Willst Du wissen, was nervig ist? Das:
--> http://selfphp.com/forum/showthread.php?threadid=8367
Das mal so am Rändchen.

Ich merke, dass ich also einen entscheidenen Teil aus Deinem Skript weggelassen habe. Nächster Versuch: $x=0;
for($i=0; $i<count($datenliste); $i++) {
$result = mysql_db_query("datenbank", "SELECT * FROM $datenliste[$i] ORDER BY name");

// Willst Du wirklich nur die Einträge in einem Array haben und später damit was machen, dann reicht das
while ($row[$datenliste[$i]][] = mysql_fetch_assoc($result));

// Ansonsten schreibst Du es wie gewohnt so
while ($row[$datenliste[$i]][$x] = mysql_fetch_assoc($result)) {
echo $row[$datenliste[$i]][$x]['feldname_aus_Abfrage'];
}
$x++;
} Alles klarofix? :)

Gweilo
12.08.2004, 10:26:39
vielleicht wirds verständlicher, wenn du dies hier (http://ch2.php.net/manual/de/function.mysql-fetch-assoc.php) (und die anderen fetches) durchliest.

Der einzige unterschied sind halt die verschiedenen arten von Ausgaben:

mysql_fetch_assoc: assoziatives array (hashtabelle)
mysql_fetch_array: assoz. array und normales array
mysql_fetch_row: nur normales array
mysql_fetch_obj: objekt

gerhard
12.08.2004, 10:27:56
ich glaub, jetzt kapier ichs ...

werds gleich praktisch ausprobieren und mich wieder melden:

-- mit lob- und jubelmeldung oder
-- dann endgültig verzeifelt

jedenfalls vorerst DANKE!

c4
12.08.2004, 10:30:29
Ein Tipp noch: Um mal wieder den Überblick über den Inhalt eines Arrays zu gewinnen, schreibst Du einfach das:print_r($array_name); Im Browser sieht das sicherlich sinnlos aus, darum tut man sich dafür einfach den den Quelltext der Seite an.

Wird Dir sicher einige Male recht nützlich sein, das Funktiönchen.