# MySQL und PHP Onlineshop Probleme



## Sudnif (22. Juni 2010)

Hallo,

wir machen in Informatik zurzeit ein Projekt bei dem wir einen Onlineshop "programmieren" sollen (sind 9. klasse) -> also nicht zu hohes programmierniveau, wir müssen das ja auch noch vorstellen 

dabei haben wir nun einige schwierigkeiten, die ich im folgenden mal erläutern wollte ;D

wir können html, PHP und mysql

also 
1.: das login system.
wir haben schon viel googegelt, umgeändert,abgeändert etc. aber im enteffekt ging ehrlich gesagt nichts. ich glaube wir brauchen dafür "sessions(?)" wenn wir auch einen warenkorb machen wollen(müssen wir auch.). also eigentlich ja ganz simpel: einfach fertigen code ausm internet holen, umändern und sollte gehen;geht aber nicht..
wir wissen auch nicht wie wir teilweise den code abändern müssen denn zB liegt auf dem server xyz mit dem benutzer x die mysql tabellen in der datenbank x... wir wären also sehr dankbar wenn einer von euch, uns mal einen funktionierenden login code, der einen username und ein passwort aus einer mysql tabelle Kunde abfragt(und die in der mysql datenbank x liegt), erstellen würde.

2. warenkorb/verkauf
hier geht ehrlich gesagt noch nichts. wir können zwar artikel aus der datenbank auslesen und auch anzeigen lassen, aber wie das mit dem warenkorb funktionieren soll; kp unser lehrer hat uns auch nichts erklärt. haben natürlich auch schon viel gegoogelt aber da das mit dem login einfach nicht funktionieren will können wir hier ja eigentlich noch gar nicht weiterarbeiten.

3.
wir haben eine Tabelle "Artikel" in der es eine spalte "kategorien" gibt. wie können wir jetzt nur zB den Arbeitsspeicher anzeigen lassen? (natürlich mit preis, name etc steht ja alles auch in der tabelle ich glaube ihr wisst was ich sagen will  )

wären sehr sehr froh wenn sich jemand die müde machen würde uns ein bisschen code zu schicken.

MFG


----------



## Puepue (22. Juni 2010)

Also erstmal - heftige Aufgabe für die 9. Klasse - aber man wächst ja an seinen Aufgaben

Ich bin mir nicht so sicher, wie viel wert auf Datensicherheit gelegt wird - wenn es aber einfach nur klappen soll, dass man sich da einloggt was in den Warenkorb legt und dann die Bestellung abschickt, hier schon mal ein paar Tipps:

Zu 1)
Einen fertigen Code präsentieren, wäre zu einfach, wenn du genaue Fragen hast immer her damit

Am besten wäre natürlich ein Anmeldeformular, sodass der User einen Account hat, in dem Adresse Name etc, also persönliche Daten schon in der DB gespeichert sind. Dann muss man keine persönlichen Daten übertragen.
Dabei würde ich dann Passwörter in eine Tabelle und usernamen in eine andere Tabelle schreiben (JOIN) - normalerweise verschlüsselt man PWs auch, aber ich denke, das führt zu weit.

Ein Anmeldeformular sollte mit deinen Kenntnissen ja eigentlich kein Problem darstellen?
zeig mal, was du schon an code hast

Ansonsten gibts auch immer noch die "Bibel": PHP: Sessionbasiertes Loginsystem


2) 
Eine Einleitung zu Sessions:
Sessions (PHP-Tutorial)
Wenn du das nicht verstehst, schau vielleicht mal hier:
PHP für dich - PHP und mySQL einfach und kurz erklärt
Vielleicht kannst du auch mit cookies arbeiten:
PHP für dich - PHP und mySQL einfach und kurz erklärt

3)
Schau dir mal den Select-Befehl von Mysql an an:
php-dummies.de - Tutorials - mySQL - SELECT - WHERE


----------



## Sudnif (22. Juni 2010)

vielen dank schon mal für die schnelle antwort puepue
werde mir das nochmal alles durchlesen und morgen ausprobieren (es muss morgen klappen weil wir übermorgen abgeben müssen und wie gesagt bis jetzt nichts wirklich geht :/ )
edit: ich glaube datensicherheit interessiert mich erstmal nicht die bohen hauptsache es geht 
ach ja ein registrierungsformular für die mysql datenbank gibt es schon und es funktioniert auch( also man kann sich registrieren)..jetzt muss dann nur noch das mit den sessions klappen, was bis jetzt aus welchen gründen auch immer nicht geklappt hat


----------



## FoXXie (22. Juni 2010)

Danke Puepue für deine Antwort .
Ich gehöre mit zum "Team"(wenn mans Team nennen kann...).

Datensicherheit kam bei uns noch nicht vor,also kein Thema,vielleicht kommt das im nächsten Schuljahr.
Ein Anmeldeformular haben wir,das Funktioniert auch wunderbar. Nur der Login will nicht Funktionieren. Fehlermeldungen und Fragezeichen in unseren Augen sind an unserer Tagesordnung.

