confirm abhängig von select-Auswahl
Daniel
- javascript
0 Dieter Raber0 Daniel0 Dieter Raber0 Daniel0 Dieter Raber0 Daniel0 Dieter Raber0 Daniel
Hallo @ all!
Ich habe folgendes Problem:
In einem Formular habe ich über eine Suchanfrage eine Combobox dynamisch (mittels PHP und MySQL) gefüllt. Nun hat der Nutzer die Möglichkeit, ein Ergebnis auszuwählen und über einen Button dieses in die Datenbank zu schreiben. Das klappt auch alles.
Nun möchte ich aber, dass abhängig davon, welches Ergebnis ausgewählt wurde, ein confirm-Fenster erscheint und den Nutzer fragt, ob er das wirklich tun möchte. Da dieses aber nicht bei allen Datensätzen abgefragt werden brauch, soll die confirm-Meldung eben nur bei einigen Ergebnissen erscheinen.
Mir ist schon klar, dass ich dafür eine neue DB-Abfrage machen muß(was auch nicht das Problem ist), jedoch "hänge" ich einfach an dem Problem serverseitig<-->browserseitig...
Hallo Daniel,
Du legst in der Datei, die die Funktion bestaetigen() oder wie immer die heisst, ein leeres Array an, sagen wir conf_required = new Array();
Dann fuellst Du im PHP-Script deine Selectbox in der while-Schleife nach der DB-Abfrage. Diejenigen Eintraege, die ein confirm() erfordern, schiebst Du derweil in ein Array, sagen wir $conf_arr.
Nach der while-Schleife faengst Du einen neuen String mit <script type="text/javascript"> an
und haengst mit foreach fuer alle $conf_arr ein conf_required.push() an, mit andern Worten du fuellst den Javascript-Array mit den Daten aus dem PHP-Array
Jetzt kannst Du auf der fertigen mit onchange auf der Selectbox dein Javascriptereignis aufrufen, dabei jedesmal durch den conf_required durchgehen und nachschauen ob du ein confirm() machen willst oder nicht.
Gruß,
Dieter
Hallo, Dieter!
Vielen Dank erst einmal für Deine Antwort!
Was ich jetzt noch nicht ganz verstanden habe, ist folgendes: Wie fülle ich das JavaScript-Array mit dem Inhalt des PHP-Arrays? Innerhalb des neu angefangenen Javascriptes oder noch in PHP?
Daniel
Hallo Daniel,
Ich mach Dir mal ein Beispiel, und behaupte in der Tabelle waere ein Feld 'conf' ggf. mit den Texten fuer die Bestaetigung
$query = 'SELECT...
$result = mysql_query ...
while($data = mysql_fetch_assoc($result))
{
// In $data stehen, der Wert der Option, der Text und der Bestaetigungstext
$options .= '<option value="' . $data['value'].... // da befuellst du deine Selectbox
if(!empty($data['conf']))
{
$js_arr[$data['value']] = $data['conf'];// assoziatives Array mit Optionwert als Key
}
}
$js_string = "<script type="text/javascript">\n";
foreach($js_arr as $key => $value)
{
$js_string .= 'JSConfArray[' . $key . '] = ' . $value . ";\n";
}
$js_string .= "<script>\n";
Im Ergebnis sieht das so aus
<select ... onchange="bestaetigen....>
<option value="foo"....
</select>
<script type="text/javascript">
JSConfArray[foo] = 'Wollen Sie das foo wirklich loeschen';
JSConfArray[bar] = 'Wollen Sie das bar wirklich ueberschreiben';
</script>
Jetzt kannst Du mit for..in jedesmal das Array darauhin durchsuchen, ob eine Betaetigung erforderlich ist, und wenn ja, mit welchem Text.
Gruß,
Dieter
Hallo, Dieter!
Vielen Dank für Deine Mühe. Ich habe es jetzt (fast) genauso umgesetzt, aber irgendwie will es noch nicht laufen. Ich poste hier mal die wichtigen Quellcodestellen:
//MySQL-Abfrage:
$result3 = mysql_query ("SELECT * FROM ....");
//Combobox und Hilfsarray:
printf ("<SELECT NAME="oidv" SIZE="%s">\n", min (5, mysql_num_rows ($result3)));
while ($row3 = mysql_fetch_array ($result3)) {
printf ("<OPTION VALUE="%s">%s\n", $row3["VOID"], $row3["Name"]);
if($row3["OID"]==0)
$pruefung[$row3["VOID"]]=0;
else $pruefung[$row3["VOID"]]=1;
}
echo "</SELECT>";
//String für JS-Array und JS-Funktion:
$js_string = "\n<script type="text/javascript">\n";
foreach($pruefung as $key => $value)
{
$js_string .= 'JS_Array[' . $key . '] = ' . $value . ";\n";
}
$js_string .= "function Ueberpruefen(v_oid){\n";
$js_string .= "if(JS_Array[v_oid]==1){\n";
$js_string .= "ok=confirm("Dieser Veranstaltungsort besitzt bereits ein Objekt. Überschreiben?");} \n";
$js_string .= "return ok;}\n";
$js_string .= "</script>\n\n";
echo $js_string;
//Darstellung Button und Aufruf JS-Script
echo "<BR><INPUT TYPE="SUBMIT" NAME="addVera" onclick= " return Ueberpruefen(window.document.addVeraForm.oidv.options[window.document.addVeraForm.oidv.options.selectedIndex].value);" VALUE="Hinzufügen"></td>";
Vielen Dank!
Daniel
Hallo Daniel,
1. Was geht nicht, gibt es eine Fehlermeldung?
2. Wie sieht die fertige Seite im Quelltext aus?
Gruß,
Dieter
Hallo, Dieter!
zu1.: Der ausgewählte DS wird ohne die gewünschte Abfrage einfach in die DB geschrieben.
zu2.:
...
<OPTION VALUE="1029">a
<OPTION VALUE="1030">b
<OPTION VALUE="1268">c
<OPTION VALUE="1468">d
<OPTION VALUE="1598">e
<OPTION VALUE="2025">f
<OPTION VALUE="1841">g
<OPTION VALUE="1842">h
<OPTION VALUE="1983">i
<OPTION VALUE="1843">j
</SELECT>
<script type="text/javascript">
JS_Array = new array();
JS_Array[1029] = 0;
JS_Array[1030] = 0;
JS_Array[1268] = 0;
JS_Array[1468] = 1;
JS_Array[1598] = 1;
JS_Array[2025] = 0;
JS_Array[1841] = 1;
JS_Array[1842] = 1;
JS_Array[1983] = 0;
JS_Array[1843] = 0;
function Ueberpruefen(v_oid){
alert(JS_Array[v_oid])
if(JS_Array[v_oid]==1){
ok=confirm("Dieser Veranstaltungsort besitzt bereits ein Objekt. Überschreiben?");
return ok;}
else return true;}
</script>
...
<INPUT TYPE="SUBMIT" NAME="addVera" onclick= " return Ueberpruefen(window.document.addVeraForm.oidv.options[window.document.addVeraForm.oidv.options.selectedIndex].value);" VALUE="Hinzufügen">
...
Danke!
Daniel
Hallo Daniel,
Erstmal die formalen Sachen
Zum Javascript
Im Ergebnis sieht das so aus:
<form name="addVeraForm" action="foo.php" onsubmit="return Ueberpruefen(this.oidv.options[this.oidv.options.selectedIndex].value)">
<select name="oidv">
<option value="1029">a</option>
<option value="1468">d</option>
</select>
<script type="text/javascript">
JS_Array = new Array();
JS_Array[1029] = 0;
JS_Array[1468] = 1;
function Ueberpruefen(v_oid)
{
if(JS_Array[v_oid] == 1) //confirm() ausgeben oder nicht
{
ok = confirm("Dieser Veranstaltungsort besitzt bereits ein Objekt. Überschreiben?");
if(ok) // ok geklickt oder cancel?
{
return true;// wenn ok, dann abschicken
}
else return false; // wenn cancel, nicht abschicken
}
else return true;// Kein confirm(), also abschicken
}
</script>
...
<input type="submit" name="addVera">
Gruß,
Dieter
Hallo, Dieter!
Jetzt geht es! Vielen, vielen Dank für Deine Mühe und auch für die Hinweise zum JavaScript-Debugger!
Viele Grüße!
Daniel
Hallo Daniel,
Jetzt geht es! Vielen, vielen Dank für Deine Mühe und auch für die Hinweise zum JavaScript-Debugger!
Prima, gerngeschen!
Gruß,
Dieter