Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL Fehler
marionsteck 29-08-2006, 17:25 Hallo zusammen,
bekomme folgende SQL Fehlermeldung
You have an error in your SQL syntax.
Check the manual that corresponds to
your MySQL server version for the right
syntax to use near
'and artikel.id=warenkorb.artikelid' at line 1
Kann aber leider keinen Fehler finden.
Anbei meine warenkorb.php wo der Fehler auftritt
<?php
include ("dbconnect.php");
$anzahl = "select count(*) as anzahl from
warenkorb where kundennummer=
'$nummer' and artikelid='$id'";
$erg = mysql_query($anzahl) or die(mysql_error());
$bestellt = mysql_fetch_array($erg);
if(!empty($_GET['id']))
{
if($bestellt['anzahl']>0) {
$sql ="update warenkorb set
anzahl=anzahl+1 where kundennummer=
$nummer and artikelid=$id";
}
else
{
$sql ="insert into warenkorb
(anzahl, artikelid, kundennummer)
values (1, $id, ".$_SESSION['nummer']." )";
}
mysql_query($sql) or die (mysql_error());
}
$sql = "select name, preis, anzahl from
artikel, warenkorb where warenkorb.kundennummer=
".$_SESSION['nummer']." and
artikel.id=warenkorb.artikelid";
$result = mysql_query($sql) or die (mysql_error());
?>
<html>
<head><title>Bestellseite</title></head>
<body>
<h1>Warenkorb</h1>
<a href="bestellung.php">Bestellen</a><br>
<p>Folgende Artikel liegen im Warenkorb</p>
<table cellspacing=2 cellpadding=4 border=0>
<tr bgcolor="orange">
<th>Artikel</th><th>Preis</th><th>Anzahl</th>
</tr>
<?php
while($row = mysql_fetch_assoc($result))
{
print "<tr bgcolor='#cccccc'>";
print "<td>".$row['name']."</td>";
print "<td>".$row['preis']." Euro</td>";
print "<td>".$row['anzahl']."</td>";
print "</tr>";
}
?>
</table>
<p><a href="artikel.php">Zurück zur Artikelseite</a></p>
</body>
</html>
Im Anhang Screenshoots meiner 3 SQL Tables.
Hoffe mir kann jemand weiterhelfen.
Ihr findet die komplette abfrage unter
www.fernstudium.stecknet.de/PHP03/test/artikel.php
Gruß Marion
Lass dir die generierten Query-Strings zur Kontrolle ausgeben.
marionsteck 29-08-2006, 18:00 wie lasse ich mir die query strings ausgeben
bin noch anfänger
mit echo.
und brich mal deinen Code um, wie es in unseren Regeln steht.
marionsteck 29-08-2006, 18:10 wenn ich anstatt print echo angebe kommt immer noch folgende fehlermeldung
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'and artikel.id=warenkorb.artikelid' at line 1
hier wie ich es mit echo geändert habe
<?php
while($row = mysql_fetch_assoc($result))
{
echo "<tr bgcolor='#cccccc'>";
echo "<td>".$row['name']."</td>";
echo "<td>".$row['preis']." Euro</td>";
echo "<td>".$row['anzahl']."</td>";
echo "</tr>";
}
?>
oder muß das echo woanderes eingfügt werden
wie wäre es mit:
echo $sql;
dein code ist immer noch zu breit.
marionsteck 29-08-2006, 20:02 habe noch immer folgende fehlermeldung
select name, preis, anzahl from artikel, warenkorb where warenkorb.kundennummer=
and artikel.id=warenkorb.artikelidYou have an error in your SQL syntax.
Check the manual that corresponds to your MySQL server version for the right syntax to use
near 'and artikel.id=warenkorb.artikelid' at line 1
im anhang mein warenkorb table
danke und gruß
$_SESSION['nummer'] ist leer.
vermutlich würde es reichen, statt $_SESSION['nummer'] entweder
-$nummer wie anderswo auch
-oder $_GET['nummer'] oder $_POST['nummer'] zu schreiben.
Du könntest das echo $sql selber angeschaut haben, es ist nicht Fehlermeldung, sondern das davor:
select name, preis, anzahl from artikel, warenkorb where warenkorb.kundennummer=
and artikel.id=warenkorb.artikelid
dein Apostrophhandling ist auch nicht in Ordnung.
Im ersten SELECT hat deine Vorlage, beziehungsweise dein Fernlehrer um die Werte je ein '...' gesetzt, aber in den
nachfolgenden SELECT INSERT UPDATE sind die Werte dann ohne '...' .
Sogar die $nummer und $id sind zuerst mit '..', dann im UPDATE ohne '...';
Am besten sorgst Du an allen Stellen für '...' , dann stimmt es immer.
Immerhin hat dein Fernlehrer alle mysql_queries mit die(mysql_error()) gesichert.
Ich würde die (mysql_error() . $sql) schreiben, damit das $sql auch mitkommt.
weil alle mysql_queries gesichert sind, ist schon klar, dass $nummer anstatt $_SESSION['nummer']
das aktuelle Problem löst.
und wann gedenkst du deinen Code umzubrechen?
Original geschrieben von TobiaZ
und wann gedenkst du deinen Code umzubrechen?
wessen Code?
na der von Fr. Steck, der hier jeden handelsüblichen 19"er (und unsere Regeln) bricht. ;)
Original geschrieben von TobiaZ
na der von Fr. Steck, der hier jeden handelsüblichen 19"er (und unsere Regeln) bricht. ;)
Ich denke der ist von seinem /ihrem Fernlehrer.
Im übrigen seid ihr bloss neidisch...
Wohnort: banned by Tobiaz ich wars nicht. ;)
egal, dann war es halt die wääääh säge.
marionsteck 29-08-2006, 21:55 so habe nun den $_SESSION['nummer'] in $nummmer
umgeändert und immer noch folgenden fehler
select name, preis, anzahl from artikel, warenkorb where
warenkorb.kundennummer= and artikel.id=
warenkorb.artikelid
You have an error in your SQL syntax. Check the
manual that corresponds to your MySQL server
version for the right syntax to use near 'and artikel.id=
warenkorb.artikelid' at line 1
<?php
include ("dbconnect.php");
$anzahl = "select count(*) as anzahl from warenkorb where kundennummer=
'$nummer' and artikelid='$id'";
$erg = mysql_query($anzahl) or die(mysql_error());
$bestellt = mysql_fetch_array($erg);
if(!empty($_GET['id']))
{
if($bestellt['anzahl']>0) {
echo $sql ="update warenkorb set
anzahl=anzahl+1 where kundennummer=
$nummer and artikelid=$id";
}
else
{
echo $sql ="insert into warenkorb
(anzahl, artikelid, kundennummer) values (1, $id, $nummer )";
}
mysql_query($sql) or die (mysql_error());
}
echo $sql = "select name, preis,
anzahl from artikel, warenkorb
where warenkorb.kundennummer=
$nummer and artikel.id=warenkorb.artikelid";
$result = mysql_query($sql) or die (mysql_error());
?>
hier nochmals der php code ich weiß ist bestimmt nur
eine kleinigkeit die ich übersehe
$nummer ist immer noch leer.
Das erste SELECT COUNT(*) geht trotzdem, dank '...'.
weil ausserdem $_GET['id'] leer ist, werden UPDATE und INSERT nicht gemacht.
(sonst würde es dort einen fehler geben).
Du hast auch noch ein Durcheinander bezüglich $id und $_GET['id'];
aber es scheinen überhaupt alle Variabeln leer zu sein.
Wie wird dein php-skript aufgerufen?
marionsteck 29-08-2006, 22:12 hier meine artikel php
<?php
include("dbconnect.php");
$sql = "SELECT
bestellid,
name,
preis,
bestand
FROM
artikel
ORDER BY
name ASC;";
$result = mysql_query($sql) or die(mysql_error());
?>
<html>
<head><title>Artikelseite</title></head>
<body>
<h1>Artikelliste</h1>
Folgende Artikel können Sie bestellen
<table cellspacing=2 cellpadding=4 border=0>
<tr bgcolor="orange">
<th>Artikel</th><th>Preis</th><th>Bestand</th><th></th>
</tr>
<?php
while ($row = mysql_fetch_assoc($result))
{
print "<tr bgcolor='#cccccc'>";
print "<td>".$row['name']."</td><td>".$row['preis']." Euro</td>";
print"<td>".$row['bestand']."</td>";
print "<td><a
href='warenkorb.php?id=".$row['id']."'>".
"bestellen</a></td>";
print"</tr>";
}
?>
</table>
<p><a href="warenkorb.php">Zum Warenkorb</a></p>
</body>
</html>
www.fernstudium.stecknet.de/PHP03/test/artikel.php
(1) Es hat zwei Aufrufe von warenkorb.php (das hättest Du schreiben müssen).
Aber in beiden Aufrufen wird $nummer nicht gesetzt. Vermutlich ist auch $_SESSION['nummer'] nirgendswo gesetzt, dh die Kundennummer. Eventuell fehlt das session_start(); als die erwähnte Kleinigkeit ?
Im Aufruf wird $_GET['id'] gesetzt, und via register_globals ergibt sich daraus
auch $id.
(2) Dann ist es nicht zweckmässig,
echo $sql = "..." zu schreiben.
Viel sinnvoller ist
$sql="...";
echo $sql;
(3) Es muss noch irgendwo ein login.php haben, welches $_SESSION['nummer'] setzt, wovon Du noch nichts geschrieben hast. Dann braucht es noch das schon erwähnte session_start(); in jedem script.
Das sind aber alles Details. Du müsstest mal mit einem Papiercomputer (Block und Schreibzeug) deine kleinen Skripts durchspielen, oder mit sehr vielen echo an allen möglichen Stellen, um den Ablauf zu erleben.
PS @all das register_globals machen wir später, wenn sie mal session_start() drinn hat , was vom Lehrer nicht angegeben wurde...
marionsteck 29-08-2006, 22:42 eine dumme frage welches login meinst du
das um auf die datenbank zu kommen??
ich bin anfänger daher die fragen
um es zu verdeutlichen: aus dem vorangehenden scheint das session_start(); zu fehlen am Anfang von warenkorb.php und artikel.php und eventuell von "login".php oder wie das heisst.
wo oderwoher wird die kundennummer eingegeben (variable $_SESSION['nummer'] oder $nummer)
Auch wenn Du Anfänger bist, solltest Du dein selbstgeschriebenes Skript kennen.
marionsteck 29-08-2006, 22:52 hab nun die session_start(); eingefügt aber wo und wie muß ich die nummer eintragen :confused:
marionsteck 29-08-2006, 22:56 die kundennummer soll automatisch eingetragen werden
Das ist dein Problem: wo der Kunde, dessen Warenkorb behandelt wird, sich anmelden kann. und wo im skript dann seine kundennummer in $_SESSION['nummer'] geht. Schaust mal im Lerntext nach.
Inzwischen schreibst Du einfach überall $_SESSION['nummer'] = $nummer = 1;
marionsteck 29-08-2006, 23:07 danke habe es nun mal geändert geht aber leider immer noch nicht
ich stehe wohl grade total auf dem schlauch
Schaust mal im Lerntext nach und falls dort nichts steht, ist das Problem ungenügend gestellt.
Falls das Problem selbstgestellt ist, schlafst du mal darüber und suchst dir morgen ein tutorial. Das Kundenanmelden wird noch zu schaffen sein.
Original geschrieben von aasejh
egal, dann war es halt die wääääh säge.
Warum bleibst du nicht endlich mal bei einem Nick, wieso muss es jeden Tag ein neuer sein?
Das ist für jeden, der gerne ein wenig wüsste, mit wem er's zu tun hat, äußerst lästig. Also lass es doch bitte einfach.
|
-
- |