Danke für dein Angebot an Mithilfe,wir werden gleich mal was hier reinknallen 

MFG,Mario


----------



## Sudnif (22. Juni 2010)

so nochmal ne weitere "frage":
ich verstehe das noch nicht genau mit den sessions (auch wenn gut auf selfhtml etc erklärt ist.)
denn wir wollen den bereich nach dem login ja nicht "schützen", sondern es soll dafür gut sein dass der kunde halt auch sachen kaufen kann . (scheint sinnig in nem onlineshop..)
..kann man zB es irgentwie "konfigurieren" das auf jeder seite von uns dann immer irgtnwo steht "sie sind zurzeit als ->username<- eingeloggt-> und darunter dann ein "logout" button?
wäre nett wenn du die anfänger-fragen beantworten könntest (oder gern auch einer anderer  )


----------



## Sudnif (22. Juni 2010)

so nochmal kurz nachgedacht das mit den kategorien müsste eigentlich relativ einfach gehen oder?
(kanns halt leider grade nicht hier ausprobiern..)
<?
  $abfrage = "SELECT * FROM Artikel WHERE Kategorie =  Arbeitsspeicher";
 ?>

oder
<?
  $abfrage = "SELECT * FROM Artikel WHERE Kategorie LIKE  Arbeitsspeicher";
 ?>

auf jeden fall so in der art 

muss dann morgen halt "nur" noch 1) und 2) klappen ;D


----------



## Puepue (22. Juni 2010)

Hm ok ihr habt euch ja was vorgenommen - bereitet euch mal auf wenig Schlaf vor 

Also SQL ist nicht mein Traum, ausprobieren kann ich es gerade auch nicht, hab im moment kein Zend installiert (das solltet ihr aber vielleicht mal tun, dann kann man auch SQL und PHP ausprobieren ) Zend Server Community Edition - Zend.com
oder wenn ihr gleichzeitig arbeiten wollt, nen Webspace Free Webspace mit PHP und MYSQL kostenlos | CwCity.de
da gibts dann auch rechts nen Menüpunkt Datenbanken oder so ^^

$abfrage = "SELECT * FROM `Artikel` WHERE `Kategorie` LIKE `Arbeitsspeicher`";
oder
$abfrage = "SELECT * FROM `Artikel` WHERE `Kategorie` LIKE `%Arbeitsspeicher%`"; Das sind dann alle wo Arbeitsspeicher mit im Namen steht, also auch "Arbeitsspeicher ab 1 GB"



Wegen der Sessions (vielleicht auch lieber cookies das müsstest ihr dann untereinander abwiegen, ist etwas leichter)
[PHP/MySQL] Login-System mit Sessions - PHP - Tutorials @ tutorials.de: Forum & Hilfe

Ne bessere Erklärung und Beispielcode kann ich auch nicht bieten


----------



## Sudnif (22. Juni 2010)

vielen dank nochmal für deine mühe 
eigentlich wollten wir das nicht unbedingt mit cookies machen aber wenn du meinst das dies einfacher ist .. 

mfg -> wir melden uns wenns probleme/fragen gibt


----------



## FoXXie (22. Juni 2010)

Warum keine Cookies? Wie geht denn das? Probieren könnten wir es wenigstens mal


----------



## Sudnif (23. Juni 2010)

so ich bins nochmal wird langsam immer später :/

sry diese frage war dummheit pur, deshalb habe ich sie wieder gelöscht 

...so 1:50 jetzt aber mal endlich ins bett..


----------



## mauorrizze (23. Juni 2010)

Ich möchte nen kleinen Teil zum Verständnis von Sessions beitragen, z.B. warum ihr sie bei einem Onlineshop benötigt (steht eventuell auch in den genannten Quellen, aber ich fasse es mal in meine Worte):

Ein "Problem" bei php-Seiten ist, wie ihr Daten von einer Seite zur nächsten übermittelt. Beim Login geht das ja noch über Formulare, die dann per GET oder POST der nächsten PHP-Seite übermittelt werden. Wenn ihr aber zur nächsten Seite wollt, z.B. den Shop durchstöbern, sind die Logindaten wieder weg. Alle $variablen der Vorseite sind verflüchtigt. 
Lösung: u.A. Sessions, damit habt ihr ein Array $_SESSION, in das ihr z.B. speichern könnt, ob jemand eingelogt ist oder welche Nutzer-ID er hat. Alles was darin gespeichert ist, bleibt für gewisse Zeit auf dem Webserver gespeichert und steht auf allen nächsten Seiten zur Verfügung.

