php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 25-03-2008, 09:13
Olli4
 Registrierter Benutzer
Links : Onlinestatus : Olli4 ist offline
Registriert seit: Mar 2008
Beiträge: 112
Olli4 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Array mit Datenbankfeldnamen füllen und ausgeben

Guten Morgen

Ich habe dieses Forum vorhin entdeckt und muss sagen wirklich tolles Forum. Habe schon einige nützliche Tipps hier gefunden die ich bereits benötigt habe.

Jedoch habe ich auch schon meine erste Frage und hoffe jemand von euch kann mir da helfen und hoffe ich habe den Thread nicht zu unübersichtlich gemacht.

Ich verwende bisher den Code den ich am ende dieses Posts habe, um etwas aus einer Datenbank in einen Array zu packen und anschliessend dann so auch wieder zu importieren. Dies funktioniert wunderbar.

Nun möchte ich das umschreiben, damit ich eine grössere Tabelle einfügen kann und auch mehrere datensätze: Mal genauer erklärt:
Die Tabelle sieht so aus:
Code:
test2
-test2id
-begruendung
-test2status
-guest
-ats
-gtaktiv
-gtyon
-weitere Felder
Mit dieser Tabelle bekomme ich leider weder den export noch den import hin. Bei der anderen Tabelle waren es wenige felder, so das ich diese im array angeben konnte. Hier wären es fast zuviele, weshalb ich die felder ggf im array automatisch benennen möchte um nicht jedes aufzuzählen, und möchte so z.B. 5 einträge exportieren und importieren.

Kann mri da einer ein Codeschnippsel geben oder weiterhelfen wie ich das bewerkstelligen kann? Habe schon schnippsel gefunden mit mysql_num_fields um die feldernamen zu bekommen. Aber komme damit leider nicht wirklich weiter.

Danke schonmal für jede Hilfe.

Gruss Olli4

