php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 26-05-2007, 12:00
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard Warenkorb - nur wie?

Hallo Forum

Ich habe mir eine kleine Movie-Liste mit all meinen eigenen DVDs gemacht. Nun leihe ich Kollegen oft DVDs aus (und bei 300 DVDs verliert man da schon mal den Überblick ). Also dachte ich ich könnte das ganze mit einer Art "ausleih"-Shop besser in den Griff bekommen (kostenlos, versteht sich).

Die User können sich einloggen. Ein User sollte höchstens 3 DVDs in den Warenkorb aufnehmen können. Jetzt wie soll dieser Warenkorb aussehen?

Ich nehme mal an dass das Ganze mit einer $_SESSION-Variabel gespeichert wird. Aber wie genau... ich habe mir gedacht vllt mit einem String in dem die IDs abgetrennt sind, also z.B. "235||45||456" und dann könnte ich das ganze dann mit der explode()-Funktion auseinander nehmen und dann die Infos der entsprechenden IDs aus der Datenbank abfragen. Und wenn ein neuer Artikel hinzugefügt wird einfach

PHP-Code:
$_SESSION["warenkorb"] = "".$_SESSION["warenkorb"]."||id" 
Bin ich da total auf dem Holzweg oder gibt es noch bessere Möglichkeiten?
Mit Zitat antworten
  #2 (permalink)  
Alt 26-05-2007, 12:11
ArSeN
 Registrierter Benutzer
Links : Onlinestatus : ArSeN ist offline
Registriert seit: Feb 2006
Ort: Berlin
Beiträge: 1.052
ArSeN ist zur Zeit noch ein unbeschriebenes Blatt
ArSeN eine Nachricht über ICQ schicken ArSeN eine Nachricht über AIM schicken ArSeN eine Nachricht über Yahoo! schicken
Standard

Zitat:
Bin ich da total auf dem Holzweg oder gibt es noch bessere Möglichkeiten?
Beides

An sich ist deine Variante sicherlich möglich, aber Sinnvoll sieht sie nicht aus. Du kannst auch komplette Arrays in deine Session schreiben, damit wird das Session-Array Mehrdimensional. Du gibst dem Session-Array z.B. einen Datensatz mit dem Index "warenkorb" und in dem befindet sich wiederrum ein array, in dem die IDs der einzlenen DVDs stehen, und schon hast du alle im Warenkorb befindlichen IDs schön sauber aufbewahrt.
__________________
Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.
Mit Zitat antworten
  #3 (permalink)  
Alt 26-05-2007, 12:16
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Oke danke für deine Antwort. Ja das mit den arrays hab ich mir noch halb gedacht, dass es vorgeschlagen wird . Leider hab ich (mehr oder weniger) keine Ahnung von Arrays . Ausser wenn ich ein MySQL-Resultat in ein Array speichere, weiss ich wie ich welche Werte Abrufen kann... aber in dem Fall werde ich mich mit den Arrays mal beschäftigen (wird eh mal Zeit ).
Mit Zitat antworten
  #4 (permalink)  
Alt 26-05-2007, 12:35
ArSeN
 Registrierter Benutzer
Links : Onlinestatus : ArSeN ist offline
Registriert seit: Feb 2006
Ort: Berlin
Beiträge: 1.052
ArSeN ist zur Zeit noch ein unbeschriebenes Blatt
ArSeN eine Nachricht über ICQ schicken ArSeN eine Nachricht über AIM schicken ArSeN eine Nachricht über Yahoo! schicken
Standard

Richtig!

Arrays können in vielen Situationen eine Menge helfen, wie z.B. auch in deinem Fall. Alles was man darüber wissen muss steht glücklicherweise auch hier.
__________________
Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.
Mit Zitat antworten
  #5 (permalink)  
Alt 26-05-2007, 12:49
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Oke habe mir das Thema kurz durchgelesen und mir folgenden Code geschrieben:

Einmal die add_warenkorb.php:
PHP-Code:
<?php 
// Session starten
session_start ();

// Datenbankverbindung aufbauen 
include("includes/config.php");

// Die Film-ID dem Array hinzufügen 
$warenkorb[] = "".$_GET["id"]."";


// Das neue Array in eine $_SESSION-Variable speichern
$_SESSION["warenkorb"] = $warenkorb;

// Wieder zu den Movie-Details des hinzugefügten Movies zurückkehren
header ("Location: show_movie.php?id=".$_GET["id"].""); 

?>
Und in der Datei show_movies.php folgende Line:
PHP-Code:
<a href="add_warenkorb.php?id='.$movie["filmid"].'">In den Warenkorb</a
Ist das so wie du es gemeint hast? Also funktionieren tut es, wenn ich es Ausgebe mit:
PHP-Code:
'.$_SESSION["warenkorb"][0].' '.$_SESSION["warenkorb"][1].' 
Klar muss ich dass dann noch mit einer for-Schleife ausgeben, aber ist ja nur mal zum testen. Gibt es da (ziemlich sicher ) noch Verbesserungen?

