PDA

Vollstndige Version anzeigen : berprfen ob Daten schon in der Tabelle vorhanden?


nivram
21-12-2003, 16:28
Hallo,
ich habe heute versucht mich ein wenig mit mySQL auseinander zu setzen und bin nicht weit gekommen! Versuche momentan ein Script zu schreiben, was die Anzahl der Besucher jhrlich, monatlich und tglich aufzeichnet und in einer DB speichert! Dies sollte mit einer IP-Sperre von 1 Stunde erfolgen! Da ich schon daran hngen bleibe wie man prft ob die Daten schon vorhanden sind, wende ich mich nun an euch..

Also es gibt 1 Tabelle "staistiken" in denen folgende Felder vorhanden sind ID, Jahr, Monat, Tag, Anzahl !

Das Script soll nun prfen ob das aktuelle Datum schon vorhanden (bekomme ich nicht hin) ist und Anzahl + 1 rechnen und wieder reinschreiben. Wenn nicht, soll es einen neuen Datensatz anlegen, wobei Anzahl auf 1 gesetzt wird (einfach)!

Wer weiss weiter?

Ich habe schon einen kleinen Code zusammen, aber irgendwie funzt der net!


include("dbconnect.php4");


$jahrnow = date("Y");
$monatnow = date("m");
$tagnow = date("d");

$abfrage = ("SELECT anzahl FROM statistiken WHERE jahr = $jahrnow AND monat = $monatnow AND tag = $tagnow");
$ergebnis = mysql_query($abfrage);
print $ergebnis;
if($ergebnis){
$array = mysql_fetch_row($ergebnis);
$array[0]++;
$eintrag = "UPDATE `statistiken` SET `anzahl` = $array[0] WHERE jahr = $jahrnow AND monat = $monatnow AND tag = $tagnow";
$eintragen = mysql_query($eintrag);
print "Erfolg";
} else
{
$eintrag = "INSERT INTO statistiken (jahr, monat, tag, anzahl) VALUES ($jahrnow,$monatnow,$tagnow,1)";
$eintragen = mysql_query($eintrag);
}

Gru, Schrder

c4
21-12-2003, 17:14
$array[0] --> {$array[0]}
oder
$array[0] --> ".$array[0]." (also ausklammern)

Tipp: $ergebnis = mysql_query($abfrage) or die(mysql_error());

nivram
21-12-2003, 19:49
hm worauf sprichst du an?

Auf das $array wo ++ steht oder in dem mySQl-Query?


Schrder


edit: Warum sagt mir das Script die ganze Zeit "Erfolg", obwohl die Datenbank leer ist! Normal msste doch nur Erfolg dort stehen, wenn genau der Datensatz vorhanden ist oder?!?! Was mache ich falsch???

c4
21-12-2003, 19:52
Das mit dem ++ hab ich ganz bersehen. Ich meine das im Query.

nivram
21-12-2003, 20:14
Warum sagt mir das Script die ganze Zeit "Erfolg", obwohl die Datenbank leer ist! Normal msste doch nur Erfolg dort stehen, wenn genau der Datensatz vorhanden ist oder?!?! Was mache ich falsch???


Schrder

c4
21-12-2003, 20:20
Ach Shit, der Thread des berlesens....

Du hast das geshrieben: if($ergebnis){
Diese Abfrage ist immer dann erfllt, wenn die mySQL-Abfrage erfolgreich war. Das heit aber noch lange nicht, dass auch Datenstze gefunden wurden!
Den else-Zweig wrde er nur dann betreten, wenn die Abfrage Fehler enthalten wrde.

Wenn Du es so schreibst, sollte es klappen:
if (mysql_affected_rows()>0) {
mysql_affected_rows() gibt Dir die Zahl der betroffenen Datenstze der letzten Abfrage zurck.

Fuchs
21-12-2003, 20:34
Original geschrieben von _c_4_

Wenn Du es so schreibst, sollte es klappen:
if (mysql_affected_rows()>0) {
mysql_affected_rows() gibt Dir die Zahl der betroffenen Datenstze der letzten Abfrage zurck.

Nein nur bei Insert, Update, Delete und Replace. Und da waeren wir auch schon beim Thema:

http://www.mysql.com/doc/en/REPLACE.html

Andre

c4
21-12-2003, 20:37
--> http://www.selfphp.com/forum/showthread.php?threadid=4571#post27435 !!

Aber REPLACE ist eine gute Idee, ja.

nivram
21-12-2003, 20:44
Mittlerweile hab ichs anders gelst! Nun wird weiter frhlich herumprobiert! Vielen Dank trotzdem an alle.. Bei weiteren Fragen werd ich mich wieder an euch wenden!


Gru, Schrder

meikel
21-12-2003, 22:13
Original geschrieben von nivram
Das Script soll nun prfen ob das aktuelle Datum schon vorhanden ist und Anzahl + 1 rechnen und wieder reinschreiben. Wenn nicht, soll es einen neuen Datensatz anlegen, wobei Anzahl auf 1 gesetzt wird (einfach)!
include("dbconnect.php4");

$jahrnow = date("Y");
$monatnow = date("m");
$tagnow = date("d");

$sql = "UPDATE `statistiken` SET `anzahl` = `anzahl` + 1 WHERE jahr = $jahrnow AND monat = $monatnow AND tag = $tagnow";

$res = mysql_query($sql);
if (mysql_affected_rows($res) == 0)
{
$sql = "INSERT INTO statistiken (jahr, monat, tag, anzahl) VALUES ($jahrnow,$monatnow,$tagnow,1)";
if (!mysql_query($sql)) print 'huch?';
}

EDIT:
Da MySQL bei dieser Variante Fehlermeldungen produziert, mut Du (nach Entwicklung und Test des Scriptes) diese Fehlerausgaben mit einem @ vor den MySQL Befehlen unterdrcken.

Es wre noch einfacher, wenn Du Dich fr das Spaltenformat DATE entschlieen knntest.