Beispiel: das Login-Formular sendet einen Benutzernamen+Passwort an eine PHP-Seite, die überprüft das und falls sie einen passenden Eintrag in der Datenbank findet, wird $_SESSION['eingelogt'] = true gesetzt oder $_SESSION['benutzername'] = $_GET['name']. 
Klickt sich der Nutzer durch den Shop, bleiben die Variablen erhalten, will er z.B. seinem Warenkorb ein Artikel hinzufügen, kann man ganz fix den gewünschten Artikel in die passende Datenbanktabelle einfügen, mit dem richtigen Benutzer. Oder per
if ($_SESSION['eingelogt'] == true)
  echo "Sie sind als " + $_SESSION['benutzername'] + " eingelogt.";
den Benutzernamen ausgeben.

Wichtige Voraussetzung: die Funktion session_start() muss möglichst ganz am Anfang der PHP-Datei ausgefügt werden, sonst steht $_SESSION nicht zur Verfügung. Hier Erklärung und ganz einfaches Beispiel.

Worauf entwickelt ihr? Habt ihr von der Schule Webspace zur Verfügung bekommen, auf den ihr von zuhause zugreifen könnt?
Falls ihr morgen noch konkrete Fragen habt könnt ihr mir auch gerne ne PM schicken.

Ich muss zugeben ich hab Cookies noch nie von Hand erzeugt, weil ich das mit den Sessions recht einfach finde. Und wenn der Webserver richtig konfiguriert ist, funktionieren Sessions auch wenn Cookies Client-seitig deaktiviert sind, um diese Tricks kümmert sich dann PHP von fast alleine.


----------



## Sudnif (23. Juni 2010)

so danke für die antwort...so sitzen jetzt grade in der schule und probieren jetzt weiter zu kommen
problem nummer eins: irgentwie funktioniert das nicht das wir  nur die artikel auslesen und dann anzeigen lassen können dir einer bestimmten kategorie entsprechen: 
$sql = "SELECT Kategorie, ArtikelNr, ArtikelName, Preis, Beschreibung, Bild FROM Artikel WHERE Kategorie LIKE Grafikkarte"; -> will einfach nicht funktionieren obwohl $sql = "SELECT Kategorie, ArtikelNr, ArtikelName, Preis, Beschreibung, Bild FROM Artikel"; funktioniert einer ne idee?

ach ja kann uns vielleicht nochmal einer den code schicken womit wir die session erstmal starten? (also loginformular kriegenm wir noch selber hin  ) haben halt jetzt nen ziemlich knappen zeitplan..


----------



## mauorrizze (23. Juni 2010)

<?php
session_start()
....
ganz an den Anfang

und Werte als Zeichenketten, also in deinem Beispiel Grafikkarte müssen in einfache Anführungszeichen
... LIKE 'Grafikkarte'";
Statt LIKE genügt in dem Fall übrigens ein =
Zahlen weiterhin ohne die Anführungszeichen


----------



## Sudnif (23. Juni 2010)

danke sehr das mit den anführungszeichen geht schon mal *erleichtert*...so ein billiger fehler 
so jetzt muss "nur" noch das mit dem login, dem warenkorb und dem kaufen funktionieren 
PS: wir wissen schon das mit dem session_start() aber wir haben halt eine login.hmtl seite auf der man seine daten zum anmelden in ein formular eingibt und dann fehlt uns sozusagen die login.php datei...wenn ihr versteht was ich meine...wenn man dann ja ersdt einmal angemeldet ist muss man ja nur noch auf jeder seite dann immer session_start() schreiben


----------



## mauorrizze (23. Juni 2010)

Das Formular wird ja vermutlich per GET oder POST an eine PHP-Datei gesendet: ($_POST ggf. mit $_GET ersetzen, je nachdem was im Formular bei method= steht)
login.php:

<?php
session_start();

$db = mysql... //mysql-Verbindung + connect...

$name = $_POST['benutzername']; //Daten aus dem Formular
$pass = $_POST['benutzerpasswort'];

$query = "SELECT * FROM `logindaten` WHERE `name`= '$name' AND `passwort` = '$pass'";
$result = mysql_query($query, $db);
//mysql soll in der datenbank nach einem Eintrag suchen mit dem eingegebenen Namen+Passwort. Findet er genau ein Ergebnis, passt alles, bei falschem Namen oder Passwort findet er keinen Eintrag, doppelte dürfen nicht vorkommen.
if (mysql_num_rows($result) == 1) { 
$_SESSION['eingeloggt'] = true;
echo "Sie wurden erfolgreich eingeloggt. <a href=\"shop.php\">Weiter zum Shop</a>";
$_SESSION['name'] = $name
... //weitere interessante Daten speichern
}
else {
//Login nicht erfolgreich...
...
}

...
mysql_close($db);
?>



Auf den nächsten Seiten
session_start();
nicht vergessen, dann kann per $_SESSION['eingeloggt'] abgefragt werden, ob der Benutzer eingeloggt ist.
Den Warenkorb kann man komplett in der Session speichern (z.B. Array mit Item-Nummern), oder in der Datenbank speichern und über Benutzer-ID abfragen.

