| Autor | Zpráva | ||
|---|---|---|---|
| Pumpa Profil * |
#1 · Zasláno: 15. 7. 2008, 18:55:24
Zdar,
mám malý problém. Na netu jsem narazil na takové počítadlo, které pracuje pomocí DB. Avšak již při tvorbě tabulky tímto kódem to hodí chybu: CREATE TABLE `pocitadlo` ( `ip` varchar(19) NOT NULL DEFAULT '', `datum` date NOT NULL DEFAULT '0000–00–00', `cas` int(10) NOT NULL DEFAULT '0', KEY `datum` (`datum`) ) TYPE=MyISAM; #1067 – Invalid default value for 'datum' Zdrojový kód scriptu: <?php function pocitadlo() { # funkce zjisti, jestli je dnes v tabulce navstevnik a podle toho ho bud vlozi, nebo mu zmeni cas navstevy na aktualni $ip = getenv("REMOTE_ADDR"); //zjistime IP #zjistime, jestli se IP dnes nachazi v tabulce $dotaz = mysql_query("SELECT * FROM pocitadlo WHERE datum=NOW() AND ip='$ip'"); #jestli tam je, tak zmenime cas navstevy (kvuli online uzivatelum) if (mysql_num_rows($dotaz)) $dotaz2 = mysql_query("UPDATE pocitadlo SET cas='".time()."' WHERE datum=NOW() AND ip='$ip'"); else #pokud neni, tak IP vlozime $dotaz2 = mysql_query("INSERT INTO pocitadlo (ip, datum, cas) VALUES('$ip',NOW(),'".time()."');"); } function navstevy() { #funkce vraci pole s poctem navstev $navstevnici = array(); #vybereme pocet vsech ulozenych IP adres $dotaz = mysql_query("SELECT count(*) FROM pocitadlo"); #vlozime hodnotu do pole list($navstevnici['celkem'])=mysql_fetch_array($dotaz); #vybereme pocet unikatnich dennich IP adres pro dnesni den $dotaz = mysql_query("SELECT count(*) FROM pocitadlo WHERE datum=NOW()"); #vlozime hodnotu do pole list($navstevnici['dnes'])=mysql_fetch_array($dotaz); #vybereme dnesni IP, ktere nejsou starsi nez 180 sekund = 3 minuty $dotaz = mysql_query("SELECT count(*) FROM pocitadlo WHERE datum=NOW() AND cas>='".(time()-180)."'"); #vlozime hodnotu do pole list($navstevnici['online'])=mysql_fetch_array($dotaz); # vratime pole # $navstevnici['celkem'] = pocet navstev celkem # $navstevnici['dnes'] = pocet navstev za dnesni den # $navstevnici['online'] = pocet navstev, ktere nejsou starsi jak 3 minuty return $navstevnici; } #pripojime se k databazi #zavolame pocitadlo pocitadlo(); #vytvorime pole s pristupy $navstevnici = navstevy(); #pole $navstevnici vypiseme echo "ONLINE: $navstevnici[online]<br> DNES: $navstevnici[dnes]<br> CELKEM: $navstevnici[celkem]<br>"; ?> Zkoušel jsem tam dát PRIMARY KEY, a ještě jiné fígle, ale pořád to nefunguje. Mohl by někdo pomoci? |
||
| Joker Profil |
#2 · Zasláno: 15. 7. 2008, 19:05:43
Pumpa
#1067 – Invalid default value for 'datum' Stačí si to přeložit: sloupec datum má neplatnou výchozí hodnotu, tj. hodnota '0000-00-00' nemůže být výchozí hodnotou pro sloupec datum. |
||
| Pumpa Profil * |
#3 · Zasláno: 15. 7. 2008, 19:10:00
Aha... a nevíš, jakou hodnotu tam dát, aby to fachčilo? Teprve s MySQL začínám a pár věcí mi ještě není jasných.
|
||
| Pumpa Profil * |
#4 · Zasláno: 15. 7. 2008, 19:35:18
Poradí mi někdo prosím?
|
||
| Alphard Profil |
#5 · Zasláno: 15. 7. 2008, 20:25:38
Stačí si to přeložit: sloupec datum má neplatnou výchozí hodnotu, tj. hodnota '0000-00-00' nemůže být výchozí hodnotou pro sloupec datum.
:-) mně to jde, zkus si to takže, jak jsem napsal, když mi to funguje, tak to nemohu vyzkoušet, takže jen pár nápadů MySQL also allows you to store '0000-00-00' as a “dummy date” (if you are not using the NO_ZERO_DATE SQL mode). This is in some cases more convenient (and uses less data and index space) than using NULL values. http://dev.mysql.com/doc/refman/5.0/en/date-and-time-types.html The special date '0000-00-00' can be stored and retrieved as '0000-00-00'. When using a '0000-00-00' date through MyODBC, it is automatically converted to NULL in MyODBC 2.50.12 and above, because ODBC can't handle this kind of date. http://dev.mysql.com/doc/refman/5.0/en/using-date.html to jsem rychlosti našel, kdyžtak počkej na jiné rady a taky trochu hledej sám |
||
| Pumpa Profil * |
#6 · Zasláno: 15. 7. 2008, 21:53:26
Zkoušel jsem vše, ale nefunguje. Co tohle?
http://www.pcsvet.cz/art/article.php?id=3416 - není dostupné, použil jsem archiv Google. V tamním fóru si neví rady. Tabulka pro ukládání informací o celkové návštěvnosti: create table Celkem ( Pocet int null ); Tabulka o měsíční návštěvnosti: create table Mesicni ( Mesic varchar(10) not null, Pocet int null, PRIMARY KEY(Mesic) ); Tabulka pro ukládání denní návštěvnosti: create table Dnes ( Datum date not null, Pocet int null, PRIMARY KEY(Datum) ); Tabulka pro ukládání počtu návštěv na IP Adresu: create table Host ( IP varchar(20) not null, Datum date null, Pocet int null, PRIMARY KEY(IP) ); <?php
$spojeni = MySQL_Connect("SERVR", "DATABAZE", "HESLO");
MySQL_Select_DB("databáze");
$ipadresa = $REMOTE_ADDR;
// proměnná obsahující IP adresu návštěvníka
$dnesnidatum = Date("Y-m-d");
// proměnná obsahující dnešní datum v potřebném formátu
$mesic = Date("m");
SetType($mesic, "integer");
// deklarace proměnné, obsahující číslo měsíce a přetypování na integer
$rok = Array(1=>"Leden","Únor","Březen","Duben","Květen","Červen","Červenec", "Srpen","Září","Říjen","Listopad","Prosinec");
// pole obsahující názvy měsíců
$result = Array();
// pole výsledků
$counter = Array();
// pole obsahující zpočítaná data
$month = $rok[$mesic];
// název aktuálního měsíce
$result[0] = MySQL_Query("SELECT * FROM Host WHERE IP='".$ipadresa."'");
$host = MySQL_Fetch_Object($result[0]);
$poslednipristup = $host->Datum;
// zjistíme, zda již IP adresa v tabulce je:
if ($poslednipristup==""):
$pocitat=true;
MySQL_Query("INSERT INTO Host VALUES('".$ipadresa."', '".$dnesnidatum."',1)");
// pokud ne, vložíme ji
else:
// zjistíme, zdali návštěvník ten samý den nebyl na stránce
if ($poslednipristup!=$dnesnidatum):
$pocitat = true;
MySQL_Query("UPDATE Host SET Datum = '".$dnesnidatum."', Pocet = Pocet+1 WHERE IP = '".$ipadresa."'");
// pokud ne, připočteme návštěvu IP adrese a uložíme aktuální datum
else:
$pocitat=false;
MySQL_Query("UPDATE Host SET Pocet = Pocet+1 WHERE IP = '".$ipadresa."'");
// jinak připočteme návštěvu IP adrese a nepočítáme jiné přístupy
endif;
endif;
if ($pocitat):
// zjistíme, zdali máme počítat
$result[1] = MySQL_Query("SELECT * FROM Celkem");
if (MySQL_Num_Rows($result[1])!=0):
$counter[0] = MySQL_Result($result[1],0)+1;
MySQL_Query("UPDATE Celkem SET Pocet = Pocet+1");
else:
$counter[0] = 1;
MySQL_Query("INSERT INTO Celkem VALUES(1)");
endif;
$result[2] = MySQL_Query("SELECT * FROM Mesicni WHERE Mesic = '$month'");
$aktmesic = MySQL_Fetch_Object($result[2]);
$counter[1] = $aktmesic->Pocet+1;
if ($counter[1]==1):
MySQL_Query("INSERT INTO Mesicni VALUES('$month',1)");
else:
MySQL_Query("UPDATE Mesicni SET Pocet = Pocet+1 WHERE Mesic = '$month'");
endif;
$result[3] = MYSQL_Query("SELECT * FROM Dnes WHERE Datum='$dnesnidatum'");
$zaznam = MySQL_Fetch_Object($result[3]);
$counter[2] = $zaznam->Pocet+1;
if ($counter[2] == 1):
MySQL_Query("INSERT INTO Dnes VALUES ('$dnesnidatum', 1)");
else:
MySQL_Query("UPDATE Dnes SET Pocet = Pocet+1 WHERE Datum = '$dnesnidatum'");
endif;
// pokud ano, připočteme všem hodnotám jednu a vrátíme výsledky v poli $counter
else:
$result[4] = MySQL_Query("SELECT * FROM Celkem");
$counter[0] = MySQL_Result($result[4],0);
$result[5] = MySQL_Query("SELECT * FROM Mesicni WHERE Mesic = '$month'");
$tentom = MySQL_Fetch_Object($result[5]);
$counter[1] = $tentom->Pocet;
$result[6] = MYSQL_Query("SELECT * FROM Dnes WHERE Datum='$dnesnidatum'");
$dnes = MySQL_Fetch_Object($result[6]);
$counter[2] = $dnes->Pocet;
// jinak jen načteme všechny hodnoty do pole $counter
endif;
$result[7] = MySQL_Query("SELECT * FROM Host WHERE IP = '".$ipadresa."'");
$counter[3] = MySQL_Result($result[7],0,2);
echo "Celkem: ".$counter[0]."<br>";
echo $month.": ".$counter[1]."<br>";
echo "Dnes: ".$counter[2]."<br>";
echo "IP: ".$counter[3]."
";
?> |
||
| Pumpa Profil * |
#7 · Zasláno: 15. 7. 2008, 21:58:17
Tenhle skript bohužel taky nefunguje. Hlásí to spostu chyb:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/free/ic.cz/a/xxxroot/www/xxx.php on line 46 Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/free/ic.cz/a/xxxroot/www/xxx.php on line 70 Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/free/ic.cz/a/xxx/root/www/xxx.php on line 78 Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/free/ic.cz/a/xxx/root/www/xxx.php on line 86 Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/free/ic.cz/a/xxx/root/www/xxx.php on line 108 |
||
| Alphard Profil |
#8 · Zasláno: 15. 7. 2008, 22:31:59
chyba je v dotazu na databázi, vypíšeš ji pomocí echo mysql_error();
autor předpokládá nastavení register globals on, na to bych také nevsázel zkus u toho prvního: místo řádku `datum` date NOT NULL DEFAULT '0000–00–00', použít `datum` date DEFAULT '0000–00–00', nebo jen `datum` date, a uvidí se, nevím, nečetl jsem jsem celý kód |
||
| Pumpa Profil * |
#9 · Zasláno: 15. 7. 2008, 23:02:01
OK. Poslední možnost funguje - ale pak to vypíše:
ONLINE: 0 DNES: 0 CELKEM: 1 co to má znamenat? |
||
| Pumpa Profil * |
#10 · Zasláno: 15. 7. 2008, 23:03:36
A při každym reloadu se celkem zvýší o 1 ale ostatní jsou na nule.
|
||
|
Časová prodleva: 18 let
|
|||
0