Puhh also erstmal danke für eure Hilfe, der Urlauber wird was zu hören bekommen :-)
Also ich habe das script nun soweit hingebogen dass ich es auch selbst verstehe.
Folgendes Problem ist nun in der Darstellung:
Wenn ein Kunden Produkt A mehrmals bestellt, dann wird das auch mehrmals angezeigt mit dem
Preis. ALso um das mal mit eiem Beispiel zu untermalen: Wenn ich einmal auf Produkt A
klicke, dann wird angezeigt:
Produkt 1
Das ist OK. Will ich das gleiche Produkt nochmal bestellen, dann steht dann da insgesamt:
Produkt 1
Produkt 1
aber ich hätte lieber eine solche Darstellung:
Produkt 2
Hat jemand eine Idee, wie ich das so hinbekommen kann? Also quasi ein update der produkte
bzw. der Anzahl der zu bestellenden produkte
Vielen Dank für eure Hilfe
<?php
session_start();
$db=mysql_connect("localhost","","");
mysql_select_db("shop");
if(isset($bestellen)){
session_register("produkt");
session_register("preis");
$produkt[]=$f_produkt;
$preis[]=$f_preis;
}
$result=mysql_query("select * from produkte order by id desc",$db);
echo"<table style=\'border:1px solid #000000\' align=\'center\' width=\'90%\'>";
echo"<tr><td>Produkt</td><td>Beschreibung</td><td>Preis</td><td>Bestellen</td></tr>";
while($zeile=mysql_fetch_object($result)){
echo"<tr><td>$zeile->produktname</td>";
echo"<td>$zeile->beschreibung</td>";
echo"<td>$zeile->preis</td>";
$f_produkt=$zeile->produktname;
echo"<td>
<form action=\'$PHP_SELF\'>
<input type=\'text\' name=\'f_preis\' size=\'5\'>
<input type=\'text\' name=\'f_produkt\' value=\'$f_produkt\' size=\'5\'>
<input type=\'submit\' name=\'bestellen\' value=\'bestellen\'>
</form>
</td>";
echo"</tr>";
}
echo"</table>";
echo"<br><br>";
$gesamt=count($produkt);
$n=0;
while($n<$gesamt) {
echo "$produkt[$n] $preis[$n]<br>";
$n++; }
?>
Homepage selbermachen 7.852 Themen, 35.619 Beiträge
das geht recht einfach über die funktion array=array_count_values(array), dabei wird das vorkommen eines schlüssels innerhalb eines arrays gezählt und die häufigkeit im wert abgelegt. die rückgabe ist ein array mit den schlüsseln und deren häufigkeit.
hallo Xafford,
gute idee aber es klappt nicht:
Argument to array_count_values() should be an array
Wenn ich folgendes versuche:
print_r(array_count_values ($produkt));
$produkt ist aber doch ein array ??!!
ich muß ganz ehrlich sein, ich werd aus dem script und den vielen verschiedenen variablen net so ganz schlau auf anhieb und bin gerade auch zu faul das ganze schritt für schritt auseinander zu nehmen, trotzdem kann ich mir ein paar anmerkungen nicht verkneifen.
derjenige der den shop programmiert hat hat sich wohl wenig gedanken über performance und speicher gemacht, nach meiner prognose wird der shop auf normalem webspace aller spätestens bei 3 gleichzeitigen besuchern kollabieren.
wenn du für das programm geld bezahlt hast, dann solltest du den nächsten auftrag einem anderen übertragen, wenn es allerdings ein freund gratis gemacht hat, dann war es eine nette geste und ich würde net bei ihm meckern ;o)...
jetzt zum eigentlichen shop-script:
was ist produkt und was ist f_produkt? du weist zwar produkt f_produkt zu, aber erst nach dem register, d.h. produkt ist zur zeit des register noch gar nicht mit f_produkt assoziiert. du müsstest $produkt=$f_produkt; vor dem session_register aufrufen, ich verstehe aber nicht, warum du diese zuweisung überhaupt machst, denn du verwendest so wie es scheint $produkt in einem anderen kontext innerhalb des scriptes noch einmal, der fehler mit dem nicht vorhandenen array liegt aber nur an der reihenfolge der zuweisung, denn nachdem eine variable registered ist iin der session wird in der session ihr inhalt nicht mehr geändert, alle zuweisungen müssen also vorher schon passiert sein.
Hmm also ich hab mir das nochmal angesehen und auch mal durchprobiert...zwar verstehe ich das script nicht wirklcih lückenlos, aber ich verstehe auch nicht die anwendung von array_count_values in diesem falle, denn
die daten werden ja nicht so gespeichert:
wert1, wert2, wert3....
sondern so:
produkt|a:4:{i:0;s:5:"testprodukt";i:1;s:5:"testprodukt";i:2;s:5:"testprodukt";i:3;s:5:"testprodukt";}preis|a:4:{i:0;s:2:"12";i:1;s:2:"22";i:2;s:2:"22";i:3;s:2:"22";}
weiss nicht wie man da noch die werte rauslesen will, zumindest, sieht das in meiner session so aus, wenn ich mal sein script ausprobiere (es funktioniert auch soweit)
also ich habe das grad noch einmal getestet und nachgelesen:
Wichtig ist, dass die namen der Formularelemente nicht die gleiche Bezeichnung wie die Session verwenden.
wenn man vor dem session_register $produkt[]= $f_produkt schreiben würde, würde das nicht funktionieren, aber wenn du das danach schreibst, funktionier zumindest das korrekte ein und ausgeben wieder....
jetzt versteh ich garnix mehr ;)
Hallo ihr beiden und danke aber das script ist derzeit eigentlich nur mal zur demo gedacht, serverlast ist jetzt erstmal egal. ausserdem hab ich es aus einem buch, ähnlich übernommen.
aber mich würde interessieren, wie ich (HM hat den code ja schon geschrieben, der in die sessionid geschrieben wird) da die ienzelnen werte auslesen kann mit Xaffords Tipp.
danke nochmals für eure hilfe
hi gonzales...nachfolgend findest du einen link zum quelltext des shops. er ist zwar größer als dein ursprungs-script, aber er hat ein paar mehr funktionen. leider ist es kein schöner quelltext, aber ich war heut etwas in eile ;o)
Shopscript
ps: ich wollte den quelltext eigentlich hier posten, aber das forum hat mir einen strich durch die rechnung gemacht.
Hi X, habe mir den shop mal angesehen, eine solche idee (wirklcih super *respekt* !) wäre mir nicht mal
im Traum eingefallen.
Eine Frage, weil ich gesehen habe, dass du Klassen verwendest: Ist die speicherung denn auch ohne Klassen
lösbar und trotzdem auch ohne sessionID cookie und db??
Gruss Heinz
Sorry, wenn ich da eine Anfängerfrage stelle, aber habe selbst noch nie mit klassen gearbeitet
So, ich habe auch nochmal auf die schnelle einen kleinen Shop mit Sessions
geschrieben. Das Problem ist eben auch noch: Du kannst, bzw. ich habe derzeit
keine Idee wie ich das machen soll, da ich immernoch nicht auf die einzelnen
produkte zugreifen sie löschen oder die bestellmenge ändern.
habe mal keine funktionen verwendet, kann man natürlich noch zusätzlich machen
hier mal die einzelnen dateien, die man braucht:
index.php4
bestellen.php4
warenkorb.php4
warenkorb_inc.php4
index.php4 ->
<?php
session_start();
$db=mysql_connect("localhost","","");
mysql_select_db("shop");
$result=mysql_query("select * from produkte order by id desc",$db);
echo"<table style='border:1px solid #000000' align='center' width='90%'>";
echo"<tr><td>Produkt</td><td>Beschreibung</td><td>Preis</td><td>Bestellen</td></tr>";
while($zeile=mysql_fetch_object($result)){
echo"<tr><td width='10%'>$zeile->produktname</td>";
echo"<td width='30%'>$zeile->beschreibung</td>";
echo"<td width='20%'>$zeile->preis</td>";
echo"<td width='20%'>
<a href='bestellen.php4?id=$zeile->id'>Artikel bestellen</a>
</td>";
echo"</tr>";
}
echo"</table>";
include("warenkorb_inc.php4");
?>
bestellen.php4->
<?php
session_start();
if(isset($bestellen)) {
session_register("produktname");
session_register("bestellmenge");
session_register("preis");
$produktname[]=$f_produktname;
$bestellmenge[]=$f_bestellmenge;
$preis[]=$f_preis;
}
$db=mysql_connect("localhost","","");
mysql_select_db("shop");
$result=mysql_query("select * from produkte where id='$id'",$db);
echo"<table style='border:1px solid #000000' align='center' width='90%'>
<tr><td>Artikel</td><td>Beschreibung</td><td>Bestellmenge</td><td>Preis</td></tr>";
$zeile=mysql_fetch_object($result);
echo"<td>$zeile->produktname</td><td>$zeile->beschreibung</td>
<td><form action='$PHP_SELF'>
<input type='text' name='f_bestellmenge'>
<input type='hidden' name='f_produktname' value='$zeile->produktname'>
<input type='hidden' name='f_preis' value='$zeile->preis'>
<input type='hidden' value='$id' name='id'>
<input type='submit' name='bestellen'><td>$zeile->preis</td>";
echo"<tr></table>";
echo"<br><a href='index.php4'>[ Zurück zu den Artikeln ]</a> | <a href='warenkorb.php4'>[ Zum Warenkorb und bestellen ]</a>";
include("warenkorb_inc.php4");
?>
warenkorb.php4 ->
<?php
session_start();
if($destroy=true) {
session_destroy(); }
echo"<table style='border:1px solid #000000' align='center' width='90%'>";
echo"<td>Produkt</td><td>Bestellmenge</td><td>Preis</td>";
$gesamt=count($produktname);
$n=0;
$summe=0;
while($n<$gesamt){
echo"<tr><td>$produktname[$n]</td><td>$bestellmenge[$n]</td><td>$preis[$n]</td>";
$n++; }
echo"</tr></table>";
echo"<br><a href='index.php4'>[ Zurück zu den Artikeln ]</a> | <a href='$PHP_SELF?destroy=true'>Warenkorb löschen</a>";
if(!isset($bestellen)) {
echo"<form action='$PHP_SELF?send=true'>
Name:<br> <input type='text' name='name'><br>
Abteilung:<br> <input type='text' name='abteilung'><br>
Personalnummer:<br> <input type='text' name='personalnummer'><br>
<input type='submit' name='bestellen'>
"; }
elseif(isset($bestellen)) {
echo"<br><br>Nun wird der ganze Kram in die DB eingetragen etc etc";
}
?>
warenkorb_inc.php4 ->
<?php
session_start();
if(!isset($produktname)) {
echo"<br><br>Ihr Warenkorb ist noch leer"; }
else {
echo"<hr><br><br><b>Ihr aktueller Warenkorb:</b><br><table style='border:1px solid #000000' align='center' width='90%'>";
echo"<td>Produkt</td><td>Bestellmenge</td><td>Preis</td>";
$gesamt=count($produktname);
$n=0;
$summe=0;
while($n<$gesamt){
echo"<tr><td>$produktname[$n]</td><td>$bestellmenge[$n]</td><td>$preis[$n]</td>";
$n++; }
echo"</tr></table>";
}
?>
Hi Gonzo, bezüglich deiner Mail wegen MySQL, ich weiss nicht was du mit Borlander beredet hast, aber ich versuch es mal und schreib mal einen MxSQL shop nach bestem wissen ;)