 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
29.05.2008, 15:02
|
#1
|
|
TP-Senior
Registriert seit: Sep 2002
Ort: Schaffhausen/Schweiz
|
Warenkorb
Bin fleissig am Lernen mit Kevin Yank. Ich habe mir aus seinem PHP-Buch einen Warenkorb "gebastelt".
Klappt auch alles mit session und Warenkorb. Die (Beispiel)-Produkte befinden sich in einem Array:
PHP-Code:
<?php
$items = array( "DVD Standard", "DVD Premium", "DVD Deluxe");
$Prices = array( 24.90, 49.90, 79.90 );
?>
Diese Produkte werden nun alle aufgelistet:
PHP-Code:
<?php
for($i = 0; $i < count($items); $i++) {
echo("<tr>");
echo("<td>".$items[$i]."</td>");
echo("<td>Euro ".number_format($Prices[$i],2,",",".")."</td>");
echo("<td><a href='$PHP_SELF?buy=$i'>Kaufen</a></td>");
echo("</tr>");
}
?>
Und genau hier stolpere ich; Wie kann ich nur einen Artikel ausgeben, also zum Beispiel nur "DVD Standard",
damit dieser dann über "Kaufen" auch im Warenkorb landet ?
|
|
|
29.05.2008, 15:09
|
#2
|
|
TP-Veteran
Registriert seit: May 2006
|
Bei DVD-Standard wäre es
PHP-Code:
echo $items[0].'<br>' echo $prices[0]
Allerdings ist das ja ein sehr komisches Beispiel... 
__________________
...Meine Meinung
1984
|
|
|
30.05.2008, 15:43
|
#3
|
|
TP-Senior
Registriert seit: Sep 2002
Ort: Schaffhausen/Schweiz
|
Warenkorb
Dachte schon es wird einfach, aber es klappt leider nicht nach Wunsch.
Wenn ich deinen Vorschlag folgendermassen anwende:
PHP-Code:
<?php
for($i = 0; $i < count($items); $i++) {
echo $items[0];
echo $prices[0];
echo("<a href='$PHP_SELF?buy=$i'>Kaufen</a>");
}
?>
werden mir (logischerweise) alle items des arrays mit dem Wert von [0] ausgegeben.
Wenn ich folgendes anwende:
PHP-Code:
<?php
echo $items[0];
echo $prices[0];
echo("<a href='$PHP_SELF?buy=$i'>Kaufen</a>");
?>
wird nichts in den Warenkorb geschrieben. Was muss ich an Stelle von
PHP-Code:
'$PHP_SELF?buy=$i'
angeben?
|
|
|
30.05.2008, 17:28
|
#4
|
|
TP-Moderator
Registriert seit: Jun 2004
Ort: Hannover
|
$_server['php_self']...
Edit:
Blöde Anti- Schreien Funktion.. Muss natürlich groß geschrieben werden.
__________________
Je größer der Deppenfaktor, desto gigantischer das Bescheidwissergefühl
-Dieter Nuhr
|
|
|
30.05.2008, 19:17
|
#5
|
|
TP-Senior
Registriert seit: Sep 2002
Ort: Schaffhausen/Schweiz
|
Nun, es muss auch Schwachsinnige geben, denn ich schaffs nicht.
Ich poste mal die funktionierenden beiden Scripts Produkte & Warenkorb:
PHP-Code:
<?php
$shoppingcart = array();
session_start();
session_register('shoppingcart');
if ($buy != "") {
// Artikel am Ende des Arrays $shoppingcart einfügen
$shoppingcart[] = $buy;
header("Location: $PHP_SELF?".SID);
exit();
}
?>
<html>
<head>
<title>Produkte</title>
</head>
<body>
<?php
$items = array( "Standard", "Premium", "Deluxe");
$Prices = array( 25.00, 45.00, 75.00 );
?>
<table border="1">
<tr>
<th>Artikelbeschrieb</th>
<th>Preis</th>
</tr>
<?php
for($i = 0; $i < count($items); $i++) {
echo("<tr>");
echo("<td>".$items[$i]."</td>");
echo("<td>Euro ".number_format($Prices[$i],2,",",".")."</td>");
echo("<td><a href='$PHP_SELF?buy=$i'>Kaufen</a></td>");
echo("</tr>");
}
?>
</table>
</body>
</html>
PHP-Code:
<?php
$shoppingcart = array();
session_start();
session_register('shoppingcart');
if ($empty != "") {
// Array $shoppingcart leeren
session_unregister("shoppingcart");
header("Location: $PHP_SELF?".SID);
exit();
}
?>
<html>
<head>
<title>Warenkorb</title>
</head>
<body>
<h1>Ihr Warenkorb</h1>
<?php
$items = array( "Standard", "Premium", "Deluxe");
$Prices = array( 25.00, 45.00, 75.00 );
?>
<table border="1">
<tr>
<th>Artikelbeschrieb</th>
<th>Preis</th>
</tr>
<?php
for($i = 0; $i < count($shoppingcart); $i++) {
echo("<tr>");
echo("<td>".$items[$shoppingcart[$i]]."</td>");
echo("<td align=\"right\">");
echo(number_format($Prices[$shoppingcart[$i]],2,",","."));
echo(" Euro</td>");
echo("</tr>");
$total = $total + $Prices[$shoppingcart[$i]];
}
?>
<tr>
<th align="right">Gesamtpreis:</th><br />
<th align="right"><?=number_format($total,2,",",".")?> Euro</th>
</tr>
</table>
<p><a href="<?=$PHP_SELF?>?empty=1">Warenkorb leeren</a></p>
</body>
</html>
....und die Frage lautet weiterhin: wie kriege ich es hin, dass nur ein Produkt angezeigt wird (das schaffe ich ja mittlerweile)
und dieses Produkt auch in den Warenkorb gelangt.
Wenn ich nun
PHP-Code:
<?php
for($i = 0; $i < count($items); $i++) {
echo("<tr>");
echo("<td>".$items[$i]."</td>");
echo("<td>Euro ".number_format($Prices[$i],2,",",".")."</td>");
echo("<td><a href='$PHP_SELF?buy=$i'>Kaufen</a></td>");
echo("</tr>");
}
?>
durch
PHP-Code:
<?php
echo $items[0];
echo $prices[0];
echo("<a href='$PHP_SELF?buy=$i'>Kaufen</a>");
?>
ersetze klappt das ja nicht. Wie erwähnt bin ich der (hoffentlich richtigen) Meinung dass es "nur" an der letzten Zeile liegt:
PHP-Code:
echo("<a href='$PHP_SELF?buy=$i'>Kaufen</a>");
Habe es nun mit allen Variationen des Vorschlags von Adromir versucht und scheitere kläglich.
|
|
|
31.05.2008, 10:43
|
#6
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Probleme
a) Dein Script läuft nur, wenn register_globals on sind, was nicht sein sollte.
b) Du legst bei jedem Aufruf die Session Var neu an, so ist der Warenkorb immer leer.
PHP-Code:
<?php session_start();
if ($_GET['buy'] != "") { // SESSION Var nur dann anlegen, wenn sie nicht schon existiert if(!isset($_SESSION['shoppingcart'])) { $_SESSION['shoppingcart'] = array(); } // Artikel am Ende des Arrays $shoppingcart einfügen $_SESSION['shoppingcart'][] = $_GET['buy']; header("Location: {$_SERVER['PHP_SELF']}?".session_id()); exit(); } ?> <html> <head> <title>Produkte</title> </head> <body> <?php $items = array( "Standard", "Premium", "Deluxe"); $Prices = array( 25.00, 45.00, 75.00 ); ?> <table border="1"> <tr> <th>Artikelbeschrieb</th> <th>Preis</th> </tr> <?php //for($i = 0; $i < count($items); $i++) { $i = 0; // Wertebereich 0 - 2 echo("<tr>"); echo("<td>".$items[$i]."</td>"); echo("<td>Euro ".number_format($Prices[$i],2,",",".")."</td>"); echo("<td><a href='{$_SERVER['PHP_SELF']}?buy=$i'>Kaufen</a></td>"); echo("</tr>"); //} ?> </table> </body> </html>
<?php // Testausgabe echo '<pre>'; print_r($_SESSION['shoppingcart']); echo '</pre>';
Vergleiche das mal mit Deinem zweiten Script ...
Zur Ausgabe von nur einem Produkt habe ich die Schleifenzeilen mal auskommentiert und eine Zähler-Var angelegt ($i), die dann das entsprechende Produkt wählt.
|
|
|
31.05.2008, 11:14
|
#7
|
|
TP-Senior
Registriert seit: Sep 2002
Ort: Schaffhausen/Schweiz
|
Warenkorb
Es funktioniert so tadellos. Im Nachhinein erscheint alles logisch wenn es gut erklärt ist.
Thanks a lot.
|
|
|
31.05.2008, 11:22
|
#8
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Hier dann nochmal eine kleine Anpassung vom Warenkorb.
Hier sinnig mit foreach zu arbeiten, da man ja nicht nur den ganzen Korb leeren will, sondern auch einzelne Artikel und wenn man dann das erste ([0]) löscht, kommt man mit der for-Schleife nicht mehr weit.
shopping.php
PHP-Code:
<?php session_start();
if ($_GET['buy'] != "") { // SESSION Var nur dann anlegen, wenn sie nicht schon existiert if(!isset($_SESSION['shoppingcart'])) { $_SESSION['shoppingcart'] = array(); } // Artikel am Ende des Arrays $shoppingcart einfügen $_SESSION['shoppingcart'][] = $_GET['buy']; header("Location: {$_SERVER['PHP_SELF']}?".session_id()); exit(); } ?> <html> <head> <title>Produkte</title> </head> <body> <?php $items = array( "Standard", "Premium", "Deluxe"); $Prices = array( 25.00, 45.00, 75.00 ); ?> <table border="1"> <tr> <th>Artikelbeschrieb</th> <th>Preis</th> </tr> <?php for($i = 0; $i < count($items); $i++) { //$i = 0; // Wertebereich 0 - 2 echo("<tr>"); echo("<td>".$items[$i]."</td>"); echo("<td>Euro ".number_format($Prices[$i],2,",",".")."</td>"); echo("<td><a href='{$_SERVER['PHP_SELF']}?buy=$i'>Kaufen</a></td>"); echo("</tr>"); } ?> </table> <a href="warenkorb.php">zum Warenkorb</a> </body> </html>
warenkorb.php
PHP-Code:
<?php session_start(); if ($_GET['empty'] != "") { // Array $shoppingcart leeren unset($_SESSION['shoppingcart']); header("Location: {$_SERVER['PHP_SELF']}?".session_id()); exit(); } if ($_GET['del'] != "") { // Artikel löschen unset($_SESSION['shoppingcart'][$_GET['del']]); } ?> <html> <head> <title>Warenkorb</title> </head> <body> <h1>Ihr Warenkorb</h1> <?php $items = array( "Standard", "Premium", "Deluxe"); $Prices = array( 25.00, 45.00, 75.00 ); $total = 0; if(!empty($_SESSION['shoppingcart'])) { ?> <table border="1"> <tr> <th>Artikelbeschrieb</th> <th>Preis</th> <th>Löschen</th> </tr> <?php foreach($_SESSION['shoppingcart'] as $key => $value) { echo("<tr>"); echo("<td>".$items[$value]."</td>"); echo("<td align=\"right\">"); echo(number_format($Prices[$value],2,",",".")); echo(" Euro</td>"); echo("<td align=\"right\">"); echo('<a href="'.$_SERVER['PHP_SELF'].'?del='.$key.'">löschen</a>'); echo("</td>"); echo("</tr>"); $total = $total + $Prices[$value]; } ?> <tr> <th align="right">Gesamtpreis:</th><br /> <th align="right"><?=number_format($total,2,",",".")?> Euro</th> </tr> </table> <p><a href="<?php echo $_SERVER['PHP_SELF']?>?empty=1">Warenkorb leeren</a></p> <?php } else { echo 'Ihr Warenkorb ist leer.'; } ?> <a href="shopping.php">zum Shop</a> </body> </html>
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 19:59 Uhr.
|
 |
 |
| |