CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
29.07.2004, 13:34:37
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 196
|
|
PHP Funktion aufrufen
Hallo,
ich habe mit eine Funktion warenkorb() geschrieben die den übergebenen Artikel in den Warenkorb legt.
Wie kann ich die Funktion nun über einen Link aufrufen, sodass die Funktion den übergeben Artikel in den Warenkorb legt?
Vielen Dank für eure Hilfe!
Gruß Björn
|
29.07.2004, 13:37:38
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
Direkt über einen Link kannst du keine Funktion aufrufen. Du könntest aber etwas in dieser Art machen:
Link: datei.php?action=add
PHP-Code:
<?php
if($_GET['action'] == "add") {
warenkorb(); //<-- Funktion aufrufen
}
?>
|
29.07.2004, 14:25:27
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 196
|
|
Super danke...
Ich bin zwar kein Anfänger mehr was PHP betrifft, aber ich habe mich noch nie so besonders mit Funktionen und Klassen beschäftigt. Heute habe ich mir nun mal versucht eine Klasse mit verschiedenen Methoden zu schreiben. Vielleicht könnt ihr ja mal reinschauen und mir Verbesserungsvorschläge unterbreiten. Es ist nicht besonderes... Ist ist eine Klasse warenkorb, die es mir ermöglich Artikel in einen Warenkorb zu legen oder zu löschen. Fehlt noch die update Funktion, aber die kommt noch.
Also bitte schaut`s euch mal an:
PHP-Code:
class warenkorb {
function update($art_nr, $anzahl, $PHPSESSID) {
$query = "UPDATE ";
$query.= "warenkorb ";
$query.= "SET anzahl = $anzahl ";
$query.= "WHERE art_nr = '$art_nr' ";
$query.= "AND session_id = '$PHPSESSID'";
$result = mysql_query($query);
}
function insert($art_nr, $anzahl, $PHPSESSID) {
$query = "SELECT * ";
$query.= "FROM warenkorb ";
$query.= "WHERE art_nr = '$art_nr' ";
$query.= "AND session_id = '$PHPSESSID'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
if($row[art_nr] != "") {
$anzahl = $anzahl + $row[anzahl];
$this->update("$art_nr", $anzahl, "$PHPSESSID");
}
else {
$query_1 = "INSERT ";
$query_1.= "INTO warenkorb ";
$query_1.= "(session_id, art_nr, anzahl) ";
$query_1.= "VALUES('$PHPSESSID', '$art_nr', $anzahl)";
$result_1 = mysql_query($query_1);
}
}
function delete($art_nr, $PHPSESSID) {
$query = "DELETE * ";
$query.= "FROM warenkorb ";
$query.= "WHERE art_nr = '$art_nr' ",
$query.= "AND session_id = '$PHPSESSID'";
$result = mysql_query($query);
}
function delete_all($PHPSESSID) {
$query = "DELETE * ";
$query.= "FROM warenkorb ";
$query.= "WHERE session_id = '$PHPSESSID'";
$result = mysql_query($query);
}
}
if($_GET['action'] == "add") {
$mein_warenkorb = new warenkorb;
$mein_warenkorb->insert("$_GET[art_nr]", 1, "$PHPSESSID");
}
if($_GET['action'] == "delete") {
$mein_warenkorb = new warenkorb;
$mein_warenkorb->delete("$_GET[art_nr]", "$PHPSESSID");
}
if($_GET['action'] == "delete_all") {
$mein_warenkorb = new warenkorb;
$mein_warenkorb->delete_all("$PHPSESSID");
}
|
29.07.2004, 14:52:18
|
Junior Member
|
|
Registriert seit: Jan 2004
Beiträge: 496
|
|
Sieht auf den ersten Blick sehr sauber aus, nur widersprichts in meinem Augen dem OOP Prinzip ein wenig, denn Du erzeugst für jede Aktion eine eigenes Warenkorbobjekt. Geschickter wäre es, nur ein Objekt zu erzeugen und immer dieses zu verwenden, denn der Warenkorb (das Objekt) bleibt immer der gleiche, nur ändern sich Eigenschaften davon.
So fände ich es sinniger:
PHP-Code:
class warenkorb {
//Konstruktor - wird bei erzeugung des Objekts aufgerufen.
function warenkorb() {
//Damit man nicht immer session_id() verwenden muss,
//wird diese einfach in $id gespeichert, so dass man
//in den anderen funktionen über $this->id darauf
//zugreifen kann
var $id = session_id();
}
function insert($produktid, $menge) {
//Checken if $produktid schon drin ist
//Falls ja -> Menge hinzuaddieren, falls nein
//neuen Datensatz.
}
}
//Außerhalb der Klasse am besten ganz oben von jedem Script:
$meinwarenkorb = new warenkorb();
if ($_GET['action'] == 'add') {
$meinwarenkorb->insert($_GET['productid'], $_GET['menge']);
}
|
29.07.2004, 14:57:35
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
Ich würde beim Warenkorb gar nicht mit MySQL arbeiten, sondern die Anzahl der Artikel direkt in der Session speichern. Außerdem kannst du dann die Methoden update und insert zusammenfassen. Dann könnte die Klasse so aussehen:
PHP-Code:
<?php
class warenkorb {
function update($art_nr, $anzahl)
{
if($anzahl == 0) {
unset($_SESSION['warenkorb'][$art_nr]);
} else {
$_SESSION['warenkorb'][$art_nr] = $anzahl;
}
}
function delete($art_nr) {
$this->update($art_nr, 0);
}
function delete_all($PHPSESSID) {
unset($_SESSION['warenkorb']);
}
}
?>
EDIT: Und um bazubis Ansatz aufzunehmen:
PHP-Code:
<?php
$mein_warenkorb = new warenkorb;
if($_GET['action'] == "add") {
$mein_warenkorb->insert($_GET[art_nr]);
}
if($_GET['action'] == "delete") {
$mein_warenkorb->delete($_GET[art_nr]);
}
if($_GET['action'] == "delete_all") {
$mein_warenkorb->delete_all();
}
?>
|
29.07.2004, 15:21:07
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 196
|
|
Sehr gut, auf die Idee mit dem SESSION-Warenkorb bin ich noch nicht gekommen.
Habe nun noch eine Kontruktor wie oben gebaut und darin die Variable $PHPSESSID in $id umwandeln wollen. Leider kommt bei mir ständig die Meldung:
[PHP]
Parse error: parse error, unexpected T_VAR in /var/www/media2be/media2be.de/docs/_php/class_warenkorb.php on line 7
[PHP]
Also ich habe es quasi mehr oder weniger aus dem obigen Script kopiert.
PHP-Code:
class warenkorb {
function warenkorb() {
var $id = session_id();
}
function update($art_nr, $anzahl) {
$query = "UPDATE ";
$query.= "warenkorb ";
$query.= "SET anzahl = $anzahl ";
$query.= "WHERE art_nr = '$art_nr' ";
$query.= "AND session_id = '$this->id'";
$result = mysql_query($query);
}
function insert($art_nr, $anzahl) {
$query = "SELECT * ";
$query.= "FROM warenkorb ";
$query.= "WHERE art_nr = '$art_nr' ";
$query.= "AND session_id = '$this->id'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
if($row[art_nr] != "") {
$anzahl = $anzahl + $row[anzahl];
$this->update("$art_nr", $anzahl, "$this->id");
}
else {
$query_1 = "INSERT ";
$query_1.= "INTO warenkorb ";
$query_1.= "(session_id, art_nr, anzahl) ";
$query_1.= "VALUES('$this->id', '$art_nr', $anzahl)";
$result_1 = mysql_query($query_1);
}
}
function delete($art_nr) {
$query = "DELETE * ";
$query.= "FROM warenkorb ";
$query.= "WHERE art_nr = '$art_nr' ";
$query.= "AND session_id = '$this->id'";
$result = mysql_query($query);
}
function delete_all() {
$query = "DELETE * ";
$query.= "FROM warenkorb ";
$query.= "WHERE session_id = '$this->id'";
$result = mysql_query($query);
}
function select() {
$gesamt_anzahl = 0;
$gesamt_wert = 110;
$query = "SELECT * ";
$query.= "FROM warenkorb ";
$query.= "WHERE session_id = '$this->id'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
$gesamt_anzahl += $row[anzahl];
}
return $gesamt_anzahl;
return $gesamt_wert;
}
}
$mein_warenkorb = new warenkorb;
if($_GET['action'] == "add") {
$mein_warenkorb->insert("$_GET[art_nr]", 1, "$PHPSESSID");
}
if($_GET['action'] == "delete") {
$mein_warenkorb->delete("$_GET[art_nr]", "$PHPSESSID");
}
if($_GET['action'] == "delete_all") {
$mein_warenkorb->delete_all("$PHPSESSID");
}
Was ist ein Kontruktor?
Gruß Björn
|
29.07.2004, 15:35:47
|
Junior Member
|
|
Registriert seit: Jan 2004
Beiträge: 496
|
|
Sorry, mein Fehler!
So ist es richtig:
PHP-Code:
class warenkorb {
var $id = '';
function warenkorb() {
$this->id = session_id();
}
...
Der Konstruktor ist die Funktion welche beim erzeugen eines neuen Objektes automatisch aufgerufen wird. Sie hat immer den gleichen Namen wie die Klasse selbst. Den Konstruktor kannst Du dazu verwenden das Objekt zu initalisieren, also Standardwerte setzen, andere Methoden aufrufen. Der Konstruktur ist also sowas wie das Autorun Verzeichnis von KDE oder Windows.
Das Pendant zu Konstruktor ist der Destruktor, welcher automatisch aufgerufen wird, wenn ein Objekt zerstört wird. Allerdings bin ich mir jetzt nicht sicher, ob PHP auch Destruktoren kennt.
|
29.07.2004, 16:29:11
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
Zitat:
Original geschrieben von bazubi
Der Konstruktor ist die Funktion welche beim erzeugen eines neuen Objektes automatisch aufgerufen wird. Sie hat immer den gleichen Namen wie die Klasse selbst.
|
Das soll sich in PHP 5 wohl ändern. Da wird dann irgendwie mit __construct gearbeitet. Genaueres weiß ich da aber auch nicht, habe das nur letztens mal in einer Zeitschrift gelesen.
Zitat:
Original geschrieben von bazubi
Das Pendant zu Konstruktor ist der Destruktor, welcher automatisch aufgerufen wird, wenn ein Objekt zerstört wird. Allerdings bin ich mir jetzt nicht sicher, ob PHP auch Destruktoren kennt. [/B]
|
Ob es den Destruktur in PHP 4 schon gibt, weiß ich auch nicht, soll aber auch in PHP 5 verfügbar sein: __destruct oder so ähnlich. Aber da wird man in Zukunft ja noch mehr hören ;-)
|
30.07.2004, 11:59:22
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 196
|
|
Hallo,
erstmal danke das er mir gestern bei meinem Problem geholfen habt. Ich hoffe ihr seit auch heute wieder mit dabei ;-).
Das mit meiner Klasse warenkorb funktioniert nun bestens. Heute habe ich nun an einer Klasse preise und einer Klasse artikel gearbeitet. Sie steht auch schon soweit, jedoch gibt es bei der Klasse artikel noch das Problem, dass ich aus der Klasse artikel nciht auf die preise zugreifen kann.
Die Klasse preise soll nichts anderes tun als die Preise im richtigen Format auszugeben und ggf. Mwst. draufschlagen oder abziehen.
Die Klasse artikel hingegen besorgt mir alle Artikeldaten und den dazugehörigen Preis. Da ich den Preis sofort im richtigen Format haben möchte, habe ich hierzu aus der Klasse artikel die Klasse preise aufgerufen.
Leider funktioniert es nicht, die Fehlermeldung lautet:
PHP-Code:
Fatal error: Call to a member function on a non-object in /var/www/.../docs/_php/class_artikel.php on line 30
Hier meine Klasse preise
PHP-Code:
class preise {
function plus($preis, $plus) {
$preis += $plus;
$preis = number_format($preis, 2, "," ,".");
return $preis;
}
function plus_prozent($preis, $plus) {
$plus = ($preis / 100) * $plus;
$preis += $plus;
$preis = number_format($preis, 2, "," ,".");
return $preis;
}
function minus($preis, $plus) {
$preis -= $plus;
$preis = number_format($preis, 2, "," ,".");
return $preis;
}
function minus_prozent($preis, $plus) {
$plus = ($preis / 100) * $plus;
$preis -= $plus;
$preis = number_format($preis, 2, "," ,".");
return $preis;
}
function gleich($preis) {
$preis = number_format($preis, 2, "," ,".");
return $preis;
}
}
Und zuletzt, die Klasse artikel:
PHP-Code:
class artikel {
function artikel() {
include("class_preise.php");
$mein_preis = new preise();
}
function preisliste($art_nr, $anzahl) {
$query = "SELECT * ";
$query.= "FROM preisliste ";
$query.= "WHERE art_nr = '$art_nr' ";
$query.= "AND preisgruppe = 1 ";
if($anzahl != "") {
$query.= "AND anzahl <= $anzahl ";
}
else {
$query.= "AND anzahl = 1 ";
}
$query.= "ORDER BY anzahl DESC ";
$query.= "LIMIT 1";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$this->mein_preis->gleich($row[preis]);
}
function select($art_nr, $anzahl) {
$query = "SELECT * ";
$query.= "FROM artikel ";
$query.= "WHERE art_nr = '$art_nr'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$this->preisliste("$row[art_nr]", $this->anzahl);
}
}
$mein_artikel = new artikel();
print $mein_artikel->select("1010a", 1);
print "$artikel_nr <br>";
Vielen, vielen Dank für die Hilfe...
Gruß Björn
|
30.07.2004, 12:29:36
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
Du könntest ja die Klasse artikel von der Klasse preise ableiten. Also so:
PHP-Code:
class artikel extends preise {
function artikel() {
include("class_preise.php");
}
function preisliste($art_nr, $anzahl) {
$query = "SELECT * ";
$query.= "FROM preisliste ";
$query.= "WHERE art_nr = '$art_nr' ";
$query.= "AND preisgruppe = 1 ";
if($anzahl != "") {
$query.= "AND anzahl <= $anzahl ";
}
else {
$query.= "AND anzahl = 1 ";
}
$query.= "ORDER BY anzahl DESC ";
$query.= "LIMIT 1";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$this->mein_preis->gleich($row[preis]);
}
function select($art_nr, $anzahl) {
$query = "SELECT * ";
$query.= "FROM artikel ";
$query.= "WHERE art_nr = '$art_nr'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$this->preisliste("$row[art_nr]", $this->anzahl);
}
}
$mein_artikel = new artikel();
print $mein_artikel->select("1010a", 1);
print "$artikel_nr <br>";
Dann kannst du mit parent::methode() auf die Methoden der Klasse Preise zugreifen.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Hybrid-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 13:28:41 Uhr.
|