Edit: hoffe der Beispielcode ist verständlich und hilft euch, ist aber gerade 100% freihand entstanden, keine Korrektheitsgarantie


----------



## Sudnif (23. Juni 2010)

eine frage nochmal:
ich will die seiten ja nicht "schützen", die sessions sollen einfach dafür dienen das der kunde halt auch später mal sachen kaufen kann bzw in den warenkorb legen kann,obwohl wir das mit dem warenkorb glaube ich aus zeitgründen vielleicht sogar weglassen. irgentwelche tips/anregungen?  

mfg ich weiß das wir nerven


----------



## Sudnif (23. Juni 2010)

oh da kam ja schon ne antwort sry


----------



## Sudnif (23. Juni 2010)

so eine frage noch  :
da oben beim connecten hab ich jetzt
$db = mysql_connect("geheim", "benutzername")

wie connecte ich jetzt die datenbank x an die darin liegt (und worin dann die tabelle "Kunden" ist?

danke für eure geduldigkeit (bzw für deine  )


----------



## mauorrizze (23. Juni 2010)

$db = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_select_db('Kunden', $db);


----------



## Sudnif (23. Juni 2010)

danke nochmal 
aber ich glaube du hast das ein bisschen falsch verstanden 
also: wir müssen auf die datenbank xy connecten also nicht auf kunden (zu der kommt er ja nachher dann: $query = "SELECT * FROM `Kunde` WHERE `username`= '$name' AND `passwort` = '$pass'"; )

also nach unseren vorstellungen müsste da jetzt stehen 
$db = mysql_connect('server', 'xx');
mysql_select_db('datenbank1', $db);

so was bitte soll jetzt das $db bei dem mysql_select_db bringen? 

mfggl

ps: sry für unsere "blödheit"


----------



## Sudnif (23. Juni 2010)

also wir haben da jetzt stehen:
<?php
session_start();

$db = mysql_connect('server', 'xx');
mysql_select_db('db1');

$name = $_POST['username'];
$pass = $_POST['passwort'];

$query = "SELECT * FROM `Kunde` WHERE `username`= '$name' AND `passwort` = '$pass'";
$result = mysql_query($query, $db);
//mysql soll in der datenbank nach einem Eintrag suchen mit dem eingegebenen Namen+Passwort. Findet er genau ein Ergebnis, passt alles, bei falschem Namen oder Passwort findet er keinen Eintrag, doppelte dürfen nicht vorkommen.
if (mysql_num_rows($result) == 1) {
$_SESSION['eingeloggt'] = true;
echo "Sie wurden erfolgreich eingeloggt. <a href=shop.php/> $_SESSION['name'] = $name
}
else {
//Login nicht erfolgreich...
...
}

...
mysql_close($db);
?>

und er zeigt immer den fehler an: 
Parse error: parse error, unexpected '}' in .../loginerfolgreich.php  on line 17

mfgglgl

PS: pw gibts keins aufm server also nicht wundern gl


----------



## mauorrizze (23. Juni 2010)

eure vorstellung sollte richtig sein. Im connect-Befehl gibt man i.d.R. den Server, den MySQL-Namen und das MySQL-Passwort an.
Anschließen wählt man die Datenbank aus mit mysql_select_db und auf die Tabelle greift man in den queries zu. 
Das mit den 'Kunden' hab ich in der Tat durcheinander gebracht.

das $db dabei ist optional, glaub ebenso wie bei mysql_query($query, $db). Man muss es verwenden, wenn man z.B. mehrere Datenbanken parallel geöffnet hat, oder gar zu verschiedenen MySQL-Servern ($db1 und $db2 oder sowas), aber wenn es nur eine gibt kann man's auch weglassen.
Hier werden alle php-Funktionen kurz und knapp erklärt.


----------



## mauorrizze (23. Juni 2010)

Da fehlt in Semikolon in Zeile 16:
$_SESSION['name'] = $name*;*
die vielen "..." weiter unten im Code wird php aber auch nicht mögen 
(wollte kein 100% copy-paste-code liefern, eweng was selber überlegen und dabei lernen sollt ihr schon  )


----------



## Sudnif (23. Juni 2010)

ok danke haben bloß zeitdruck 
danke für deine müde  mfg


----------



## mauorrizze (23. Juni 2010)

Kein Problem. Jetzt muss ich allerdings erstmal weg vom Rechner, viel Erfolg weiterhin.


----------



## Sudnif (23. Juni 2010)

Danke. Funktioniert jetzt mit dem einloggen .

wenn weitere fragen vorhanden sind frage ich hier wieder


----------



## Sudnif (23. Juni 2010)

so wir sind jetzt wieder zuhause aber müssen trotzdem noch weitermachen; deshalb hier einige weitere Fragen:

1) Sessions: wenn man sich jetzt bei uns einloggt wird ja eine neue session erstellt. wie können wir jetzt diese session auch auf den anderen seiten "erhalten"? geht das mit session_start() ?
wenn ja muss das dann auf jede seite?
wie können wir realisieren das, auf möglichst auf jeder seite dem besucher unserer seite angezeigt wird "sie sind zurzeit eingeloggt als username" bzw "sie sind zurzeit nicht eingeloggt.->login"

