Hallo und guten Tag,
Ich habe einen kleinen shop erstellt, zum üben.
Nun möchte ich das zwei klassen(artikel und webshop) nicht mehr dem $artikelarray entnommen werden, sondern direkt per Datenbankabfrage in eine Methode webshop anzeigen() geholt werden.
Welche Möglichkeit gibt es da? Wie kann ich das bewerkstelligen?
Danke schon mal im vorraus
Guten Morgen karina04,
meine erste Frage, wofür sind die 2 Klassen artikel und webshop den zuständig? sind diese für die Anzeige zuständig? oder was machen diese genau?
zweite Frage was möchstest du mit der Methode webshop_anzeigen() den erreichen? und in welcher Klasse möchtest du diese Methode einfügen?
Da ist eine Liste mit lieferbaren Artikeln und dei sollen nicht mehr dem $artikelArray entnommen werden sondern per Datenbankabfrage in die Methode "webshop anzeigen geholt und ausgegeben werden.
Brauchst du code von mir?
LG
Karina
Hi!
Da du von Datanbankanbindung sprichst nehme ich an du wirst eventuell eine MySQL-Datenbank benutzen, die normalerweise bei jedem Webspace includiert ist.
PHP technisch würde ich dir folgenden Link empfehlen:
http://at.php.net/manual/en/book.mysql.php
Da gibt es neben Funktionsdefinitionen/erklärungen auch gute Beispiele.
LG,
Volker
Hallo Volker,
damit komme ich nicht klar oft hilft es wenn jemand es einem mit eigenen Worten erklärt.
Gruß
hi karina04,
Code von dir wäre schon mal ein Anfang
Um mit PHP eine Verbindung zu MySQL herzustellen und auf Daten zuzugreifen, dazu gehört schon viel Hintergrundwissen.
Erster Schritt wäre das du die Werte des Arrays in eine Datenbanktabelle einfügst. Dafür musst du natürlich erst eine Datenbank mit einer Tabelle in MySQL anlegen.
Deine Datenbank könnest du z.B. „webshop“ nennen und die Tabelle „artikel“. Die Tabelle „artikel“ sollte dann Felder bekommen.
Die Felder könnten dann z.B. sein ID, Artikelbezeichnung, Artikelbeschreibung und Bruttopreis.
In diese Felder würde man jetzt deine bisherigen Artikel eintragen müssen, dies kannst du dir wie eine Exceltabelle vorstellen. Die Felder wären die Überschriften und eine darunter folgende Zeilen stellen einen Artikel dar.
Anschließend musst du in deinem PHP-Programm eine Abfrage auf deine Tabelle in deiner Datenbank programmieren. Dies läuft über PHP interne Funktionen.
Erster Schritt hier wäre die Herstellung einer Verbindung zur Datenbank, praktisch wie ein Login deine Zugangsdaten wie Benutzername, Passwort und noch weitere Angaben, welche die Funktion benötigt.
Anschließend musst du deine Datenbank „webshop“ per PHP-Funktion auswählen lassen. Danach eine Abfrage an deine Tabelle stellen.
Das Abfrageergebnis welches dir MySQL auslieferst musst du in deinem PHP-Programm durch eine Schleife ausgeben lassen. Damit alle Artikel deines Webshops auf einer Seite angezeit werden.
lg
lisatage78
Verbindung zur Datenbank habe ich. Es soll halt nur so werden wire oben beschrieben. Müsste also nur änderungen machen. Aber wie und wo?
DIE Class-artilel
class artikel extends sitzungsSeite { private $artikelArray = array(); private $DB = array('database' =\> 'uxxxxx', 'user' =\> 'axxxxx', 'password' =\> 'xxxxx'); protected $dbh; # Database-Handle public function \_\_construct() { parent::\_\_construct(); if(!is\_array($this-\>DB) && empty($this-\>DB['database'])) throw new Exception("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'] ); $this-\>dbh-\>setAttribute(PDO::ATTR\_ERRMODE, PDO::ERRMODE\_EXCEPTION); $sql = "SELECT a\_artikelnr, a\_termin, a\_name AS\_veranstaltung, a\_preis, a\_menge AS\_kartenvorrat 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 $k1 =\> $v1) { $name = split("\_", $k1); if ($k1 != 'a\_artikelnr') $this-\>artikelArray[$value['a\_artikelnr']][$name[1]] = $v1; } } } catch(PDOException $e) { echo $e-\>getMessage(); } } } public function anzeigen() { print " \n"; print " \n "; #holen des numerischen Indizes $tmp = array\_keys($this-\>artikelArray); #Durchsuchen nach den assoziativen Schlüsseln foreach($this-\>artikelArray[$tmp[0]] as $key =\> $value) { #Ersten Buchstabn groß sezen print "".ucwords($key).""; } print "\n\n"; #Alle Datenfelder ausgeben foreach($this-\>artikelArray as $key =\> $value) { print "\n"; foreach($value as $subKey =\> $subVal) { if ($subKey == "preis") #prüfen, um Euro-Text anzuhängen print "".$subVal." Euro \n"; else print "".$subVal."\n"; } print "[In den Warenkorb](%255C%2522%2522.%2524_SERVER%255B'PHP_SELF'%255D.%2522?id=%2522.)\n"; print " \n"; } print "\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::stuck\_out\_tongue:ARAM\_INT); $result-\>bindParam(':kunde', $kunde, PDO::stuck\_out\_tongue:ARAM\_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::stuck\_out\_tongue:ARAM\_INT); $result-\>bindParam(':kunde', $kunde, PDO::stuck\_out\_tongue:ARAM\_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::stuck\_out\_tongue:ARAM\_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::stuck\_out\_tongue:ARAM\_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"; $sql2 = $this-\>dbh-\>prepare($sql2); $sql2-\>execute(array(':kunde' =\> (int)$kunde, ':artikel' =\> (int)$value['w\_artikelnr'])); } $error = true; } } } catch(PDOException $e) { echo $e-\>getMessage(); } } session\_destroy(); return $error; } } ?\> Die Class\_webshop <?php require_once("class_webshop.php");
require\_once("texte.php"); $art = new webshop(); $art-\>setKundenNummer("anne1963", "abcd"); if(isset($\_REQUEST['pdf'])) if(isset($\_REQUEST['daten'])) $art-\>setKundenDaten( array('name' =\> $\_REQUEST ['name'], 'vorname' =\> $\_REQUEST['vorname'], 'plz' =\> $\_REQUEST['plz'], 'passwort' =\> $\_REQUEST['passwort'], 'ort' =\> $\_REQUEST['ort'], 'strasse' =\> $\_REQUEST['strasse'], 'kennung' =\> $\_REQUEST['kennung'], 'email' =\> $\_REQUEST['email'] )); $art-\>setTitel($titeltext); $art-\>kopf(); if (!empty($\_REQUEST['kennung']) && !empty($\_REQUEST['passwort'])) { #zum Shop $art-\>setKundenNummer($\_SESSION['kennung'], $\_SESSION['passwort']); } if($art-\>setKundenNummer($\_REQUEST['kennung'], $\_REQUEST['passwort']) == 0) { if(!isset($\_REQUEST['neu'])) $art-\>inhalt($text[5]);#Anmeldeformular else $art-\>inhalt($text[6]);#Datenerfassungformular } elseif(isset($\_REQUEST['wk'])) { $art-\>inhalt($text[3]); $art-\>auswahl($art-\>setKundenNummer($\_REQUEST['kennung'], $\_REQUEST['passwort'])); $art-\>inhalt($text[2]); } elseif(isset($\_REQUEST['order'])) { $art-\>bestellen($art-\>setKundenNummer($\_REQUEST['kennung'], $\_REQUEST['passwort'])); $art-\>inhalt($text[4]); } else { if(!empty($\_REQUEST['id'])) { $art-\>setKundenNummer($\_REQUEST['kennung'], $\_REQUEST['passwort']); $art-\>waehlen($\_REQUEST['id'], $\_REQUEST['kunde']); } $art-\>inhalt($text[0]); $art-\>anzeigen(); $art-\>inhalt($text[1]); } $art-\>fuss(); ?\>
Welche Fehlermeldung bekommst du den angezeigt?
Ich möchte ich das die klassen(artikel und webshop) nicht mehr dem $artikelarray entnommen werden, sondern direkt per Datenbankabfrage in eine Methode webshop anzeigen() geholt werden.
Also bisher wurden sie dem artikelarray entnommen. jetzt möchte ich das so ändern das sie direkt per DAtenbankabfrage in die Methode Webshop geholt werde. Fehlermeldungen bekomme ich keine.
Danke für deine Antworten
schon klar
$sql = "SELECT a\_artikelnr, a\_termin, a\_name AS\_veranstaltung, a\_preis, a\_menge AS\_kartenvorrat
FROM ws\_artikel
WHERE a\_menge \> 0";
$result = $this-\>dbh-\>query($sql);
$tmp = $result-\>fetchAll(PDO::FETCH\_ASSOC);
/\*
deine Abfrage oben, liegt als ergebnis in $tmp , was du damit machst ist deine sache . Denn irgentwie wird eh erstmal alles in eine variable eingelesen , so ist das nun einmal, selbst files etc alles steckt in variablen (speicher).
\*/
/\*diese Zeile geht die daten in $tmp durch, eintrag für eintrag \*/
foreach ($tmp as $key =\> $value)
{
/\*ab hier kannst du direkt ausgeben z.b. \*/
echo "Datensatz ".$key." und Werte ArtikelNr :".$value['artikelnr']." | ".$value['termin']." :smile:";
}
korrektur
echo "Datensatz „.$key.“ und Werte ArtikelNr
„.$value[‚a_artikelnr‘].“ | „.$value[‚a_termin‘].“ ";
Super DANKE hat mir sehr weitergeholfen.
Gruß Karina