PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei switch anweisung und auswahlfeldern gesucht


damohsta
15.02.2007, 10:44:31
Morgen zusammen,
habe ein problem das ich gestern schonmal versucht habe über JS zu lösen...war aber leider mit denkfehler. Jetzt hab ich mir mal überlegt wie das ganze mit php aussehen könnte. Allerdings bin ich sehr unsicher in der syntax und mir nicht sicher ob das so alles funzt:

Was soll das Programm wie leisten?
1. Aus zwei Auswahlfeldern soll jeweils eine Auswahl getroffen werden. Den Auswahlpunkten von AuswahlA habe ich Werte von 1-3 zugewiesen, den Auswahlpunkten von AuswahlB Werte in 10er schritten. Dadurch ergibt sich bei der addition dieser beiden werte immer ein eindeutiges Ergebnis.

Dann sollen die beiden Werte einfach miteinander addiert werden und das Ergebnis mit $_Summe gleich gesetzt werden. Nun kommt eine switch Anweisung welche den wert von summe prüft. Bei den hier gegeben Auswahlfeldern ergeben sich somit 6 mögliche Cases. Sobald bei der Prüfung also $_Summe einem der Case-Werte entspricht, soll im inputfeld Preis der im Case hinterlegte Wert erscheinen.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Angebotsseite</title>
</head>
<body>
<?php
//Anlegen der Variablen
$_AuswahlA = 0;
$_AuswahlB = 0;
$_Summe = 0;
$_Preis = 0;

$_Summe = $_AuswahlA + $_AuswahlB;

switch($_Summe){
case 11:
$_Preis = 100;
break;
case 12:
$_Preis = 200;
break;
case 13:
$_Preis = 300;
break;
case 21:
$_Preis = 400;
break;
case 22:
$_Preis = 500;
break;
case 23:
$_Preis = 600;
break;
?>

<table width="288" border="1" cellspacing="2" cellpadding="0">
<tr>
<td>Menge</td>
<td>Art</td>
<td>Preis</td>
</tr>
<tr>
<td><select id="AuswahlB" name="AuswahlA" size="1">
<option value="1">1000</option>
<option value="2">2000</option>
<option value="3">3000</option>
</select></td>
<td><select id="AuswahlB" name="AuswahlB" size="1">
<option value="10">1-farbig</option>
<option value="20">2-farbig</option>
</select></td>
<td><input type="text" id="preis" name="preis" readonly size="14"></td>
</tr>
</table>
<b>Bestellen</b>
<p>

</p>
</body>

</html>

Wenn mir jemand sagen kann wie ich jetzt die werte aus den Auswahlfeldern in meine Variablen $_AuswahlA und $_AuswahlB bekomme, bin ich schon nen schritt weiter.

Grüße Marco

feuervogel
15.02.2007, 11:14:16
1. du musst variablen nicht anlegen. in deinem fall überschreibst du sie sogar, was sinnfrei ist, weil dann ist $_Summe immer 0.

2. wie man formular-eingaben verarbeitet, findest du in einem der ersten beiden links in meiner signatur.

p.s.: wieso fangen bei dir die variablen-namen mit einem _ an?

damohsta
15.02.2007, 11:26:36
zu 1/3. Also nur $varname. Hab hier so ein alten php buch wo die variablen mit _ drin stehen *achselzuck*.

zu 2.link werd ich mir gleich reinziehen, danke schonmal ;)

damohsta
15.02.2007, 11:49:01
Hab jetzt mal die variablendeeklaration am anfeng weggelassen. Das Php pack ich dann in ne sepparate Datei, hier jetzt nur drinnen gelassen ums kurz zuhalten. Wie sag ich jetzt aber das die in AuswahlA getroffene Auswahl an die Variable $AuswahlA übergeben werden soll? Die Auswahl und deren ID auch mit $AuswahlA benennen?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Angebotsseite</title>
</head>
<body>
<?php
//datei: preisberechnung.php