2)warenkorb und artikel verkauf 
dazu haben wir noch keine lösungsansätze. wir haben keine ahnung wie wir soetwas realisieren sollen. auf jeden fall ist dafür ja die session wichtig, zum genauen identfizieren des kundens(oder?). wie können wir das realisieren das man artikel  in den warenkorb legen kann?
wichtig wäre halt wenn der kunde dann nachher die ware(n) im warenkorb hat, dass er dann auf "kaufen" gehen könnte und dann dieses alles in eine tabelle Verkauf geschrieben wird (muss doch so sein oder?) und dem kunden angezeigt wird: sie haben das und das gekauft und das wird sie soundsoviel euro kosten.

wär extrem nett wenn sich jemand noch einmal die zeit nehmen würde
mit freundlichen Grüßen


----------



## rofl...vs...xD (23. Juni 2010)

Sudnif schrieb:


> 1) Sessions: wenn man sich jetzt bei uns einloggt wird ja eine neue  session erstellt. wie können wir jetzt diese session auch auf den  anderen seiten "erhalten"? geht das mit session_start() ?
> wenn ja muss das dann auf jede seite?
> wie können wir realisieren das, auf möglichst auf jeder seite dem  besucher unserer seite angezeigt wird "sie sind zurzeit eingeloggt als  username" bzw "sie sind zurzeit nicht eingeloggt.->login"



Nein das muss nicht auf jede Seite.
Wenn man schreibt session_start(); wird ein Cookie gesetzt, das sogennante Session Cookie.
Diese bleibt solange erhalten bis der Browser geschlossen wird.
Dann macht man einfach $_SESSION["angemeldet"]=true; wenn die Anmeldung erfolgreich war.
Und auf jeder Seite wird jez abgefragt ob $_SESSION["angemeldet"]==true; ist und wenn das zutrifft gebt ihr zb "sie sind zurzeit eingeloggt als  username" bzw "sie sind zurzeit nicht eingeloggt.->login" aus.


----------



## mauorrizze (23. Juni 2010)

Seit ihr schon weiter gekommen?

1)
session_start() muss auf alle Seiten auf denen ihr $_SESSION, also Sessions verwenden wollt. Anschließend könnt ihr mit einer kleinen If-Abfrage den gewünschten Text ausgeben:

if ($_SESSION['eingeloggt'] == true) {
 echo "blabla eingeloggt als ".$_SESSION['name']; // Punkt . dient zum anhängen von Zeichenketten
}
else {
 echo "nicht eingeloggt... <a href=\"login.html\">zum login</a>";
}

2) Es wird komplexer... 
Hat der Lehrer euch eigentlich die Aufgabe gestellt einen Mini-Shop zu proggen und hat ER überhaupt Ahnung davon? Denn selbst so'n paar Grundfunktionen erfordern schon einiges an Wissen, von dem ich in der 9. Klasse doch noch weit entfernt war. In der 12. rum schon eher, aber hatte leider auch nie Informatik in der Schule.
Ich überleg mir mal kurz ne möglichst einfache Erklärung...


----------



## mauorrizze (23. Juni 2010)

rofl...vs...xD schrieb:


> Nein das muss nicht auf jede Seite.
> Wenn man schreibt session_start(); wird ein Cookie gesetzt, das sogennante Session Cookie.


Hmm, könntest auch recht haben, aber ich meine das hängt von der PHP-Konfiguration ab. In meinen Fällen musste ich es immer setzen. Auf alle Fälle ist aber session_start nicht grundsätzlich nur für's Cookie erzeugen zuständig.
php.net:


> session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf, die auf der Session-Kennung basiert, die mit einer GET- oder POST-Anfrage oder mit einem Cookie übermittelt wurde.



Edit:
Zu 2)
angenommen es gibt eine shop.php, die die Waren per for-schleife auflistet, welche in der Datenbank in einer Tabelle inklusive einer kurzen Waren-ID stehen. (habt ihr sowas schon?)
Dann lasst in der Schleife eine weitere Spalte erzeugen, die einen Link erzeug in der Form <a href="shop.php?Ware=124">zum Warenkorb hinzufügen</a>
124 steht hier für die Waren-ID. Ihr könnt auch direkt zum Warenkorb verlinken, also korb.php?add=124, ist egal.
Auf alle Fälle kann man in der aufgerufenen Seite den angehängten Parameter abfangen:
if (isset($_GET['Ware'])) {
 // Ware in den Korb legen - wie das aussieht, dazu später mehr 
}