Geändert von pascal007 (26-05-2007 um 12:51 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 26-05-2007, 13:26
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

nur kurz, was mir so aufgefallen ist.

$warenkorb[] = "".$_GET["id"]."";

die leerstrings vorne und hinten kannst du dir sparen - sinnfrei (ebenso bei header...).
außerdem, wenn du warenkorb der session zuweist, überschreibst du alle alten werte.
und alles was von außen kommt, ist potentiell böse, also vorher $_GET['id'] überprüfen.

header ("Location: show_movie.php?id=".$_GET["id"]."");

die id hast du bereits in der session, also ist es überflüssig, sie nochmals per url-parameter zu übertragen.
Mit Zitat antworten
  #7 (permalink)  
Alt 26-05-2007, 13:34
ArSeN
 Registrierter Benutzer
Links : Onlinestatus : ArSeN ist offline
Registriert seit: Feb 2006
Ort: Berlin
Beiträge: 1.052
ArSeN ist zur Zeit noch ein unbeschriebenes Blatt
ArSeN eine Nachricht über ICQ schicken ArSeN eine Nachricht über AIM schicken ArSeN eine Nachricht über Yahoo! schicken
Standard

PHP-Code:
// Die Film-ID dem Array hinzufügen 
$warenkorb[] = "".$_GET["id"]."";


// Das neue Array in eine $_SESSION-Variable speichern
$_SESSION["warenkorb"] = $warenkorb

Kannst du simplerweise zusammenfassen zu

PHP-Code:
// Neue ID in den Warenkorb legen
$_SESSION["warenkorb"][] = $_GET['id']; 
Dann hast du auch nicht das Problem das der alte Warenkorb bei der Zuweisung überschrieben wird. Zu dem was 3DMax bereits sagte würde ich auch noch prüfen, ob die übergebene ID bereits im Warenkorb ist, um zu vermeiden, dass sie zwei mal reinkommt.
__________________
Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.
Mit Zitat antworten
  #8 (permalink)  
Alt 26-05-2007, 13:49
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Okey, aber sonst kann ich auf dem Code-"Schnipsel" den ich da geschrieben habe aufbauen? Also ist es so, wie du es dir vorgstellt hast?

Dann habe ich noch eine Frage. Ich möchte ja jetzt die Infos zu den Filmen noch abfragen.

Nur: ich weiss nicht wie viele Filme da drinn sind.

Eine Abfrage würde ja so aussehen:
PHP-Code:
$selectmovies mysql_query("SELECT * FROM tabelle 
WHERE id = '"
.$_SESSION["warenkorb"][0]."' OR '".$_SESSION["warenkorb"][1]."'"); 
Jetzt hab ich ja aber keine Ahnung wie viel Movies der User ausgewäählt hat und folglich kann ich ja keine richtige MySQL-Abfrage machen. Könnt ihr mir da nen kleinen Denkanstoss geben, wie ich das bewerkstelligen kann?

EDIT Habe auch gerade noch gesehen dass es mit dem löschen eines Arrays-Elements (wenn ich 3 habe) z.B. mit 2 ein Problem gibt, da ja dieses dann nicht mehr existiert und bei einer for-Schleife ja dann ein Fehler auftritt... aber zuerst möchte ich mal die MySQL-Abfrage richtig hinbekommen.

Geändert von pascal007 (26-05-2007 um 14:08 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 26-05-2007, 14:11
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von pascal007
Jetzt hab ich ja aber keine Ahnung wie viel Movies der User ausgewäählt hat und folglich kann ich ja keine richtige MySQL-Abfrage machen.
ich denke, du möchtest die anzahl auf drei begrenzen?
also müsstest du schon in deiner add_warenkorb.php mit count($_SESSION['warenkorb']) die anzahl überprüfen. hier müsstest du ferner noch ein flag in der db setzen, dass der film schon ausgeliehen ist (parallelzugriff).
bei dieser gelegenheit würde ich gleich noch alle details des films in der session speichern.
Mit Zitat antworten
  #10 (permalink)  
Alt 26-05-2007, 14:33
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Also ich habe bei der Tabelle in welcher die Filme drinn gespeichert sind ein Feld "lent". In das schreibt es sobald ich die Ausleihanfrage akzeptiert habe die ID des entsprechenden Users. Sollte dieses Feld nicht leer sein, ist der Film als ausgeliehen gekenntzeichnet und kann nicht in den Warenkorb aufgenommen werden. (Am besten blende ich dann gleich noch den Link aus.) Ich kann mir nicht ganz vorstellen wie ich alle Daten in ein Array speichern soll. Soll ich das auch in "warenkorb" speicher oder z.B. in "movieone". Also so:
PHP-Code:
// Anzahl Filme auslesen
$countmovies count($_SESSION['warenkorb'])

// Die Infos des ausgewählten Movies aus der DB holen
$selectmovie mysql_query("SELECT * FROM tabelle WHERE id = '".$_GET["id"]."'");

// Das ergebnis in ein Array speichern
$movie mysql_fetch_array($selectmovie); 
Dann möchte ich irgendwie den Variabelname "$movie" festlegen mit in der art "movie."($countmovies+1)"" oder so... kann mir das irgendwie nicht so ganz vorstellen.
Mit Zitat antworten
  #11 (permalink)  
Alt 26-05-2007, 15:03
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von pascal007
Dann möchte ich irgendwie den Variabelname "$movie" festlegen mit in der art "movie."($countmovies+1)"" oder so...
wozu? wenn du ein array benutzt, wird der key automatisch durchnummeriert, bei 0 beginnend.

mach mal:
PHP-Code:
$test=array();

$test[]='eintrag 1';
$test[]='eintrag 2';
$test[]='eintrag 3';

echo 
'<pre>'.print_r($testtrue).'</pre>'
einem array kannst du auch arrays zuweisen (z.b. dein mysql-result).
$test[]=mysql_fetch_array($selectmovie);

einfach mal ausgeben lassen.
und auch mal den von ArSeN geposteten link besuchen.
Mit Zitat antworten
  #12 (permalink)  
Alt 26-05-2007, 15:54
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Aha! Dann hab ich eigentlich ein "Array-im-Array", richtig?

Dann müsste ich ja theoretisch, wenn im ersten Array-Element der Filmname an 2. Position ist

Code:
    [2] => Array
        (
            [0] => 135
            [id] => 135
            [1] => Zurück in die Zukunft
            [name] => Zurück in die Zukunft
            [2] => 1
            [dvds] => 1
, den Filmnamem mit $array[2][1] (oder mit $array[2][name]) ansprechen. Aber wieso habe ich alle Einträge 2 Mal? Einmal mit einer Nummer und einmal mit dem Spaltenamen als Key.

EDIT So jetzt klappt es eigentlich wie ich es will... ich muss nur noch ein paar Sicherheitsabfragen machen (schon ausgeliehen? liegen im Array schon mehr als 3 Einträge, etc.) und irgendwie diese Doppeleinträge beim "Einlesen" des Arrays verhindern. Und dann sollte das eigentlich laufen . Bei Problemen melde ich mich wieder. Vielen, vielen Dank für eure kompetente Hilfe .

Geändert von pascal007 (26-05-2007 um 16:16 Uhr)
Mit Zitat antworten
  #13 (permalink)  
Alt 26-05-2007, 16:16
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von pascal007
Aha! Dann hab ich eigentlich ein "Array-im-Array", richtig?
genau.
du könntest auch "zwei-dimensionales-array", "array von arrays" oder "matrix" sagen.
übrigens lassen sich arrays auch beliebig tief schachteln.

Zitat:
Original geschrieben von pascal007
Aber wieso habe ich alle Einträge 2 Mal? Einmal mit einer Nummer und einmal mit dem Spaltenamen als Key.
"mysql_fetch_array() ist eine erweiterte Version von mysql_fetch_row(). Die Daten werden sowohl unter numerischen Indizes des Ergebnis-Arrays abgelegt, als auch unter assoziativen Indizes. Als Schlüssel für die assoziativen Indizes werden die Feldnamen benutzt"mysql_fetch_array()
Mit Zitat antworten
  #14 (permalink)  
Alt 26-05-2007, 16:35
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Wäre es viel resourcenschonender, wenn ich einfach nur mysql_fetch_row() nehmen würde? (Wobei es mir lieber ist wenn ich die Spalten gleich mit dem Namen ansprechen kann.)

Jetzt würde ich zum nächsten Prob kommen: Arrays wieder sauber löschen. Vllt. tut jemand ja mal was in den Warenkorb, das er nicht möchte dann soll er es auch wieder löschen können. Wenn er schon 3 Mögliche Artikel im Warenkorb hat und er Nr. 2 löscht und dann wieder einen dazunimmt, dann gibt's ja nur noch [0][2][3]. Also [1] fehlt und bei einer for-Schleife gibt das ja dann den Fehler. Wie kann ich jetzt alle Einträge nach dem gelöschten Eintrag "eines nachrücken lassen"?
Mit Zitat antworten
  #15 (permalink)  
Alt 26-05-2007, 16:51
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

array_slice()!

http://de3.php.net/array
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:25 Uhr.