Hallo zusammen,
ich werde noch wahnsinnig mit dieser Einsendeaufgabe. Habe alle Punkte bis auf 3. der Aufgabe gelöst.
Kann mir bitte jemand damit helfen?
Frage:
Ändern Sie die Klassen "artikel" und "webshop" so ab, dass dei Liste der
lieferbaren Artikel nicht mehr dem "$artikelArray" entnommen werden,
sondern direkt per Datenbankabfrage in der Methode "webshop::anzeigen()"
geholt und ausgegeben wird.
Hier ist der Code für die "class_artikel":
PHP
<?php
require_once ("class_seite.php");
class artikel extends seite
{
protected $artikelArray = array();
private $DB = array('database' => 'xxxxxxxxxxxxxxx', 'user' => 'xxxxxxxxxxxxxxxxxx', 'password' => 'xxxxxxxxxxxxxxxx');
protected $dbh; # Database-Handle
public function __construct()
{
parent::__construct();
if(!is_array($this->DB) && empty($this->DB['database']))
throw new Exeption("Daten für Datenbankverbindung fehlen!");
else
{
$connectString = "mysql:dbname=".$this->DB['database'].";host=localhost";
try
{
$this->dbh = new PDO($connectString, $this->DB['user'], $this->DB['password']);
$sql = "DELETE FROM `ws_warenkorb` WHERE DATEDIFF(NOW(), `w_timestamp`) >= 14";
$result = $this->dbh->query($sql);
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT a_artikelnr, a_datum AS a_konzerttermin, a_name AS a_veranstaltung, a_menge AS a_kartenvorrat, a_preis FROM ws_artikel WHERE a_menge > 0";
$result = $this->dbh->query($sql);
$tmp = $result->fetchAll(PDO::FETCH_ASSOC);
foreach ($tmp as $key => $value)
{
foreach($value as $ky => $val)
{
$name = explode("_", $ky);
if ($ky != 'a_artikelnr')
$this->artikelArray[$value['a_artikelnr']][$name[1]] = $val;
}
}
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
}
public function anzeigen()
{
foreach($this->artikelArray as $key => $value)
{
foreach($value as $subKey => $subVal)
{
if ($subKey == "name")
{
print "<a href=\"".$_SERVER['PHP_SELF']."?id=".$key."\">".$subVal."</a>\n";
}
else
print $subVal." Euro\n";
}
print "<br />\n";
}
}
public function waehlen($artikelnummer, $kunde)
{
if(!empty($artikelnummer) && !empty($kunde))
{
try
{
$sql = "UPDATE ws_warenkorb SET w_menge = w_menge + 1 WHERE w_artikelnr = :nummer AND w_kunde = :kunde";
$result = $this->dbh->prepare($sql);
$result->bindParam(':nummer', $artikelnummer, PDO::PARAM_INT);
$result->bindParam(':kunde', $kunde, PDO::PARAM_INT);
$result->execute();
if ($result->rowCount() == 1)
return true;
$sql ="INSERT INTO ws_warenkorb (w_artikelnr, w_kunde, w_menge) VALUES (:nummer, :kunde, 1)";
$result = $this->dbh->prepare($sql);
$result->bindParam(':nummer', $artikelnummer, PDO::PARAM_INT);
$result->bindParam(':kunde', $kunde, PDO::PARAM_INT);
$result->execute();
if($result->rowCount()== 1)
{
print "Datensatz wurde eingetragen.";
return true;
}
return false;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
}
public function bestellen($kunde)
{
if(!is_integer($kunde)) # Gültige Kundennummer?
throw new Exception('Keine Kundennummer'); # Fehler ausgeben
else
{
try
{
#in Datenbank schreiben
$sql = "SELECT w_kunde, w_artikelnr, w_menge FROM ws_warenkorb WHERE w_kunde = :kunde";
$result = $this->dbh->prepare($sql);
$result->bindParam(':kunde', $kunde, PDO::PARAM_INT);
$result->execute();
$tmp = $result->fetchAll(PDO::FETCH_ASSOC);
foreach($tmp as $key => $value)
{
$sql = "INSERT INTO ws_bestellung (b_kunde, b_artikelnr, b_menge) VALUES (:kunde, :artikel, :menge)";
$result = $this->dbh->prepare($sql);
$result->execute(array(':kunde' => (int)$value['w_kunde'], ':artikel' => (int)$value['w_artikelnr'], ':menge' => $value['w_menge']));
if($result->rowCount() == 1)
{
$sql1 = "UPDATE ws_artikel SET a_menge = a_menge - :anzahl WHERE a_artikelnr = :artikel";
$result1 = $this->dbh->prepare($sql1);
$result1->bindParam(':anzahl', $value['w_menge'], PDO::PARAM_INT);
$result1->bindParam(':artikel', $value['w_artikelnr']);
$result1->execute();
if ($result1->rowCount() == 1)
{
$sql2 = "DELETE FROM ws_warenkorb WHERE w_kunde = :kunde AND w_artikelnr = :artikel";
$sth2 = $this->dbh->prepare($sql2);
$sth2->execute(array(':kunde' => (int)$kunde, ':artikel' => (int)$value['w_artikelnr']));
}
$error = true;
}
}
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
session_destroy();
return $error;
}
}
?>
Alles anzeigen
Und hier der Code von "class_webshop" siehe Anhang class_webshop.txt:
Musste es leider den 2. Code hochladen da er ihn mich nicht posten lies.
Ich hoffe es kann mir jemand helfen da ich sonst bald aufgebe.
Vielen Dank schonmal
pitware2005