Zum Inhalt springen

PHP: Array in DropDown laden


Empfohlene Beiträge

Hi, diese lässt sich per For Schleife realisieren


echo"<select name='ausgabe' width='24%'>";
for ($i=0 ; $i<$x; $i++)
{

echo"<option value='$arryname[$i]'>";
echo"<b>$arryname[$i]</b>";

}
echo"</select>";
[/php]

Hier wird der Inhalt des Arrays durchlaufen und das Menü Select eingebunden.

Vielleicht hiflt dir das weiter

MfG Tool-Time :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

wenn du das wie Oben beschrieben machst, aber als Value nicht den Inhalt sondern die Zählvariable angibst, kannst da darüber wieder ganz leicht auf dein Array zugreifen.


<select name="MeineAuswahl" size="1">
<?php

# hier die Schleife

echo "<option value='$i'>$arryname[$i]</option>";

?>
</select>
[/php]

mit

[php]
$arrayname[$_POST["MeineAuswahl"]]

greifst du dann wieder auf das Array zu

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein Problem habe ich jetzt doch noch. Ich möchte wenn ein Wert ausgewählt wurde, dieser in meine Datenbank reingeschrieben wird.

Ich lese bis jetzt eine Textdatei aus, die erste Zeile enthält die Felder die auch im DropDown Menü angezeigt werden. Die einzelnen Felder ordne ich dann bestimmten Feldern der Datenbank zu. Jetzt müsste ich ja wissen an welcher Position das Feld steht, damit ich die Nachfolger auch in die Datenbank schreiben kann.

Wie stelle ich dies am besten an ???

MfG

Patrick

Link zu diesem Kommentar
Auf anderen Seiten teilen

Guten morgen ,

ich bin mir nicht ganz sicher ob ich dich richtig verstanden habe , aber du könntest mit einer if und else

Abfrage lösen .

Sprich if ($MeineAuswahl==1) => speicher in Datenbank Feld 1 else => speicher in Datenbank Feld 2.

bzw. es geht noch einfacher - wenn die Bezeichnung der Felder aus dem Text dem der Datenbank entprechen, dann kannst du es wie folgt machen



$db_array = mysqL_connect($mysqlhost, $mysqluser, $mysqlpassword)
if(!$db_array) echo"<div align='center'> Beim Verbinden der Datenbank ist eine Fehler aufgetretten";
else
{
mysql_select_db($mysqldb);
$sql_array = "inter into <tabellen name > (<felder der tabelle>) values (<Daten die gespeichert werden solln>) where <feldname> = dein feld
}
[/php]

Bin mir nicht ganz sicher , aber es dürfte so funktionieren :)

MfG Tool-Time

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Tool-Time


$sql_array = "inter into <tabellen name > (<felder der tabelle>)
values (<Daten die gespeichert werden solln>) where <feldname> = dein feld
}
[/php]

[/b]

Ich denke mal das soll ein Insert sein. Bei einem Insert gibt es kein WHERE. Warum auch. Du fügst ja einen neuen Datensatz ein und willst nicht irgendeine Auswahl auf irgendwas beschränken... ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Patrick

also ich weiß nicht wie es den anderen geht, aber ich weiß absolut nicht was du nun machen willst.

Vielleicht beschreibst du das Problem noch mal verständlich.

Was steht in der Datenbank?

Was soll da rein?

Was steht in der Textdatei?

Warum überhaupt eine Textdatei?

...

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe eine Textdate die meine Importdatei darstellt. Hier befinden sich die einzelnen Felder mit einem komma getrennt drinnen. Damit ich die Felder der Textdatei meinen Felder der Datenbank zuordnen kann, werden die Felder der Textdatei in ein DropDown Menü den Felder der Datenbank gegenüber gestellt.

Da ich aber die einzelnen Felder Zeilenweise aus der Textdatei importieren muss, weiss ich nicht wie ich die zuordnung erhalten kann, da der Benutzer ja nur einmal die Zuordnung bestimmen soll.

Gruß Patrick

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hier ist der Code den ich bis jetzt hinbekommen habe. Die erste Zeile meiner Importdatei wird auch in das DropDown geladen, aber ich glaube die Zuordnungen der folgenden Zeilen stimmen nicht ganz.