$Summe = $AuswahlA + $AuswahlB;

switch($_Summe){
case 11:
$_Preis = 100;
case 12:
$_Preis = 200;
case 13:
$_Preis = 300;
case 21:
$_Preis = 400;
case 22:
$_Preis = 500;
case 23:
$_Preis = 600;
?>

<table width="288" border="1" cellspacing="2" cellpadding="0">
<tr>
<td>Menge</td>
<td>Art</td>
<td>Preis</td>
</tr>
<tr>
<td>
<form action="preisberechnung.php" method="post">
<select id="AuswahlB" name="AuswahlA" size="1">
<option value="1">1000</option>
<option value="2">2000</option>
<option value="3">3000</option>
</select>
</form>
</td>
<td>
<form action="preisberechnung.php" method="post">
<select id="AuswahlB" name="AuswahlB" size="1">
<option value="10">1-farbig</option>
<option value="20">2-farbig</option>
</select>
</form>
</td>

<td><input type="text" id="summe" name="summe" readonly size="14"></td>
</tr>
</table>
<b>Bestellen</b>
<p>

</p>
</body>

</html>

damohsta
15.02.2007, 13:47:43
Kann mal einer drüber schauen ob ich mich auf dem richtigen weg befinde? ;)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Angebotsseite</title>
</head>
<body>
<?php
//datei: preisberechnung.php ....dann in ausgelagerter datei....
$auswahla = (int) $_post["AuswahlA"]
$auswahlb = (int) $_post["AuswahlB"]
$Summe = $auswahla + $auswahlb;

