PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dropdown Menüs - brauche Hilfe


jwg
01.11.2003, 10:59:00
Guten Tag an Alle!

Ich habe folgend beschriebenes Problem.

Aus einer Datenbank wird ein Dropdownmenü mit dem Inhalt der Länder automatisch erstellt.

Wenn der Benutzer nun hieraus z. B. Deutschland auswählt, so soll ein 2. Dropdown Menü generiert werden, das ebenfalls aus einer Datenbank die Bundesländer auswählt, jedoch nur die aus Deutschland.

Wie erreiche ich es, das nach Auswahl im 1. Menü (Länder) ohne drücken des Submit-Buttons eine Aktion ausgelöst wird, damit der Inhalt des 2. Menüs (Bundesländer generiert wird?.

Danke für die Unterstützung im voraus.

Grüße
jwg

Gweilo
01.11.2003, 11:22:31
entweder indem du das script selbst aufrufen lässt für die Auswahl deutschland, oder per JavaScript.

Die erste variante geht so:
im Select kannst du einen onchange trigger machen-
onchange="window.document.das_form.submit();"
Dann wird die PHP seite erneut geladen, mit der Auswahl Deutschland, wo du dann die Bundesländer ausgeben kannst.

Bei der zweiten Variante musst du direkt bei onchange (falls die Wahl Deutschland war) die Bundesländer ausgeben (die BL-Daten müssen bereits ausgegeben werden - dem JavaScript zugänglich sein), um das Dropdownmenu sichtbar zu machen.

jwg
01.11.2003, 11:41:43
@Gweilo,

vielen Dank für die Aisführung, doch ich verstehe es nicht.

Habe mein Skrip nun so umgebaut, dass ich den onchange="window.document.das_form.submit()
eingebaut habe.

Wenn ich jetzt etwas auswähle )z. B. Deutschland, so wird das Skript neu geladen, jedoch die Auswahl Deutschland verschwindet im Menü!

Was mache ich felsch?

Gruß jwg
>



<tr>
<td width="50%" align="right">Land:</td>
<td width="50%">
<form method="POST" action="<? echo $PHP_SELF ?>">
<!-- <form method="POST" action="phpinfo.php"> !-->
<p><select size="1" name="dland[]" onchange="self.document.forms[0].submit()">
<option></option>
<?

///////////////////////////////////////////////////////////////////////////
// Listeneintrag für jedes Land erstellen. //
///////////////////////////////////////////////////////////////////////////

// <input type="button" value="Fett" " />

for ($i = 0; $i < $anzahl; $i++)
{
$row = mysql_fetch_row($result);
echo "<option>$row[0]</option>";
}

?>

Gweilo
01.11.2003, 12:38:19
sehr eigenartig. Gibts durch das ausführen etwa eine änderung in der Query?

Im Übrigen brauchst du nicht bei jedem onchange das Script neu zu laden, sondern nur, wenn von ~Deutschland auf Deutschland gewechselt wird, oder von Deutschland auf ein anderes Land (~Deutschland bedeutet nicht-Deutschland, sprich ein anderes Land.) Diese Info musst du halt ausgeben, damit JavaScript weiss, was angewählt wurde. (lass das erst mal weg, bis es anständig funktioniert)

Nochwas. Wenn du das script neu lädst solltest du das angewählte Land auch anwählen (selecten).

jwg
01.11.2003, 12:57:09
@Gweilo,

Nochwas. Wenn du das script neu lädst solltest du das angewählte Land auch anwählen (selecten).

Aber wie?


///////////////////////////////////////////////////////////////////////////
// Listeneintrag für jedes Land erstellen. //
///////////////////////////////////////////////////////////////////////////

// <input type="button" value="Fett" " />

$auswahl = 1;

for ($i = 0; $i < $anzahl; $i++)
{
$row = mysql_fetch_row($result);
echo "<option selected value = $auswahl>$row[0]</option>";
$auswahl++;
}

Habe so stets den letzen Eintrag, in diesem Fall Österreich hierin.

Ich blicke jetzt bals selbst nicht mehr durch!

Danke für die Hilfe

Gruß
jwg

Gweilo
01.11.2003, 13:16:54
$result=mysql_query("SELECT id,land FROM laender ORDER BY land ASC");
?>
<select size="1" name="land" onchange="self.document.forms[0].submit()">
<option></option>
<?
$land = $_POST['dland'];
while ($row = mysql_fetch_row($result))
{
($land==$row[1])?$selected=" selected":$selected="";
// kurzschreibweise für if-else, wenn das angezeigte land gleich dem gewählten land ist
?><option value="<?=$row[0]?>"<?=$selected?>><?=$row[1]?></option><?
}