list($Zeile, $Inhalt) = each($GInhalt);

$FelderDatei = explode(",", $Inhalt);

while(list($Zeile, $Inhalt) = each($GInhalt))

{

$array = explode(",", $Inhalt);

for($i=0; $i < 3; $i++)

{

$FelderDatei[] = array("$FelderDatei[$Nr]" => explode("," ,$Inhalt));

}

$Nr = $Nr + 1;

}

$Nr = 0;

for($f = 0; $f < 12; $f++)

{

echo "<tr><td>";

echo "<select name='$FelderDB[$Nr]' width='24%'>";

echo "<Option value='$FelderDB[$Nr]'>";

echo "<b>$FelderDB[$Nr]</b>";

echo "</select>";

echo "</td>";

echo "<td>";

echo "<select name='Feld$Nr' width='24%'>";

for($i = 0; $i < 3; $i++)

{

echo "<Option value='$FelderDatei[$i]'>";

echo "<b>$FelderDatei[$i]</b>";

}

echo "</select>";

echo "</td></tr>";

$Nr = $Nr + 1;

echo "<br>";

}

Wo liegt mein Fehler in der Array zuordnung ???

Gruß Patrick




			
		
Link zu diesem Kommentar
Auf anderen Seiten teilen


for($i=0; $i < 3; $i++)
{
$FelderDatei[] = array("$FelderDatei[$Nr]" => explode("," ,$Inhalt));
}
[/php]

Du müsstest hier bei $FelderDatei[$i] einsetzten , damit das Array auch durchlaufen wird. Ansonsten setzte du jeweils den neuen Eintrag auf $FelderDatei[0] .

Array Beispiel :

[php]
$tp = array(a,b,c,d,e);
$worte = explode(";" , $konfig);
$lg = sizeof($worte);
for($i=0; $i<$lg; $i++)
{
$tp[$i] = $worte[$i];
}
echo"$tp[0]";
echo"<br>";
echo"$tp[1]";
.....

Du kannst nun die einzelnen Array Felder per $FelderDatei[0-x] abfragen. :)

Könntest du uns bitte einmal die ImportDatei hier Posten,

vielleicht hiflt uns diese dein Problem besser zu verstehen .

MfG Tool-Time :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Importdatei sieht wie folgt aus:

Vorname, Name, Telefon, Faxnummer, usw...

Patrick, Karré, 0179928xxx, 0618178xxx, usw....

...

Diese Daten müssen je nach zuordnung dann in die Datenbnak geschrieben werden. Die obere Lösung währe glaube ich nur für eine Zeile geeignet. Wie wäre es wenn ich mit dreidimensionalen Array´s arbeiten würde. So das der Vorname mehrere Werte bekommt, der NAchname mehrere Werte bekommt usw. Dann müsste ich doch je nach zuordnung die Daten in der richtigen reihenfolge in die Datenbank bekommen ???

Gruß Patrick

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Patrick.Karre

Die Importdatei sieht wie folgt aus:

Vorname, Name, Telefon, Faxnummer, usw...

Patrick, Karré, 0179928xxx, 0618178xxx, usw....

...

Dann müsste ich doch je nach zuordnung die Daten in der richtigen reihenfolge in die Datenbank bekommen ???

Gruß Patrick

Wenn die Zuordnung so ist wie oben beschrieben, und bei allen gleich , dann weißt du ja welcher Wert welchem Feld zu geordnen werden kann . Somit spielst du die Daten einfach per insert Befehl (siehe oben) in deine Datenbank ein.

MfG Tool-Time :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hab gerade auch sowas gemacht. Hier mal meine Lösung:



