Statistik  Mitglieder gesamt: 68138  Mitglieder online: 6  Gäste online: 2 mehr...
Anzeige
| Thread: Datenbankgestützer Counter: unbekannter Fehler
 29.06.2008 11:51 Uhr
|
|
|
|
|
Bin da bei einen DB gestützen Counter zu programmieren. Das Script läuft auch, schmeißt keine Fehler aus, nix. Aber in der DB treten keine Einträge auf. Es muss also am einfügen/updaten/etc liegen.
Wo ist der Fehler?^^ PHP:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| <?php
mysql_open();
$ip = strtoupper(md5($_SERVER["REMOTE_ADDR"]));
$time = time();
$sql = "DELETE FROM counter_online WHERE time+900<$time";
$result = mysql_query($sql);
echo mysql_error();
$sql = "SELECT time FROM counter_online WHERE ip='$ip' LIMIT 1";
$result = mysql_query($sql);
echo mysql_error();
if(mysql_num_rows($result) == 1)
$gefunden = FALSE;
else
$gefunden = TRUE;
$d = date("d"); $m = date("m"); $y= date("Y");
if(!$gefunden)
{
$sql = "INSERT INTO counter_online (time,ip) VALUES('$time','$ip')";
$result = mysql_query($sql);
echo mysql_error();
$sql = "SELECT hits FROM counter_hits WHERE $y=$y AND m=$m AND d=$d";
$result = mysql_query($sql);
echo mysql_error();
if(mysql_num_rows($result) == 1)
{
$sql = "UPDATE counter_hits SET hits=hits+1 WHERE $y=$y AND m=$m AND d=$d";
$result = mysql_query($sql);
echo mysql_error();
}
else
{
$sql = "INSERT INTO counter_hits (y,m,d,hits) VALUES('$y','$m','$d', '1')";
$result = mysql_query($sql);
echo mysql_error();
}
}
mysql_close();
?> |
Wenn es läuft poste ich das Script, dann kann es jeder verwenden!
von zombie3456: War mal so frei und hab ein <?php eingefügt, um das Syntax-Highlighting zu aktivieren.
von schafholt: War mal so frei und hab ein ?> eingefügt, damit auch alles perfekt ist.
 4 mal bearbeitet
|
|
 29.06.2008 17:01 Uhr
|
|
|
|
|
$sql = "SELECT hits FROM counter_hits WHERE $y=$y AND m=$m AND d=$d";
$sql = "UPDATE counter_hits SET hits=hits+1 WHERE $y=$y AND m=$m AND d=$d";
|
|
 29.06.2008 22:29 Uhr
|
|
|
|
|
Kann mich sylence nur anschließen:
Zeile 29:
Falsch: php:1
| <?php $sql = "SELECT hits FROM counter_hits WHERE $y=$y AND m=$m AND d=$d"; ?> |
Richtig: php:1
| <?php $sql = "SELECT hits FROM counter_hits WHERE y=$y AND m=$m AND d=$d"; ?> |
Zeile 36:
Falsch: php:1
| <?php $sql = "UPDATE counter_hits SET hits=hits+1 WHERE $y=$y AND m=$m AND d=$d"; ?> |
Richtig: php:1
| <?php $sql = "UPDATE counter_hits SET hits=hits+1 WHERE y=$y AND m=$m AND d=$d"; ?> |
Nun, warum ist das so? Du hast ein überflüssiges Dollarzeichen. Wenn aber "y" zu "$y" wird, bedeutet das, dass der Inhalt der Variable statt "y" an den SQL-Server gesendet wird. Dieser kennt aber keine Spalte, die als Namen den Inhalt von $y hat und erkennt daher ein Problem.
|
|
 29.06.2008 22:55 Uhr
|
|
|
|
|
Da ist ein Fehler PHP:1
2
3
4
5
|
// Eintrag heute erstellen
$sql = "INSERT INTO counter_hits (y,m,d,hits) VALUES('$y','$m','$d', '1')";
$result = mysql_query($sql);
echo mysql_error(); |
Richtig: PHP:1
2
3
4
5
|
// Eintrag heute erstellen
$sql = "INSERT INTO counter_hits (y,m,d,hits) VALUES('".$y."','".$m."','".$d."', '1')";
$result = mysql_query($sql);
echo mysql_error(); |
 1 mal bearbeitet wentz: 29.06.2008, 22:55 Uhr
|
|
 29.06.2008 23:16 Uhr
|
|
|
|
|
Zitat: Nun, warum ist das so? Du hast ein überflüssiges Dollarzeichen. Wenn aber "y" zu "$y" wird, bedeutet das, dass der Inhalt der Variable statt "y" an den SQL-Server gesendet wird. Dieser kennt aber keine Spalte, die als Namen den Inhalt von $y hat und erkennt daher ein Problem.
Das $y=$y ist lediglich ein semantischer Fehler. Das Ergebnis von $y=$y ist immer true, sofern keine ungültigen Zeichen in der Variablen stehen wodurch alle Datensätze betroffen wären, ansonsten entsteht ein SQL-Syntax Fehler. Natürlich muss es "... WHERE y=$y ..." heißen um auf die richtige Spalte zu referenzieren (oder "... WHERE true...", was allerdings hier keinen Sinn machen würde).
@wentz: Wenn ich das richtig sehe meinst du die Anführungszeichen vor den Variablen? Das müsste auch so funktionieren, da schafholt doppelte Anführungszeichen verwendet. Innerhalb Strings mit doppelten Anführungszeichen können Variablen wie gewohnt verwendet werden. Nur Arrays müssen zusätzlich noch geschweifte Klammern geschrieben werden.
___________________________ Programmieren ist eine Sucht deren Rausch ein Gefühl der Macht ist... sofern man den Computer bezwingt. Gefährliche Nebenwirkungen: Verstärkter Kaffee-Konsum, erhöhter Ehrgeiz und ggf. Wutausbrüche und verknotete Gehirnwindungen.
|
|
 30.06.2008 23:24 Uhr
|
|
|
|
|
@ wentz
dein richtig ist zu umständlich!
Zitat: $sql = "INSERT INTO counter_hits (y,m,d,hits) VALUES('".$y."','".$m."','".$d."', '1')";
die " brauchst hier nicht machen.
Zitat: $sql = "INSERT INTO counter_hits (y,m,d,hits) VALUES('$y','$m','$d', '1')";
so gehts auch und ist weniger code und ein paar fehlerquellen weniger.
lg
|
|
 01.07.2008 17:19 Uhr
|
|
|
|
|
Zitat: so gehts auch und ist weniger code und ein paar fehlerquellen weniger. Ah, das mit den Fehlerquellen würde ich so nicht sagen. Ich sehe gerade im Verwenden der Variablen innerhalb von "Gänsefüßchen" (also " ) eine Gefahr, da Arrays hier etwas anders funktionieren (mit geschweiften Klammern glaube ich). Ich finde daher das öffnen und schließen der Anführungszeichen für mich persönlich sicherer
|
|
 01.07.2008 19:43 Uhr
|
|
|
|
|
vielleicht geh ich ja auch von was falschem aus, aber das sind doch alles integerwerte, denn braucht man ja keine gänsefüßchen - oder sollte sogar keine machen: PHP:1
2
3
| <?php
$sql = "INSERT INTO counter_hits (y,m,d,hits) VALUES(".$y.",".$m.",".$d.", 1)";
?> |
dafür sollte man die Variabeln nicht umbedingt im string verwenden (deswegen die punkt-notation)
|
|
|