Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
SQL Fehler [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




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

 
wahsaga
29-08-2006, 17:30 
 
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

 
TobiaZ
29-08-2006, 18:03 
 
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

 
Wurzel
29-08-2006, 18:29 
 
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ß

 
asejha
29-08-2006, 21:07 
 
$_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

 
asejha
29-08-2006, 21:13 
 
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.

 
TobiaZ
29-08-2006, 21:14 
 
und wann gedenkst du deinen Code umzubrechen?

 
asejha
29-08-2006, 21:22 
 
Original geschrieben von TobiaZ
und wann gedenkst du deinen Code umzubrechen?

wessen Code?

 
TobiaZ
29-08-2006, 21:33 
 
na der von Fr. Steck, der hier jeden handelsüblichen 19"er (und unsere Regeln) bricht. ;)

 
aasejh
29-08-2006, 21:44 
 
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...

 
TobiaZ
29-08-2006, 21:47 
 
Wohnort: banned by Tobiaz ich wars nicht. ;)

 
aasejh
29-08-2006, 21:51 
 
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

 
aasejh
29-08-2006, 22:09 
 
$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

 
aasejh
29-08-2006, 22:30 
 
(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

 
aasejh
29-08-2006, 22:44 
 
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.

 
aasejh
29-08-2006, 22:47 
 
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

 
aasejh
29-08-2006, 22:56 
 
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

 
aasejh
29-08-2006, 23:20 
 
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.

 
wahsaga
30-08-2006, 10:04 
 
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.

- -

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