SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Websites optimieren für Google & Co.

Websites optimieren für Google & Co. zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 29.07.2004, 14:34:37
bweichel bweichel ist offline
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
Mit Zitat antworten
  #2  
Alt 29.07.2004, 14:37:38
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
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
    
}
?>
Mit Zitat antworten
  #3  
Alt 29.07.2004, 15:25:27
bweichel bweichel ist offline
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");    

Mit Zitat antworten
  #4  
Alt 29.07.2004, 15:52:18
bazubi bazubi ist offline
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']);

Mit Zitat antworten
  #5  
Alt 29.07.2004, 15:57:35
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
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_nr0);
        }
    
        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();    
    }
?>
Mit Zitat antworten
  #6  
Alt 29.07.2004, 16:21:07
bweichel bweichel ist offline
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
Mit Zitat antworten
  #7  
Alt 29.07.2004, 16:35:47
bazubi bazubi ist offline
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.
Mit Zitat antworten
  #8  
Alt 29.07.2004, 17:29:11
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
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 ;-)
Mit Zitat antworten
  #9  
Alt 30.07.2004, 12:59:22
bweichel bweichel ist offline
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 errorCall 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($preis2"," ,".");
        
        return 
$preis;
    }
    
    function 
plus_prozent($preis$plus) {
        
$plus = ($preis 100) * $plus;
        
$preis += $plus;
        
$preis number_format($preis2"," ,".");
        
        return 
$preis;
    }

    function 
minus($preis$plus) {
        
$preis -= $plus;
        
$preis number_format($preis2"," ,".");
        
        return 
$preis;
    }
    
    function 
minus_prozent($preis$plus) {
        
$plus = ($preis 100) * $plus;
        
$preis -= $plus;
        
$preis number_format($preis2"," ,".");
        
        return 
$preis;
    }
    
    function 
gleich($preis) {
        
$preis number_format($preis2"," ,".");
        
        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
Mit Zitat antworten
  #10  
Alt 30.07.2004, 13:29:36
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
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.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:06:32 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.


© 2001-2023 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt