cybton.com
Über uns | Jobs | Werbung | Sitemap | AGB | Impressum | Hilfe ?
 Kostenlos anmelden)
Forum
Aktuellste Beiträge
Forenregeln

Community
BB-Codes
Tags
Chat
Suche (Web)
Wer ist online?
Top-User

Basar


Statistik
Mitglieder gesamt: 68138
Mitglieder online: 6
Gäste online: 2
mehr...

Anzeige
Forum » Forum: Website & Webprogrammierung » Thread: Datenbankgestützer Counter: unbekannter Fehler

Thread: Datenbankgestützer Counter: unbekannter Fehler

Tags: PHP , datenbank , Counter

29.06.2008 11:51 Uhr

 

Status: offline
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(); // DB-Verbindung öffnen
 
$ip = strtoupper(md5($_SERVER["REMOTE_ADDR"]));
$time = time();
 
$sql = "DELETE FROM counter_online WHERE time+900<$time"; // Einträge die älter als 15 Minuten sind werden aus der onlineliste gelöscht
$result = mysql_query($sql);
echo mysql_error();
 
$sql = "SELECT time FROM counter_online WHERE ip='$ip' LIMIT 1"; // Überprüfen, ob IP bereits registriert ist
$result = mysql_query($sql);
echo mysql_error();
 
if(mysql_num_rows($result) == 1)
  $gefunden = FALSE; // IP wurde nicht gezählt
else
  $gefunden = TRUE;  // IP wurde bereits gezählt
 
$d = date("d"); $m = date("m"); $y= date("Y");
if(!$gefunden)
{
  // Neuer Eintrag in Onlineliste
   $sql = "INSERT INTO counter_online (time,ip) VALUES('$time','$ip')";
   $result = mysql_query($sql);
   echo mysql_error();
   
   // Heutige Zugriffe
   $sql = "SELECT hits FROM counter_hits WHERE $y=$y AND m=$m AND d=$d";
   $result = mysql_query($sql);
   echo mysql_error();
 
   // counter erhöhen
   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 // Wenn erster Zugriff heute
   {
      // Eintrag heute erstellen
      $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

 

Status: offline
$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

 

Status: offline
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

 

Status: offline
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
29.06.2008 23:16 Uhr

 

Status: offline
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

 

Status: offline
@ 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
___________________________
ich muß gar nix....
http://www.tomig.at
http://www.cybton.com/tutorials_show,tut,1385.html
01.07.2008 17:19 Uhr

 

zombie3456
Programmierer
Status: offline
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  :wink: 
___________________________
DURATIVUM | Blog zur Sprache Latein
01.07.2008 19:43 Uhr

 

Status: offline
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)
___________________________
see you on
--> www.moskito-rv.de
--> www.sone-works.de
Ähnliche Threads Forum Ähnlichkeitsgrad
 [PHP/MYSQL] Zeitgesteuert auf Datenbank zugreifen Website & Webprogrammierung 2
 [gelöst] [PHP]+[MySQL] - Zeichen ersetzen nach DB-Auslesen Website & Webprogrammierung 1
 Counter / Webstatistik &#9472; ohne Javascript Website & Webprogrammierung 1
 Suche: Event-Script mit Städteverzeichniss, Umkreissuche etc. Website & Webprogrammierung 1
 MySQL: 2 Datensätze auslesen, zwischen denen 1 bestimmter Wert ist Website & Webprogrammierung 1
 Such-Algorithmen für Texte in Datenbank Website & Webprogrammierung 1
 Access Control Website & Webprogrammierung 1
nach obennach oben

Copyright © 2008 cybton-network

Google
Partner: #Musik - Dein Internetradio - nexem. - .wir machen news - Your-Book.net - Dein kostenloses Gästebuch
ANEXIA - PHP Entwicklung - Dockers - s.Oliver Schuhe - Think Schuhe - der eigene Weg - Dorfen - Paul Green Schuhe - Bequeme Geox - Web-Entwicklung