Edit2:
Um die Ware, von der man ja jetzt schonmal die ID hat, in den Korb zu legen, gibt es mehrere Möglichkeiten. Wisst ihr was Arrays sind? Dann könnte man innerhalb der Session-Variablen ein Array/eine Liste von den Waren-IDs speichern. Das hinzufügen würde folgendermaßen funktionieren:
$_SESSION['warenkorb'][] = $_GET['Ware']
(Im Beispiel hier würde jetzt ein neues Array erzeugt, oder in das bestehende Array ein neuer Wert eingefügt, nämlich 124)


Das auflisten des Warenkorbs ginge in etwa so:
foreach ($_SESSION['warenkorb'] as $ware) {
//MySQL-Abfrage nach der Ware mit der Waren-ID $ware
//Ausgabe des Artikelnamens aus der Datenbank
}


----------



## rofl...vs...xD (23. Juni 2010)

Ich würde neben jeden Artikel einen ganz einfachen Submit_button geben.
Wenn darauf geklickt wird wird der Name, die ID oder sonstwas vom Artikel in eine Session Variable geschrieben(mit einem Texttrenner).

Wenn dann auf Kaufen geklickt wird gebt ihr ganz einfach mit einer For-Schleife über die Variable und gebt sie in einer Tabelle aus. 


```
echo"<table >";
echo"
            <thead>
                <tr>
                    <th>Produkt</th>
                </tr>
            </thead>";

$daten=  split ( '[#]', $_SESSION["Waren"]);


  for ( $x = 0; $x < count ( $daten ); $x++ ){
         echo"<tr>";
         echo"<td>$daten[$x]</td>";
         echo"</tr>";
  }
   


echo"</table>";
?>
```

Übrigens halte ich das hier grundsätzlich für Sinnlos, da es mir so vorkommt als ob die Grundkenntnisse für soetwas komplett fehlen.


----------



## Puepue (23. Juni 2010)

```
$db = mysql_connect('server', 'xx');
mysql_select_db('datenbank1', $db);
```

An die Funktion mysql_select_db muss man die folgenden Parameter übergerben
string $database_name und
resource $link_identifier

$database_name ist also 'datenbank1'
und
$link_identifier muss eine funktionierende DB Verbindung sein


----------



## Sudnif (23. Juni 2010)

