Formulare und Variablen

schicksal

Member
22 März 2010
8
0
Hallo zusammen,

seit Tagen sitze ich vor einem Problem an den ich fast Verzweifle, ich hoffe mir kann da jemand weiterhelfen.

Folgendes:

Ich habe vor ein Bestellscript zu bauen welches nach auswahl des Produktes direkt den Preis anzeigt, das funktioniert ja soweit schon mittels JS, mein Problem ist ich habe eine Datenbank erstellt wo diese Produkte gelistet sind und wenn man auf der Bestellseite dieses Produkt wählt finde ich derzeit keine Lösung wie das mittels der Variable den Wert also die Produkt ID übergeben kann so dass man diese weiterverabeiten kann.

Hier der code:

<head><script type="text/javascript" language="javascript" src="test.js"></script>
</head>
<table border="0" cellpadding="0" cellspacing="0" width="55%" class="shoptabelle">

<form name="total" action="test.php" method="post"><tr><td>
Artikel</td><td>


<select name="ProID[]" id="ProID0" onChange="neuerPreis()">
<option value="100">Artikel1 (+1,00 EUR)</option>
<option value="101">Artikel2 (+2,00 EUR)</option>
<option value="102">Artikel3 (+3,00 EUR)</option>
<option value="103">Artikel4 (+4,00 EUR)</option>
<option value="104">Artikel5 (+5,00 EUR)</option>
</select>
</td></tr>

<input type="submit" value="ProID[]">
</form>
<input type="text" name="endbetrag" " value="Gesamtpreis:  6,00 EUR inkl. MwSt.">
</table>




und hier die test.php

<?php
session_start();
include("dbconnect.php");
$sql = "select id, proname, prodesc, proanzeige, propreis from Produkte";
$result = mysql_query($sql) or die (mysql_error());
?>
<?php
$ergebnis = mysql_query("SELECT * FROM Produkte WHERE id LIKE '".$_POST[ProID]."%'");
while($row = mysql_fetch_object($ergebnis))
{
echo "ID: ";
echo $row->pronummer;
echo "<br>Produkt: ";
echo $row->proname;
echo "<br>Beschreibung: ";
echo $row->prodesc;
echo "<br>Preis:";
echo $row->propreis;
echo "€";
echo "<br>Preis zum Grundpreis: ";
echo $row->proanzeige;


}
?>
 
Wofür sind die eckigen Klammern im Namen der Select-Box (name="ProID[]")?
Wenn du das Ding nur "ProID" nennst, sollte es eigentlich klappen. (Mal davon abgesehen, dass man einen geposteten Wert nicht auf diese Art direkt in ein SQL-Query übernehmen sollte.)
 
Die klammer ist raus und die rechenfunktion geht noch nur übermittelt das Script keine Daten aus der DB sondern bringt alle in der DB vorhandenen Daten raus und nicht die Selektierten. zb value = "101"
 
Zuletzt bearbeitet:
Hast versuchst die variable einfach mal mit echo "..."; ausgeben zu lassen?
Mal zu schauen ob/was da übergeben wird.
Aber ich glaube ja dass [] im Feld-Namen zu einem Array führt ... also müsstest du dann wahrscheinlich mit $_POST[ProID['0']] an die übergeben variable dran kommen.

Kannst ja mal print_r($_POST); versuchen. Weil ... irgendwas wird ja da sein müssen, nur unter welchem namen ^^
 
Danke für die Info es wird dann die ausgewählte Value ausgebene
"Array ( [ProID] => 101 )" nur wie verarbeite ich das jetzt weiter?
 
Wenn das bei print($_POST); kommt, sollte es ja mit $_POST[ProID] schon funktionieren, schon mal mit $_POST['ProID'] probiert?
 
ich habe das Script mal etwas weitergebaut, jetzt kommt mit dem Befehl <? print_r($_POST); ?> folgendes raus. zb.


Array ( [ProID] => Array ( [0] => 100 [1] => 201 [2] => 303 [3] => 404 [4] => 505 ) [gesamtpreis] => Gesamtpreis: 15,60 EUR inkl. MwSt. )


wie kann ich jetzt die Einzellnen Werte ausgeben? zb. [3] dann gehts leider nicht mehr als wenns nur ein Wert war.

Der Inhalt der Datenbank wird wenn ich zb. $_POST['ProID[3]'] annehme komplett ausgegeben
 
Der Inhalt der Datenbank wird wenn ich zb. $_POST['ProID[3]'] annehme komplett ausgegeben
$_POST['ProID[3]'] ist nicht gesetzt, wenn ich mir die print_r-Ausgabe anschaue. Ausgabe genau lesen: $_POST['ProID'] ist ein Array, also greif auch ordentlich drauf zu: $_POST['ProID'][3]
 