so ungefähr sollte es klappen.

jwg
01.11.2003, 15:12:05
vielen Danl, werde es ausprobieren.

Schönen Tag noch.

Grüße jwg

jwg
01.11.2003, 15:58:35
@Hallo Gweilo,

habe es versucht, bekomme jedoch beim parsen stets Fehler gemeldet!

Schreibe mir doch bitte den Schleifenblock

While .......

{


}


nicht in Kurzform, sondern in einzelnen Zeilen. Hier fällt mir die Orientierung leichter.
Der Grund ist, ich bin noch nicht so fit um Deinen komprimierten Code
klar lesen und umsetzen zu können.


Vielen Dank.


Gruße jwg

Gweilo
01.11.2003, 19:44:14
Hi JWG

($land==$row[1])?$selected=" selected":$selected="";

bedeutet so viel wie:

if ($land==$row[1])
{
$selected=" selected";
}
else
{
$selected="";
}

der rest ist normale HTML ausgabe. dazwischen werden einzelne PHP-variablen ausgegeben, das geschieht so:
<?=$var?>
bedeutet so viel wie:
<?PHP echo $var; ?>

Sag doch mal, was für ein Fehler ausgegeben wird, und in welcher Zeile!

jwg
02.11.2003, 11:30:21
@Hallo Gweilo,

also, ich habe mir gestern den Code von Dir über die Zwischenablage in mein File kopiert.

Nun bekomme ich Programmgesteuert die Meldung, "auf die Tabelle konnte nicht zugegriffen werden". Als Anzeige erscheint nur noch das erste Dropdown-Menü. In diesem sind die drei Länder "Schweiz, Deutschland, Österreich" enthalten. Nach der Auswahl eines der Länder wird der Code aktualisiert, es erscheint obige Meldung und die Anzeige in Dropdown Menü ist leer.

Verflixt oder?

Schicke Dir mal meinen aktuellen Code.

Viele Grüße und einen schönen Sonntag.

Grüße JWG



<?
///////////////////////////////////////////////////////////////////////////
// Abfrage, welche Länder in der Datenbank sind. //
///////////////////////////////////////////////////////////////////////////

$sql = "select distinct land_bezeichnung from land order by land_bezeichnung";
$result = mysql_query($sql, $session_id)
or die ("Auf die Tabelle konnte nicht zugegriffen werden");
$anzahl = mysql_num_rows($result);

?>



<tr>
<td width="50%" align="right">Land:</td>
<td width="50%">
<form method="POST" action="<? echo $PHP_SELF ?>">
<!-- <form method="POST" action="phpinfo.php"> !-->
<p><select size="1" name="dland[]" onchange="self.document.forms[0].submit()">
<option></option>
<?

///////////////////////////////////////////////////////////////////////////
// Listeneintrag für jedes Land erstellen. //
///////////////////////////////////////////////////////////////////////////

$land = $_POST['dland'];

while ($row = mysql_fetch_row($result))
{
if ($land==$row[0])
echo "<option selected value=$land>$row[0]</option>";
else
echo "<option value=$row[0]>$row[0]</option>";
}

?> <p>&nbsp;</td>
</tr>

Gweilo
02.11.2003, 11:45:35
$result = mysql_query($sql, $session_id)

wofür ist das 2. Argument da? Nimm's mal raus, und probier nochmals

jwg
03.11.2003, 08:31:24
@Hallo Gweilo,

$result = mysql_query($sql, $session_id)

Habe nun das 2. Argiment entnommen, der Effekt ist jedoch identisch.
Ich kann eines der Länderauswählen, die Anzeige des 2. Menüs (Bundesländer) entfällt.

Dafür kommt die Meldung:("Auf die Tabelle konnte nicht zugegriffen werden") und die Anzeige des ausgewählten Landes verschwindet.

Zunächst vielen Dank für Deine Bemühungen, ich kann so langsam diesen Effekt nicht mehr verstehen!

Grüße JWG

Gweilo
03.11.2003, 13:36:29
Hi, JWG

gib mal den Output der relevanten Stelle (der Dropdown) an, und der relevante PHP SourceCode

Gruss,
Gweilo

jwg
03.11.2003, 16:48:06
Hi,

der Output ist der, dass ich wohl zwischen den drei Ländern auswählen kann, jedoch bleibt in dem DropDown-Menü stets der erste Eintrag "Bitte auswählen" enthalten.

Ich habe mir schon Testfelder gemacht, die beim ersten Durchlauf leer sind, beim 2. Durchlauf haben beide Felder den gleichen Inhalt, er müßte es übertragen.