switch($_Summe){
case 11:
$_Preis = 100;
break;
case 12:
$_Preis = 200;
break;
case 13:
$_Preis = 300;
break;
case 21:
$_Preis = 400;
break;
case 22:
$_Preis = 500;
break;
case 23:
$_Preis = 600;
break;
?>

<table width="288" border="1" cellspacing="2" cellpadding="0">
<tr>
<td>Menge</td>
<td>Art</td>
<td>Preis</td>
</tr>
<tr>
<td>
<form action="preisberechnung.php" method="post">
<select id="AuswahlB" name="AuswahlA" size="1">
<option value="1">1000</option>
<option value="2">2000</option>
<option value="3">3000</option>
</select>
</td>
<td>
<select id="AuswahlB" name="AuswahlB" size="1">
<option value="10">1-farbig</option>
<option value="20">2-farbig</option>
</select>
</form>
</td>

<td><input type="text" id="summe" name="summe" readonly size="14"></td>
</tr>
</table>
<td><input type="submit" id="senden" name="senden" readonly size="14"></td>
<p>

</p>
</body>

</html>

BenniG.
15.02.2007, 13:50:33
Ich schätze du bist mit php eh auf dem falschen Weg.. Du willst ja, dass die Summe sofort erscheint und nicht erst nach Absenden des Formular, oder?
Da bliebe Dir nur Javascript, oder halt doch das Formular abschicken..

damohsta
15.02.2007, 14:22:15
Wieso? Ich kann doch ein onchange per javascrit in der html einsetzten welches bei jeder änderung der auswahl das php neu startet oder?

Sollte dann irgendwie in diese richtung gehen....auch wenn so leider noch nix läuft ;/

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Angebotsseite</title>
</head>
<body>
<script type="text/javascript">

<table width="288" border="1" cellspacing="2" cellpadding="0">
<tr>
<td>Menge</td>
<td>Art</td>
<td>Preis</td>
</tr>
<tr>
<td>
<form action="preisberechnung.php" method="post" onchange="preisberechnung.php()">
<select id="AuswahlB" name="AuswahlA" size="1">
<option value="1">1000</option>
<option value="2">2000</option>
<option value="3">3000</option>
</select>
</td>
<td>
<select id="AuswahlB" name="AuswahlB" size="1" onchange="preisberechnung.php()">
<option value="10">1-farbig</option>
<option value="20">2-farbig</option>
</select>
</form>
</td>

<td><input type="text" id="summe" name="summe" readonly size="14"></td>
</tr>
</table>
<td><input type="submit" id="senden" name="senden" readonly size="14"></td>
<p>

</p>
</body>

</html>

und PHP:
<?php
//datei: preisberechnung.php ....dann in ausgelagerter datei....
$auswahla = (int) $_post["AuswahlA"]
$auswahlb = (int) $_post["AuswahlB"]
$Summe = $auswahla + $auswahlb;

switch($_Summe){
case 11:
$Preis = 100;
break;
case 12:
$Preis = 200;
break;
case 13:
$Preis = 300;
break;
case 21:
$Preis = 400;
break;
case 22:
$Preis = 500;
break;
case 23:
$Preis = 600;
break;

echo "$Preis"
?>

BenniG.
15.02.2007, 14:26:11
Ehm, sorry, aber du scheinst da einiges durcheinander zu würfeln.. PHP wird auf dem Webserver abgearbeitet. Du kannst nichts an der Seite ändern, ohne dass die Seite neu geladen (oder per Ajax=>Javascript ein Request abgesetzt wird).
Da du so oder so JS brauchst kannst du die Anzeige gleich in JS machen.. Oder halt das Formular komplett neu laden..

damohsta
15.02.2007, 14:39:38
Ehm, sorry, aber du scheinst da einiges durcheinander zu würfeln..

Genau deshalb bin ich ja hier und frage ;)

PS: Da ich das ding da eh als bestellung versenden muss, komm ich um php aber auch net rum. Hatte das gestern schonmal alles mit JS versucht, allerdings mit einigen denkfehlern.

damohsta
15.02.2007, 14:58:49
Die Variante mit JS sieht übrigens so aus. Auch hier sind einige noch einige fehler drinnen und somit nicht lauffähig ;/

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
<script type="text/javascript">
//<![CDATA[

var menge= 0;
var art = 0;
var zahlart = 0;
var preis = 0;

document.getElementById("summe").value = document.getElementById("menge").value + document.getElementById("art").value;

function rechne() {
summe = document.getElementById("art").value;
switch(summe){
case "11":
artfaktor = 1;
break;
case "12":
artfaktor = 1.2;
break;
}
document.getElementById("preis").value = document.getElementById("artfaktor").value;


}

window.onload = rechne;

//]]>
</script>

</head>
<body>
<table width="288" border="1" cellspacing="2" cellpadding="0">
<tr>
<td>Menge</td>
<td>Art</td>
<td>Preis</td>
</tr>
<tr>
<td><select id="menge" name="menge" size="1" onchange="rechne()">
<option value="1">1000</option>
<option value="2">2000</option>
<option value="3">3000</option>
</select></td>
<td><select id="art" name="art" size="1" onchange="rechne()">
<option value="10">1-farbig</option>
<option value="20">2-farbig</option>
</select></td>
<td><input type="text" id="summe" name="summe" readonly size="14"></td>
</tr>
</table>
<b>Bestellen</b>
<p>

</p>
</body>

</html>

BenniG.
15.02.2007, 15:09:31
schau mal ob dir das hilft:
Wie du deinen Preis jetzt genau generierst hab ich allerdings nicht kapiert.. Aber so tut sich zumindest schonmal was..

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
<script type="text/javascript">
//<![CDATA[


function rechne() {
var summe = parseInt(document.getElementById("menge").value) + parseInt(document.getElementById("art").value);
var ausgabe = 0;
switch(summe){
case 11:
ausgabe = 92;
break;
case 12:
ausgabe = 110;
break;
case 13:
ausgabe = 120;
break;
case 21:
ausgabe = 192;
break;
case 22:
ausgabe = 210;
break;
case 23:
ausgabe = 220;
break;


}
document.getElementById("summe").value = ausgabe;
}

window.onload = rechne;

//]]>
</script>

</head>
<body>
<table width="288" border="1" cellspacing="2" cellpadding="0">
<tr>
<td>Menge</td>
<td>Art</td>
<td>Preis</td>
</tr>
<tr>
<td><select id="menge" name="menge" size="1" onchange="rechne()">
<option value="1">1000</option>
<option value="2">2000</option>
<option value="3">3000</option>
</select></td>
<td><select id="art" name="art" size="1" onchange="rechne()">
<option value="10">1-farbig</option>
<option value="20">2-farbig</option>
</select></td>
<td><input type="text" id="summe" name="summe" readonly size="14"></td>
</tr>
</table>
<b>Bestellen</b>
<p>

</p>
</body>

</html>

damohsta
15.02.2007, 15:25:00
Hab nochmal zugeschrieben was die einzelnen schritte eigentlich leisten sollen.

Generell geht es bei der rechnung um folgendes: Ich habe eine Auswahl A, in der ich die menge des produktes wähle und eine Auswahl B, in der ich die art des Artikels festlege, also 1-farbig oder 2-farbig..usw. Da die werte nicht linear sind, weil von unterschiedlichen dienstleistern andere preise da sind, muss ich für jede auswahlkombinatin einen festen preis hinterlegen.

Diese eindeutigkeit will ich wie folgt lösen:
AuswahlA 1. erhält Wert 1
AuswahlA 2. erhält Wert 2
AuswahlA 3. erhält Wert 3

AuswahlB 1. erhält Wert 10
AuswahlB 2. erhält Wert 20

Daraus ergibt sich bei einer Addition der gewählten Werte eines der folgenden ergebnisse:
11,12,13,21,22 und 23.

Dann kommt die switch überprüfung....wenn also der ist wert einem der case werte entspricht wird preis auf einen bestimmten wert festgelegt.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
<script type="text/javascript">
// Variablen deklarieren

var menge= 0;
var art = 0;
var summe = 0;
var zahlart = 0;
var preis = 0;

// Die Werte, welcher durch Auswahl menge und Auswahl art festgelegt wurden mit Summe Gleich setzten
document.getElementById("summe").value = document.getElementById("menge").value + document.getElementById("art").value;

// Wenn Summe einem der Case-Werte entspricht wird ausgabe ein Wert zugewiesen.
function rechne() {
switch(summe){
case "11":
ausgabe = 92;
break;
case "12":
ausgabe = 110;
break;
case "13":
ausgabe = 120;
break;
case "21":
ausgabe = 192;
break;
case "22":
ausgabe = 210;
break;
case "23":
ausgabe = 220;
break;


}
// Preis wird mit ausgabe gleich gesetzt ...jetzt sollte eigentlich der Preis auch im inputfeld
// Preis angezeigt werden....
document.getElementById("preis").value = document.getElementById("ausgabe").value;


}

window.onload = rechne;

//]]>
</script>

</head>
<body>
<table width="288" border="1" cellspacing="2" cellpadding="0">
<tr>
<td>Menge</td>
<td>Art</td>
<td>Preis</td>
</tr>
<tr>
<td><select id="menge" name="menge" size="1" onchange="rechne()">
<option value="1">1000</option>
<option value="2">2000</option>
<option value="3">3000</option>
</select></td>
<td><select id="art" name="art" size="1" onchange="rechne()">
<option value="10">1-farbig</option>
<option value="20">2-farbig</option>
</select></td>
<td><input type="text" id="preis" name="preis" readonly size="14"></td>
</tr>
</table>
<b>Bestellen</b>
<p>

</p>
</body>

</html>

BenniG.
15.02.2007, 15:30:18
Ich habs dir in mein letztes Post mal eingebaut, dann muss ich das hier nicht so zumüllen..

damohsta
15.02.2007, 16:07:20
Sry, wollte dir nur zeigen wie ich´s meinte ;/

danke dir für deine hilfe!