MySQL und PHP Onlineshop Probleme

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 :Dgl
 
Zuletzt bearbeitet:
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.
 
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 ;) )
 
Danke. Funktioniert jetzt mit dem einloggen :).

wenn weitere fragen vorhanden sind frage ich hier wieder :D
 
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
 
Zuletzt bearbeitet:
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.
 
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...
 
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
}
 
Zuletzt bearbeitet:
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.

PHP:
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.
 
Code:
$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
 
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 :D (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? :D
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>
 
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 :D
 
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");" ? :D
 
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>"; ...
 
so login UND logout geht jetzt inzwischen *genervt xD* :D
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 :D
 
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 ^^
 
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? :D
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
 
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.
 
Zurück