Wenn Du willst, kann ich Dir gern das gesamte Script zumailen.

Herzlichen Dank.

Gruß JWG


<?php

///////////////////////////////////////////////////////////////////////////
// Die Variable $sid als Session_ID definieren. //
//Danach wird die Session mit der alten ID neu gestartet //
///////////////////////////////////////////////////////////////////////////

// session_id($sid);
session_start();


///////////////////////////////////////////////////////////////////////////
// Verbindung zum Server aufbauen mit Fehlerausgang //
///////////////////////////////////////////////////////////////////////////

$session_id = mysql_pconnect("localhost", "DB51986", "zkrd")
or die("Datenbankverbindung ist gescheitert:");

///////////////////////////////////////////////////////////////////////////
// Verbindung zur Datenbank aufbauen mit Fehlerausgang //
///////////////////////////////////////////////////////////////////////////

mysql_select_db("DB51986", $session_id)
or die("Datenbank konnte nicht geöffnet werden".mysql_error());

?>

<html>

<head>
<meta http-equiv="Content-Language" content="de">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>suchen</title>
</head>
<body>

<table border="0" width="100%">
<?
///////////////////////////////////////////////////////////////////////////
// Abfrage, welche Länder in der Datenbank sind. //
///////////////////////////////////////////////////////////////////////////

$sql = "select distinct land_bezeichnung from land order by land_bezeichnung";
$result = mysql_query($sql)
or die ("Auf die Land-Tabelle konnte nicht zugegriffen werden");
$anzahl = mysql_num_rows($result);

?>



<tr>
<td width="50%" align="right">Land:</td>
<td width="50%">
<form method="POST" action="<? echo $PHP_SELF ?>">
<!-- <form method="POST" action="phpinfo.php"> !-->
<p><select size="1" name="dland[]" onchange="self.document.forms[0].submit()">
<option selected value="Bitte auswaehlen">Bitte auswaehlen</option>
<?

///////////////////////////////////////////////////////////////////////////
// Listeneintrag für jedes Land erstellen. //
///////////////////////////////////////////////////////////////////////////

$land = $_POST['dland'];
$anz = 1;
while ($row = mysql_fetch_row($result))
{
if ($land==$row[1])
// echo "<option selected value=$land>$row[0]</option>";
echo "<option selected value=$row[2]>$row[0]</option>";
else
echo "<option value=$anz>$row[0]</option>";
$anz++;

}
echo "Land = $land";

?> <p>&nbsp;</td>
</tr>
<?

Gweilo
03.11.2003, 18:59:00
Hiho


$sql = "select distinct land,id from laender order by land ASC";
$result = mysql_query($sql)
or die ("Auf die Land-Tabelle konnte nicht zugegriffen werden");
?>

<tr>
<td width="50%" align="right">Land:</td>
<td width="50%">
<form method="POST" action="<? echo $PHP_SELF ?>">
<p>
<select size="1" name="dland" onchange="self.document.forms[0].submit()">
<option selected value="Bitte auswaehlen">Bitte auswaehlen</option>
<?

///////////////////////////////////////////////////////////////////////////
// Listeneintrag für jedes Land erstellen. //
///////////////////////////////////////////////////////////////////////////

$land = $_POST['dland'];
$anz = 1;
while ($row = mysql_fetch_row($result))
{
$selected = ($land==$row[1])?" selected":"";
echo "<option value=$row[1]$selected>$row[0]</option>n";
}
?>
</select>
<?
if ($land==80) // ID von Deutschland
echo "Deutschland wurde angew&auml;hlt";

?> <p> </td>
</tr>
<?


geändert habe ich die $anz variable, die hab ich rausgenommen, da es nicht ganz geht, da du ja nicht unbedingt die gleiche landes-ID hast, wie es grad durchnummeriert.

Auch geändert hab ich den Select name ohne Brackets. Diese eckigen klammern braucht man bloss bei multi-select-feldern.

im übrigen würde ich $PHP_SELF mit dem Ausdruck $_SERVER['irgendwas'] ersetzen. habs grad nicht auswendig im kopf, musst du halt im php_info() nachschauen.

Gruss,
Gweilo

jwg
04.11.2003, 08:17:33
@Hallo Gweilo,

Herzlichen Dank für Deine Mühe, Hilfe und Unterstützung. Es funktioniert.
Toll und ein dickes Kompliment, Du hast meinen Logigfehler erkannt und uneigennützig einige Zeit investiert, daher nochmal vielen Dank.

Grüße JWG

Gweilo
04.11.2003, 13:38:23
Ich bin froh, dass meine Hilfe geschätzt wird.