# dazu zuerst Projekte Datei einlesen
$PrjDat = "Hier steht dein Dateiname";
$fp = fopen ($PrjDat, "r");
# Datei zeilenweise in Array einlesen
$arFile = file($PrjDat);
fclose ($fp);
# nur fortfahren wenn Daten vorhanden
if (count($arFile)>1)
{
# Überschriften nicht beachten, Anfang bei $x=1
for($x=1;$x<count($arFile);$x++)
{
# Array in einzelne Felder aufspalten
$arData = explode($CSVSepChar, $arFile[$x]);
$sqlStr = sprintf($SQL_INS_PRJ, QuotedStr($arData[0]), QuotedStr($arData[1]), QuotedStr($arData[2]));
mysql_query($sqlStr);



# hier noch die Variable die für das SQL benutzt wird:
$SQL_INS_PRJ = "INSERT INTO projekte VALUES (%s, %s, %s)";

# Trennzeichen für Felder in den csv-Dateien
$CSVSepChar = ";"; # müsste bei dir ein Komma sein

[/php]

Moment, mir ist gerade aufgefallen,

dass ich das fopen und fclose ja eigentlich nicht brauche, oder?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also, mal schauen ob ich das jetzt richtig verstanden habe. Da die Importdatei leider nicht optimal angeordnet sein wird, muss ich die erste Zeile einlesen und dann meinen Feldern in der Datenbank gegenüber stellen. Durch DropDown Menüs kann ich die einzelnen Felder zuordnen. Diese Zuordnung merke ich mir. Jetzt lese ich die Textdatei zeilenweise aus, schaue nach welcher Wert in dem Array welche zuordnung bekommen hat und spiele diese dann in die Datenbank ein. Das Spiel wiederhole ich so oft, bis alle zeilen von der Rextdatei in die Datenbank reingeschrieben worden ist.

Stimmt dies so, oder macht ich gerade einen denkfehler ???

Gruß Patrick

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Patrick.Karre

Also, mal schauen ob ich das jetzt richtig verstanden habe. Da die Importdatei leider nicht optimal angeordnet sein wird,

Warum das denn? Oder soll diese Importfunktion für beliebige Dateien funktionieren?

Ansonsten kannst du doch vorgeben, wie die Feldreihenfolge aussehen soll. Das ist dir programmiererische Freiheit ;)

Ich (besser gesagt nicht ich, ich hab dann aber geholfen das zu lösen) hab letztens auch so ein Problem gehabt. Ein Importprogramm für Adressdaten konnte Daten aus csv-Dateien einlesen, nur brauchte es ein ganz spezielles Format dieser Dateinen (Feldreihenfolge war noch das geringste Problem). Das war übrigend kein Programm von irgendeinem Hersteller, aber es war auch nicht MS ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn der Aufbau der Datei offen sein soll, würde ich das so lösen :

Der ersteller der Datei muss in der ersten Zeile der Datei seinen Aufbau nach dem Schema wie oben , angeben.

Nun kommen die einzelnen Werte getrennt mit einem , .

Da du ja den Aufbau der Datei in der ersten Zeile hast, kannst du nun die Abfragen ob Wert 1 => Nachname oder Vorname .... per if und else realisieren.

MfG Tool-Time :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also das mit den Spaltennamen in der ersten Zeile ist nach dem CSV-Dateiformat so vorgegeben. Spalten werden mit ',' voneinander getrennt, in der ersten Zeile die Spaltennamen und dann je Datensatz eine neue Zeile.

Nur Excel macht das natürlich wieder nur mit ';' als Spaltentrenner... MS eben :rolleyes:

Mach es doch einfach so, dass du die Spaltennamen in einer Tabelle anzeigst. Je Spaltenname eine Zeile. Neben dem Spaltennamen machst du ein Input-Feld, in das man die Position des Feldes eingeben muss (also 1 oder 3 oder 10 usw.)

Diese Inputs liest du auch in ein Array, das ja dann genausogross wie das mit dem Spaltennamen ist und schon hast du eine Zuordnung:


  $ArrayMitNamen     $ArrayAusInputs

      Feld1                     1

      Feld2                     3

      Feld3                     2

          .                       .

          .                       .


Das ist nicht ganz so schön und komfortabel, aber es ist recht einfach zu machen.

Ansonsten reicht es doch für ein Insert wenn du die Feldnamen hast:


"INSERT INTO ZIEL ($ZIELFELD1, $ZIELFELD3, $ZIELFELD2) SELECT $QUELLFELD1, $QUELLFELD2, $QUELLFELD3 FROM QUELLE"
[/php]

Das SQL müsste so eigentlich funktionieren...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...