Hier was ich bisher habe:
Zitat:
Ich habe bisher eine Tabelle die so aussieht:
Code:
testelements
-testid
-testelement
-testvalue
So exportiere ich das ganze in den array:
PHP-Code:
$data['test'] = array();
$data['test']['testelements'] = array();
$result _mysql_query("SELECT * FROM testelements WHERE testid='1'");
while (
$row mysql_fetch_array($result)) $data['test']['testelements'][$row['testelement']]
= array(
"testelement" => $row['testelement'], "testvalue" => $row['testvalue']); 
Und so Importiere ich das ganze wieder:
PHP-Code:
if (isset($data['test']['testelements']) && count($data['test']['testelements'])) {
 while (list(, 
$testelement) = each($data['test']['testelements'])) 
mysql_unbuffered_query("INSERT INTO testelements (testelement, testvalue)
VALUES ('"
.addslashes($testelement['testelement'])."', '".addslashes($testelement['testvalue'])."')");


Geändert von Olli4 (25-03-2008 um 11:31 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 25-03-2008, 11:28
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Bitte brich mal als erstes deinen Code um. Ich scrolle nur einmal nach rechts, um den Antwortbutton zu finden.
Und dann versuche nochmals dein aAnliegen verständlich zu formulieren. Willst du einfach etwas aus einer Tabelle exportieren, und dann in eine identische wieder einlesen? Oder was auch immer. Das mit den x-fach verschachtelten Arrays ist kaum die Lösung. Aber wie gesagt zuerst eine präzise Problembeschreibung.
__________________
Gruss
H2O
Mit Zitat antworten
  #3 (permalink)  
Alt 25-03-2008, 11:36
Olli4
 Registrierter Benutzer
Links : Onlinestatus : Olli4 ist offline
Registriert seit: Mar 2008
Beiträge: 112
Olli4 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von H2O
Bitte brich mal als erstes deinen Code um. Ich scrolle nur einmal nach rechts, um den Antwortbutton zu finden.
Und dann versuche nochmals dein aAnliegen verständlich zu formulieren. Willst du einfach etwas aus einer Tabelle exportieren, und dann in eine identische wieder einlesen? Oder was auch immer. Das mit den x-fach verschachtelten Arrays ist kaum die Lösung. Aber wie gesagt zuerst eine präzise Problembeschreibung.
Hi

Tschuldige bitte. Habe es nun geändert.

Also folgendes:
In meinem beispiel was bereits funktioniert, werden alle werte in diesen Array $data gespeichert.
Diese werte werden später dann verarbeitet und in einer datei exportiert.
Später kann ich diese Datei dann einlesen, dies wird wieder in den array gelesen und in eine entsprechende Datenbank gelesen (wie im untersten teil des codes gezeigt)

Das selbe möchte ich nun mit einer grösseren Tabelle machen. Bei der kleinen habe ich einfach dies:
PHP-Code:
while ($row mysql_fetch_array($result)) $data['test']['testelements'][$row['testelement']]
= array(
"testelement" => $row['testelement'], "testvalue" => $row['testvalue']); 
Aber bei grösseren Tabellen wäre dies sehr umständlich jedes einzelne Feld so einzutragen. Daher suche ich eine lösung, dass der arraywert selber beim feldnamen eingelesen wird und mir dieser erstellt wird.

Dies habe ich FAST mit diesem Code nun geschafft.
PHP-Code:
    $result="SELECT * FROM test2";
    
$resultmysql_query($result);
    while (
$row mysql_fetch_array($result,MYSQL_NUM)) {
     for(
$i=0;$i<mysql_num_fields($result);$i++) {
      
$key=mysql_field_name($result,$i);
      
$data[$key]=$row[$i];
     }
    } 
Jedoch scheint hier noch etwas zu fehlen oder falsch zu sein, da ich mit print_r nur die ausgabe eines Eintrages in der Datenbank bekomme, obwohl mehrere einträge bereits gespeichert sind. Aber ob dies richtig ist, damit ich dies dann wieder so einlesen kann weiss ich nicht genau. Dies war nur mal ein versuch es hinzubekommen.

Was bei dem Code oben noch fehlt, was ich auch noch nicht hinbekommen habe wäre in dem array ein array mit datenbankname, wo er den datenbankname einspeichert, und diesen wert dann für das importieren im zweiten teil verwenden würde da ich am schluss mehr als eine Tabelle gleichzeitig exportieren möchte.

Ich hoffe ich konnte es ein wenig besser erklären.

Danke schonmal für deine Mühe hier zu antworten.

Gruss

Olli4

Geändert von Olli4 (25-03-2008 um 11:47 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 25-03-2008, 12:00
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Was spricht denn gegen:
PHP-Code:
$data = array();
$sql "
    SELECT
        attr_1,
        attr_2,
        ...
    FROM
        tabelle"
;
$res mysql_query($sql) || or die(mysql_error());
while (
$row mysql_fetch_assoc($res)){
    
$data[] = $row;

Oder verstehe ich dich immer noch falsch?
__________________
Gruss
H2O
Mit Zitat antworten
  #5 (permalink)  
Alt 25-03-2008, 12:05
Shurakai
 Master
Links : Onlinestatus : Shurakai ist offline
Registriert seit: May 2004
Ort: Bergisch Gladbach
Beiträge: 3.084
Shurakai ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@H20: Benutzt du immer ein doppeltes oder?
Mit Zitat antworten
  #6 (permalink)  
Alt 25-03-2008, 12:07
Olli4
 Registrierter Benutzer
Links : Onlinestatus : Olli4 ist offline
Registriert seit: Mar 2008
Beiträge: 112
Olli4 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi

Herzlichen Dank. Ich kam einfach nciht auf die Idee.

Im ersten Thread hast du ja gesehen, wie ich diese dann wieder in die Datenbank einspiele. Könntest du mir da eventuell nochmals helfen und sagen wie dies bei diesem Code aussehen müsste?

Gäbe es ggf ne möglichkeit den Datenbankname mit zu übergeben? Also das ich beim wieder einspielen nicht den datenbanknamen direkt angebe, sondern das er diesen auch aus dem array lesen kann falls ich mal beim array erstellen mehr als nur eine tabelle einlese?

Danke nochmals.

Gruss Olli4
Mit Zitat antworten
  #7 (permalink)  
Alt 25-03-2008, 12:55
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
@H20: Benutzt du immer ein doppeltes oder?
Wie reagiert denn eigentlich PHP auf so was? Fatal Error, Warning oder Notice? Würde mich wundernehmen (kann's aber nicht testen, da ich bei der Arbeit kein PHP habe)

Gruss

tobi
EDIT:

Frage beantwortet
Zitat:
Parse error: syntax error, unexpected T_LOGICAL_OR in ****/misc/test/upload.php on line 3

__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

Geändert von jahlives (25-03-2008 um 13:00 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 25-03-2008, 13:34
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Shurakai
@H20: Benutzt du immer ein doppeltes oder?


@Olli4
Ich vermute, dass du nicht den Datenbank- sondern den Tabellennamen meinst. Nun spricht grundsätzlich nichts dagegen, diesen als Element 0 im Array zu speichern. Er muss dann einfach vor dem Import wieder raus.
Der Import könnte dann etwa so aussehen:
PHP-Code:
$table $data[0];
unset(
$data[0]);
$values = array();
foreach (
$data as $zeile){
    
$values[] = "('" implode("', '"$zeile) . "')";
}
$sql "
    INSERT INTO $table (" 
implode(', 'array_keys($data[1])) . ")
    VALUES (" 
implode(', '$values) . ")";
mysql_query($sql) ..... 
Selbstverständlich ungetestet.
Aber ehrlich gesagt, kann ich mir nicht vorstellen, wozu so etwas gut sein soll.
__________________
Gruss
H2O
Mit Zitat antworten
  #9 (permalink)  
Alt 25-03-2008, 13:41
Olli4
 Registrierter Benutzer
Links : Onlinestatus : Olli4 ist offline
Registriert seit: Mar 2008
Beiträge: 112
Olli4 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo

Danke schonmal.

Dies soll eine Art schnittstelle zwischen zwei laufenden Projekten sein um keinen externen mysql Zugriff zu benötigen damit man ab und an so etwas exportieren kann.

Zu deinem Code:
Den Import habe ich zwar noch nicht getestet, jedoch frage ich mich ob da nicht irgendwas fehlt. Weiss aber nicht was oder wie ändern.

- Wird bei diesem Import den du hier hast nicht nur ein Fehld eingetragen? Beim export können ja so auch z.B. 10 Einträge drin sein.
- Wie könnte ich denn den Tabellennamen besser übergeben? Das Problem wäre ja, dass ich dies ggf gerne erweitern würde um nicht nur werte aus einer Tabelle zu exportieren.

Danke schonmals für deine wirklich gigantische Hilfe.

Gruss

Olli4

Geändert von Olli4 (25-03-2008 um 13:45 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt 25-03-2008, 14:44
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Olli4

- Wird bei diesem Import den du hier hast nicht nur ein Fehld eingetragen?
In meinem Beispiel werden soviele Zeilen, wie der Array $data enthält, importiert. Und jede dieser Zeilen enthält soviel Attribute, bzw Felder, wie die ursprüngliche Tabelle. Das fertige INSERT-Statement sieht dann z.B etwa so aus
Code:
INSERT INTO tabelleA (feld1, feld2, feld3, ..., feld7)
	VALUES ('xx', 'yy', '77', ..., '99'), 
		   ('ab', 'bc', '1', ..., '999'), 
		   ..., 
		   ('erstes Feld', 'abcde', '-888', ..., '0')
Den Tabellennamen kannst du ja auch in eine beliebige Variable schreiben. Aber da du sowieso für jede Tabelle einen eigenen Array benötigst, ist das im Beispiel nicht das dümmste. Natürlich könntest du auch alle Tabellen in einen Array schreiben, indem du einfach eine zusätzliche Dimmension, die z.B. als zusätzlichen Index den Tabellennamen enthält. Da ich aber sehe, dass du so schon Mühe hast, und dauernd Datenbank, Tabelle, Felder Zeilen etc verwechselst, würde ich dir davon abraten.
__________________
Gruss
H2O
Mit Zitat antworten
  #11 (permalink)  
Alt 25-03-2008, 15:26
Olli4
 Registrierter Benutzer
Links : Onlinestatus : Olli4 ist offline
Registriert seit: Mar 2008
Beiträge: 112
Olli4 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von H2O
In meinem Beispiel werden soviele Zeilen, wie der Array $data enthält, importiert. Und jede dieser Zeilen enthält soviel Attribute, bzw Felder, wie die ursprüngliche Tabelle. Das fertige INSERT-Statement sieht dann z.B etwa so aus
Code:
INSERT INTO tabelleA (feld1, feld2, feld3, ..., feld7)
	VALUES ('xx', 'yy', '77', ..., '99'), 
		   ('ab', 'bc', '1', ..., '999'), 
		   ..., 
		   ('erstes Feld', 'abcde', '-888', ..., '0')
Den Tabellennamen kannst du ja auch in eine beliebige Variable schreiben. Aber da du sowieso für jede Tabelle einen eigenen Array benötigst, ist das im Beispiel nicht das dümmste. Natürlich könntest du auch alle Tabellen in einen Array schreiben, indem du einfach eine zusätzliche Dimmension, die z.B. als zusätzlichen Index den Tabellennamen enthält. Da ich aber sehe, dass du so schon Mühe hast, und dauernd Datenbank, Tabelle, Felder Zeilen etc verwechselst, würde ich dir davon abraten.
Hallo

Ja dies verwechsle ich beim schreiben/beschreiben oft. In der Praxis aber nicht.

Darf ich dich denn hier nochmals nerven und fragen wie ich die zusätzliche Dimension ala ['tabellenname'] in den array bekomme und das ganze Problem so dass es eigentlich gehen sollte wie nun unten beschrieben mit dem export und import (einfach die zeilen für den array schreiben und auslesen mit dem insert?

Beim Insert habe ich mich wohl etwas falsch ausgedrückt. Entschuldige bitte. Beim Export soll am ende eigentlich folgendes möglich sein:
Tabelle 1 (z.B. 3 Datensätze)
Tabelle 2 ( z.B. 1 Datensatz)
Tabelle 3 (z.B. 5 Datensätze)
Entschuldige bitte die verwirrung die ich hier gestifftet habe.

Ist dies denn möglich dies in den array zu packen mit der zusätzlichen Dimension und darf ich dich nochmals bitten mir hierbei zu helfen? Habe nun lange gesucht und auch rumgebastelt. Bekomme aber das komplette nicht so richtig hin.

Gruss Olli4

Geändert von Olli4 (25-03-2008 um 15:30 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 25-03-2008, 15:53
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Dynamisches Auslesen mehrerer Tabellen in einen Array:
PHP-Code:
// $tabellen = Liste der zu exportierenden tabellen
foreach ($tabellen as $tabelle){
    
$data[$tabelle] = array();
    
$sql "SELECT * FROM $tabelle"
    
$res mysql_query($sql) || or die(mysql_error());
    while (
$row mysql_fetch_assoc($res)){
        
$data[$tabelle][] = $row;
    }

Ausnamsweise mit SELECT * FROM
Und as Gegenstück dann etwa:
PHP-Code:
foreach ($data as $table => $tabelle){
    
$values = array();
    foreach (
$tabelle as $zeile){
        
$values[] = "('" implode("', '"$zeile) . "')";
    }
    
$sql "
        INSERT INTO $table (" 
implode(', 'array_keys($zeile)) . ")
        VALUES (" 
implode(', '$values) . ")";
    .....

Wozu das allerdings gut sein soll, ist mir immer noch unklar. Wenn du die Daten einfach in eine andere DB übertragen willst, kannst du das doch direkt mit
PHP-Code:
INSERT INTO db2.tabelle SELECT from DB1.tabelle 
lösen.
__________________
Gruss
H2O
Mit Zitat antworten
  #13 (permalink)  
Alt 25-03-2008, 16:37
Olli4
 Registrierter Benutzer
Links : Onlinestatus : Olli4 ist offline
Registriert seit: Mar 2008
Beiträge: 112
Olli4 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke nochmals.

Du bist super.

Danke nochmals für alle deine Hilfe wirklich genial.

Gruss Olli4

Geändert von Olli4 (25-03-2008 um 17:44 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:10 Uhr.