jungs ihr seid echt super; so bin grade erst nach hause gekommen vom spiel und werde jetzt mal versuchen die dinge in die tat umzusetzen  (problem hier kann ich das nicht mit der datenbank ausprobieren egal..)...zu dem warenkorb :mauorrizze hat da ja schon was Waren-ID gesagt etc...wir haben in unserer tabelle allerdings  nur Kategorie, ArtikelNr, ArtikelName, Preis, Beschreibung, Bild (würde das dann über artikelnr laufen? 
ach ja und unser code zum abrufen der daten aus der datenbank lautet im moment so: (man kann allerdings noch gar nichts kaufen...)
<?php

$mysqlhost="server";

$mysqluser="xy";

$mysqldb="datenbank1";



$connection=mysql_connect($mysqlhost, $mysqluser) or die

("Verbindungsversuch fehlgeschlagen");



mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht

waehlen.");



$sql = "SELECT Kategorie, ArtikelNr, ArtikelName, Preis, Beschreibung, Bild FROM Artikel";



$artikel_query = mysql_query($sql) or die("Anfrage nicht erfolgreich");



$anzahl = mysql_num_rows($artikel_query);

echo "Anzahl der Datensätze: $anzahl";

?>



<table cellpadding="1" cellspacing="3" border="1">

    <tr>

        <td>Kategorie</td>

        <td>ArtikelNr</td>

        <td>ArtikelName</td>

        <td>Preis</td>

        <td>Beschreibung</td>

        <td>Bild</td>


    </tr>



<?php

while ($art = mysql_fetch_array($artikel_query)){

?>

    <tr>

        <td><?=$art['Kategorie']?></td>

        <td><?=$art['ArtikelNr']?></td>

        <td><?=$art['ArtikelName']?></td>

        <td><?=$art['Preis']?></td>

        <td><?=$art['Beschreibung']?></td>

        <td><img src="<?=$art['Bild']?>"></td>


    </tr>

<?php

}

?>



</table>





  </div>

</body>
</html>


----------



## DarkMo (23. Juni 2010)

also warenkorb sollte doch schnell gemacht sein oder? einfach ne db-tabelle für warenkörbe angelegt die die artikel-id, die user-id und die menge speichert un gut. wenn futzi eingeloggt is, weisst du auch seine id, und mit der kannst du alle artikel aus der warenkorb tabelle auslesen, die diesem user (seiner id) zugeweisen sin. mit der artikel-id kann man dann die genauen artikel daten auslesen. name, preis, beschreibung, was weis ich ^^ mit der anzahl ausm warenkorb und den einzeldaten der artikel kann man dann ganz locker sone ansicht machen, wo einzelpreis und gesammtpreis (anzahl*einzelpreis) angezeigt wird zum bsp.

an sich is das alles recht simpel, schwireig wirds, wenns um die bedienung geht ^^ wie fügt man mehrere artikel hinzu? da müste nen anzahl-input feld noch mit hin. wenn ein artikel gespeichert wird, sollte vorm speichern geschaut werden, ob die artikel-id dem user nich scho zugeordnet wurde - wenn ja, dann einfach die anzahl um die empfangene erhöhen (update), ansonsten die artikel-id dem user hinzufügen (insert). wie löscht man artikel? un un un ^^

und ich arbeite gerne mit globalen arrays. also $user['ID']=$row['ID']; un name un adresse un kA was noch da rein ^^

achja: un fürs kaufen einfach ne tabelle in der db anlegen, wo user-id, datum vllt, gekaufter krempel un gesamtpreis drin stehn (un falls euch noch was einfällt/wichtig wär ^^). die artikel würd ich als "formatierten" string machen. zum bsp "1675:3;34534:1;23:5".

$artikelliste="";
foreach($artikel-id as $id) {
if($artikelliste!="") $artikelliste.=";";
$artikelliste.=id.":".$anzahl;
}

sprich ein string, der pro artikel (getrennt von ; ) die artikel-id und die anzahl (getrennt durch : ) speichert. mit der funktion explode($string, $seperator); (oder andersrum) kannste das dann super wieder aufsplitten ^^
$tmp=explode("123:45", ":"); -> tmp[0] = "123" und tmp[1] = "45". müsstest den string also erst nach ; splitten und jedes ergebnis (foreach tmp bla) dann nochmal nach : splitten, um id und anzahl zu erfahren. mit der id erfährste die artikel daten (per sql abfrage) und die anzahl kannste au mit ausgeben ^^ un dadurch, das du den preis gespeichert hast, kann sich zwischenzeitlich nen einzelner oder mehrere artikelpreise geändert haben, und der "damalige" gesamtpreis ändert sich aber nich. so kannste halt alle bestellungen auflisten bla blubb.

hoffe, das hilft euch bissl beim konzept


----------



## Sudnif (24. Juni 2010)

so leute wir kommen langsam voran wir sind grade dabei noch mit dem ein und ausloggen.

funzt aber nicht wirklich^^
also das einloggen schon bloß nicht das anzeigen ob derjenige auch jetzt on ist und dann halt das mit dem logout button...

der code:
                <?
                if ($_SESSION['eingeloggt'] == true) {
                 echo "Sie sind zur Zeit eingeloggt als ".$_SESSION['username']; ?>
                 <form action="logout.php">
                 <input type="submit" value="Logout">
                 </form>
                 <?
                 }
                 else {
                 echo "nicht eingeloggt... <a href=\"Login.php\">zum login</a>";
                 }
                 ?>

logout.php
<?
session_unset();
session_destroy();
unset($_SESSION);
// jetzt sind die Variablen auch lokal nicht mehr definiert
header("Location: index.php?logout=true");
exit;
?>

ähm was bedeutet das mit dem "header("Location: index.php?logout=true");" ?


----------



## DarkMo (24. Juni 2010)

hmm, ich habs bei mir so, das ich $_SESSION['ID']=$user['ID']; hab. also halt die id von dem, der sich eingeloggt hatte. un ich prüf eben immer da drauf. aber is an sich das selbe in grün.

generell must du schauen, ob sich wer einloggt. gib dem submitbutton beim loginformular den namen login zum bsp. dann machste dieses session_start gedöhnse am anfang und danach
if(isset($_POST['login'])) {  // wenn der login knopp gedrückt wurd...
// prüf die richtigkeit der anmeldedaten und wenn alles ok is:
$_SESSION[irgendwas] = dies_und_jenes;
// usw usf
}

und wenn du diesen login abgefangen hast und das session array mit daten befüllt hast, kannste dann gleich danach abfragen, ob der eingeloggt is, oder ned:
$login = false;
if(isset($_SESSION[irgendwas])) {
$login = true;
// fülle user-array mit user daten, die man der db entnimmt...
}

und dann geht der eigentliche seiten quellcode los. das menü, sofern es eines gibt, könnte dann so aussehen:
if($login) zeige_volles_menu_mit_logout_button;
else zeige_nur_eingeschränktes_menu_mit_logout_und_register_button;

oder eben if($login) echo "Willkommen <b>".$user['name']."</b>"; ...


----------



## Sudnif (24. Juni 2010)

so login UND logout geht jetzt inzwischen *genervt xD* 
naja so jetzt kommt der kram mit dem warenkorb von dem wir ehrlich gesagt nicht viel verstehen. mit so einem "kaufen" button neben jedem artikel wäre das schon ganz cool.
wäre cool wenn jemand uns so etwas mal für den oben gepsteten code schreiben könnte, da wir die artikel ja in tabellenform auslesen und auch anzeigen lassen

mfg


----------



## DarkMo (24. Juni 2010)

hmm, also logout is in meinem bsp ganz simpel: wenn logout button gedrückt, dann setze $login auf false und lösche das $_SESSION array (unset($_SESSION) ^^

zum warenkorb... oben hab ich ja schon bissl allgemein was zu meinen vorstellungen für das "danach" geschrieben. für das davor (also die anzeige mit dem button)... hmm. joa.

also du brauchst nen submit button und nen button für die anzahl *hmm* ich hatte mal pro tabellen zeile, ne eigene form erstellt. also so in der art: <form bla><tr><td's...>blubber</td's...></tr></form>. aber irgend nen browser mochte das glaube ned so ganz un hat das unschön verzerrt. is warscheinlich auch generell nich so ne saubere lösung. aber wäre zumindest besser wie garnix *denk* dann könntest du innerhalb dieser form nen hidden-feld anlegen mit der artikel-id, das normale eingabefeld mit ner default 1 als wert für die anzahl un eben nen submit button mit der aufschrift kaufen. klickt man auf einen kaufen-button, wird dann eben nur die eigene form ausgelöst.

mit einer "sauberen" tabellenumfassenden form, wirds schwieriger. oder du zeigst das in divs gegliederd an. das ginge natürlich auch ^^


----------



## Sudnif (24. Juni 2010)

hm danke für die antwort ...ehrlich gesagt sind wir noch relative anfänge...wir haben jetzt in der db Artikel aber kein artikel-id.. oder ist das dasselbe wie ArtikelNr (das haben wir auf auto_incr) ...müsste dasselbe sein oder? 
leider habe ich das immer noch nicht genau gecheckt wie ich jetzt einen artikel,der gekauft wird, mit dem eingeloggten benutzer in der tabelle warenkorb(?) oder verkauf(?) verknüpft wird? das muss dann doch wohl sicher über die session laufen nicht? oder schreibt man das irgentwie in ein array und dann liest man das am ende im warenkorb.php aus (also ohne tabelle???)
viele fragen hoffe einer von euch weiß ein paar antowrten...

ICH BIN OFF bis morgen 
MFG


----------



## DarkMo (24. Juni 2010)

du kannst die id auch "wurst" nennen ^^ is wurscht. aber is für index is halt recht gebräuchlich. und ja, eure artieklnummer is genau soetwas *g*

diese verknüpfung geschieht in der warenkorb tabelle. ein user loggt sich ein, gibt dazu passwort und name ein. mit diesen angaben suchst du in der db in der user-tabelle (oder wie auch immer ihr sie nennen mögt) nach alle wichtigen daten, und ICH speicher das ganze ding immer gerne. wenn man sichs genaz genau überlegt, reichts völlig, wenn man $user=$row macht ^^ (sofern ihr das so bezeichnet habt ^^). in diesem $user array stehen nun alle daten dieses einen ausgelesenen datensatzes $row. select * from user where pw passt and nutzername passt - ma auf die schnelle. wenn ihr bei der gegistrierung aufgepasst habt, sollten usernamen zum bsp eindeutig sein, mindestens aber das wertepaar username/passwort. dann bekommt ihr einen datensatz zurück und den speicher ich immer in ner variablen $row. bei mir gibts für jeden user eben auch eine user-id. ein einmaliges erkennungszeichen, ein index, oder eben: primary key. ob ihr das nu nutzer-nummer oder sonst wie genannt hab is wie bei der artikel-nr wurscht ^^

so, jedenfalls wist ihr nun, wer sich da eingeloggt hat. die user-id schreib ich dann ins session array und kann dann immer, wenn diese id dadrin steht, ohne login auf die daten zugreifen. select * from user where id = session[id] bla. das is das, was ich oben in etwa geschrieben hab mit dem login und dem aufgreifen der aktiven session (wenn was in der session drin steht, greif die wieder auf).

so, nu weist du also nachm login und bei allen weiteren klicks bis zum logout oder so (mit cookies ginge das auch übern browserneustart hinaus oder so), WER sich da grad eingeloggt hat. also dessen id, die ja um $user-array steht. und wenn dieser typ was in den warenkorb schmeisst, weist du welcher artikel (per id wieder) und eben wer (per diesem $user-array) das war. nun kommt in ie arenkorbtabelle eben die artikel-id (oder nummer bei euch ^^) in verbindung mit der entsprechenden user-id und schon hast du deine verknüpfung.

nun liest du später ausm warenkorb also alle daten raus, wo die user-id die selbe is, wie die des typen, der sich grad eingeloggt hat. nich das 123 den warenkorb von 456 sieht ^^ -> select * from warenkorb where käufer = user-id... als bsp. dann bekommst du alles zurück geliefert, was der besagte typ in seinem warenkorb hat. dann kannste für jeden artikel über seine dort angegebene nummer/id aus der artikel-tabelle die genauen daten auslesen und diese noch schön mit präsentieren.


----------



## DarkMo (28. Juni 2010)

darf man denn mal fragen, was bei raus kam? ^^


----------

