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
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
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