Ich danke Dir für die Antwort :)

so sieht nun die Ausgabe aus...


<?php
$ergebnis = mysql_query("SELECT * FROM Produkte WHERE id LIKE '".$_POST[ProID][3]."%'");
while($row = mysql_fetch_object($ergebnis))
{
echo "ID: ";
echo $row->pronummer;
echo "<br>Produkt: ";
echo $row->proname;
echo "<br>Beschreibung: ";
echo $row->prodesc;
echo "<br>Preis:";
echo $row->propreis;
echo "€";
echo "<br>Preis zum Grundpreis: ";
echo $row->proanzeige;


}
?>

Funktioniert auch.

wenn ich jetzt aber mehrer Einträge mit ausgeben will also nicht nur .$_POST[ProID][3]. sondern auch .$_POST[ProID][1]. wie realisiere ich denn soetwas?
 
Zuletzt bearbeitet:
hm... mit einer while-schleife den sql-code erweitern ... fällt mir spontan nur ein. also sowat:
PHP:
while(current($_POST['ProID'])!="")
{
$in.="'".current($_POST['ProID'])."',";
next($_POST['ProID']);
}
$in.="'0'";
$ergebnis = mysql_query("SELECT * FROM Produkte WHERE id IN (".$in.");

while($row = mysql_fetch_object($ergebnis))
{
//Ausgabe
}

Denke so sollte es klappen. Wahrscheinlich lässt sich das auch eleganter lösen, bisjetz hab ich (leider) alles mit while gelöst. Wenns besser geht, meldet sich bestimmt ein anderer.

Und statt dem LIKE 'ID%", heisst es jetzt IN('id1','id2',...), wozu eig. Das %, dann zeigt er bei der auswahl von "100" doch auch "1001" an ... oder "100xyz", oder bin ich da falsch informiert?
 
Leider ging der letzte code irgendwie gar nicht trotz herumprobieren mit allem möglichen. Allerdings habe ich eine feine Alternative gefunden die genau so funktioniert wie ich mir das Vorgestellt habe.


<?php
session_start();
include("dbconnect.php");
$sql = "select id, proname, prodesc, proanzeige, propreis from Produkte";
$result = mysql_query($sql) or die (mysql_error());
?>

<?php
if (isset( $_POST['op'] ))
{
for ($loop = 0; $loop < count( $_POST['ProID'] ); $loop++)
{



$ergebnis = mysql_query("SELECT * FROM Produkte WHERE id LIKE '".$_POST[ProID][$loop]."%'");
while($row = mysql_fetch_object($ergebnis))
{


echo $row->prodesc;
echo "<br>";

}
}

}
?>

<?php
echo $_POST["moneytotal"];
?>


es wird nun alles das angezeigt was angezeigt werden soll.

Mein nächster Schritt ist diese Daten per E-Mail zu versenden, dazu müsste allerdings noch ein weiteres Formular entstechen wo man zb. die E-Mail Adresse eingibt. Ich weiss nicht ob es möglich ist die Daten über dieses Formular mitzusenden, aber ich denk mal schon.

Ich danke euch erstmal für eure Hilfe, da es tatsächlich einige Denkfehler ausgemärzt hat. Also vielen Dank :D:D:D
 
wieder ein Problem

Hallo nochmal und schon gehts weiter mit den Array Problemen :-?

Ich habe vor das Ergebnis des letzten Beitrags über nachfolgende Formular weiterzuschleifen ohne das es sichtbar ist. Geht ja damit ganz gut.

<?php
foreach($_POST as $key => $value) {
echo '<input type="hidden" name="'.$key.'" value="'.$value.'">';
}
?>

wird alles was im vorherigen Formular war mitgenommen bis auf ProID da kommt nach dem Befehl print_r($_POST); folgendes raus.

Array ( [ProID] => Array [moneytotal] => Gesamtpreis: 14,00 EUR inkl. MwSt. [x] => 60 [y] => 22 )

wiegesagt einige Variablem werden übertragen und einige nicht und wo kommt [x] => 60 [y] => 22 her? was ist das? kann mir da jemand helfen?


hier mal das ganze Script das weitergeschleift werden soll...


<table cellpadding="0" cellspacing="0" width="653" height="271">

<tr>
<td valign="top" rowspan="4">
<img border="0" src="../img/micro_button2.jpg" width="80" height="80"></td>
<td valign="top">
<p align="left"><b>
<font class="title" color="#0000CC" size="5" face="Verdana">Artikel</font></b></td>
<td height="30"></td>
</tr>
<tr>
<td></td>
<td height="10"></td>
</tr>
<tr>
<td valign="top"><font color="#0000CC" size="2">Artikel
Server</font></td>
<td height="23"></td>
</tr>
<tr>
<td valign="top"><font color="#0000CC" size="2">Artikel Nr.: 104</font></td>
<td height="24"></td>
</tr>
<tr>
<td width="80"> </td>
<td width="572" valign="top"><font color="#0000CC"><b>Ihre Auswahl: </b>
</font>
<table cellpadding="0" cellspacing="0" width="572" height="23">

<tr>
<td width="572" height="23"><font size="2" color="#0000CC"><br><br><?php
session_start();
include("dbconnect.php");
$sql = "select id, proname, prodesc, proanzeige, propreis from Produkte";
$result = mysql_query($sql) or die (mysql_error());
?>

<?php
if (isset( $_POST['moneytotal'] ))
{
for ($loop = 0; $loop < count( $_POST['ProID'] ); $loop++)
{



$ergebnis = mysql_query("SELECT * FROM Produkte WHERE id LIKE '".$_POST[ProID][$loop]."%'");
while($row = mysql_fetch_object($ergebnis))
{


echo $row->prodesc;
echo "<br>";

}
}

}
?>
</font>
<br><br>
<font size="3" color="#0000CC">
<?php
echo $_POST["moneytotal"];
?>
</font>
</td>
</tr>
</table>

<form name="cprice" action="index.php?ID=Kundendaten" method="post">

<?php
foreach($_POST as $key => $value) {
echo '<input type="hidden" name="'.$key.'" value="'.$value.'">';
}
?>

<p><font color="#0000CC"></p>
<div class="buttoncalc"></p></form>
<table cellpadding="0" cellspacing="0" width="535" height="37">

<tr>
<td width="263">
<a href="index.php?ID=Seite3">
<img border="0" src="../img/aendern.jpg"></a></td>
<td height="37" width="272">
<input src="../img/bestaetigen.jpg" type="image"></form></td>
</tr>
</table>

</td>

</tr>
</table>
 
Zuletzt bearbeitet:
1. Der Editor für die Beiträge hier im Forum hat oben so nette Knöpfe, wie z.B. den zweiten von rechts, auf dem "php" steht. Damit wird dein geposteter Code deutlich lesbarer.

2. Eigentlich musst du dir nur überlegen, was denn dein Code-Schnipsel tut: Es wird für jede Variable, die per POST übergeben wird ($_POST['xxxx']='yyyy'), ein verstecktes Input-Feld mit Name "xxxx" und Wert "yyyy" angelegt. Und was übergibst du per POST für die ProID? Richtig, ein Array, und keinen einzelnen Wert. Wie sollte denn dann ein Inputfeld aussehen, das daraus erzeugt wird?

PHP:
<input type="hidden" name="ProID" value="array(a,b,c,d)">
oder wie? Klappt so wohl nicht...

Ist die gepostete Variable ein Array, musst du die Werte einzeln aus dem Array auslesen und in Felder stopfen (z.B. mit einer foreach-Schleife über das Array $_POST['ProID']).
Nachdem du aber ja für die Datenbankabfrage sowieso schon eine Schleife über alle Produkt-IDs machst, könntest du ja auch innerhalb dieser Schleife die einzelnen Produkt-IDs als Felder für dein neues Formular anlegen.

3. Das x und y sind - wenn ich mich recht erinnere - die Koordinaten, an welcher Stelle das Bild angeklickt wurde, das du im vorhergehenden Formular als Submit-Button genutzt hast. Ist dir also wahrscheinlich völlig egal. Damit macht aber dann die foreach($_POST)-Schleife nicht mehr wirklich viel Sinn, da du diese Werte ja dann trotzdem als Hidden Inputs anlegen würdest, auch wenn sie dir total egal sind. Besser wäre es wohl, genau diejenigen Felder wieder als Inputs anzulegen, die du auch haben willst (wäre dann ja auch nur noch der Gesamtpreis).
 
Bin mir zwar nicht sicher, aber es könnte daran liegen dass foreach so nicht mit multidimensionalen arrays funzt. müsstest für ProID eigene foreach-schleifen anlegen, also sowat

PHP:
foreach($_POST['ProID'] as $key => $value) {
echo '<input type="hidden" name="'.$key.'" value="'.$value.'">';
}

Dann hast du eben auch dieses x un y drin was du wahrscheinlich nicht brauchst.
So wie es ja aussieht hat ProID ja nur 1 Wert was du nutzen willst, kannst ja also auch ohne schleife in ein hidden-feld packen.

Und ob der Wert "Gesamtpreis: 14,00 EUR inkl. MwSt." so gut zum weiterverarbeiten ist ... sei erst mal dahin gestellt ^^