Har ett litet problem här och hoppas på lite hjälp...
Försöker att räkna IP'n i en databas, meningen är att den skall lagra unika IP'n...
Finns ip't redan, så läggs det inte in någon info.
Finns inte ip't, så läggs det in...
Försöker med följande kod...
<?
$u_ip = $_SERVER['REMOTE_ADDR'];
$link = mysql_connect ("server","user","pass");
$databas = mysql_select_db("databas");
$in_use_query = mysql_query("SELECT unique FROM log WHERE ip = '$u_ip'", $link);
if(mysql_num_rows($in_use_query)) {
error_message("IP redan räknat");
exit;
}
$sql="INSERT INTO log (ip)
VALUES('$u_ip')";
mysql_query("$sql");
mysql_close ($link);
?>
Men jag får detta fel:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/user/log/unique.php on line 7
Någon som kan hjälpa mig och förklara vad som är fel, och ev. en lösning på felet?
Vore tacksam för hjälp =)
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 'unique FROM log WHERE ip = 'xxx.xxx.xxx.xxx' at line 1
Bara för att kolla mig själv nu..
Jag gissar på att felet ligger till vänster om "unique", men bara för att kolla så det inte är till höger...
Databasen heter 7324-1..
Tabellen heter unique och fältet som skall kollas heter "ip"..
där det står "log" var förvisso fel, det var tabellen ovan.
Jag har bytt ut log mot unique, ip och 7324-1 utan något bättre resultat, så det bör väl inte vara fel till höger om unique?
Ok...
Lyckades hitta problemet.. mysql_db_query skulle det tydligen vara...
Nu har jag dock ett annat problem som jag inte fattar mig på.. nu krafsar jag mig verkligen i skallen...
$in_use_query = mysql_db_query("SELECT ip FROM unique WHERE ip = '$u_ip'", $link) or die(mysql_error());
Nu får jag istället detta fel...
Incorrect database name 'SELECT ip FROM unique WHERE ip = 'xxx.xxx.xxx.xxx'
Som sagt, databasen = 7324-1, tabell = unique, fältet som skall kollas = ip
Läste visst inte själva SQL-strängen sist... Du har en tabell som heter unique??? Undra på att det blir problem! unique är ett reserverat ord i SQL, byt namn på tabellen!
Exempel:
Anställd ((personnr), anställningsnr, namn, lön, ....) där både personnr och anställningsnr är unikt. För att beskriva för SQL att icke-nyckelvärdet anställningsnr är unikt så definieras den kolumnen till att vara unique. På samma sätt som man kan stoppa null-värden med NOT NULL o dyl.
Testade bara på skoj att ta byta tillbaks mysql_query från mysql_db_query, och nu funkade det...
Alltid lär man sig nåt nytt.. =)
Tack för hjälpen med allt det andra.. =)
Ytterligare en fråga då.. känns onödigt att öppna en ny tråd...
i tabellen "log" finns det ett fält som heter "referer" som fylls med "HTTP_REFERER".
Det är ju inte alltid man kommer in på sidan från en länk, så den är ju tom ibland.
går det, och i så fall hur, att sortera ut alla toma fält i qeryn, så att man vid visning av tabellen på en sida enbart ser de fält som är fyllda?
... i tabellen "log" finns det ett fält som heter "referer" som fylls med "HTTP_REFERER".
.... går det, och i så fall hur, att sortera ut alla toma fält i qeryn, så att man vid visning av tabellen på en sida enbart ser de fält som är fyllda?
Frågan är vad som lagras där när inget fylls i? Har den kolumnen något defaultvärde som "" (tom sträng) eller lagras där absolut inget?
Testa att lägga in
WHERE (referer <> "" AND referer <> NULL) i din SQL-fråga om du inte vet svaret på frågan ovan. Annars tar dessa två villkor bort för de respektive fallen.
Förlåt mig! Jag tänkte mig inte för när jag skrev. Strängar i SQL avgränsas med ' inte ". Dessutom "or die" har du där strängen körs, inte i sql-frågan. Ändra till:
$sql = "SELECT referer FROM log
WHERE (referer <> '' AND referer <> NULL)
ORDER BY id DESC LIMIT $start,$limit";
$res = mysql_query($sql) or die(mysql_error());
Felet jag får är:
Parse error: parse error, unexpected '\"'
Jag kan då inte de en \" någonstans på den raden...
Felet kommer från PHP, inte MySQL. Din fråga når aldrig längre än till att PHP hittar:
"SELECT referer FROM log WHERE (referer <> "
Aha! Strängslut. Nästa tecken ska då vara antingen ';' (slut på sats) eller '.' (konkatinera ihop med resten). Men nästa tecken är ett citationstecken, unexpected ". Och så escape:as det: \" ==> felmeddelandet.
Det blir mycket lättare att läsa din kod om du använder php-taggen:
Skriv PHP-kod här
i stället för
Annan kod
. Åstadkoms med (utan mellanslagen) [ PHP] [ /PHP] i stället för [ KOD][ /KOD].
Den sopar avgjort inte bort något. Ingenting ändras av en SELECT-sats. Om inget kommer ut betyder det antingen att innehållet inte ser ut som du tror, eller att frågan är fel.
Hur ser det ut utan WHERE-satsen då? Är du säker på att det ligger något i log?
jag menade förståss inte att det sopar bort ur databasen, utan snarare filtrerar bort allt... =)
Jag skickar dig ett privat meddelande med länken till hela scriptet, så får du se vad som finns i databasen.. =)
Utan WHERE satsen visar den rubbet, både toma och fyllda fält...
$sql = "SELECT referer, id FROM log
WHERE (referer <> '' AND referer <> NULL)
ORDER BY id DESC LIMIT $start,$limit";
$res = mysql_query($sql) or die(mysql_error());
Testa!
Förresten! Vad är värdena på $start, $limit? Vad skriver följande ut:
$sql = "SELECT referer, id FROM log
WHERE (referer <> '' AND referer <> NULL)";
$res = mysql_query($sql) or die(mysql_error());
phps? Vet inte vad du menar riktigt. Men problemet ligger inte i PHP:n nu, utan i att få din SQL fråga att funka. Såvida inte... hur använder du svaret från queryn?
Det du vill ha ut ligger i $res[0] (om resurs-handtaget heter $res.)
Om mitt nedre förslag inte heller funkar och du skriver ut $res[0], pröva att skriva bara :
$sql = "SELECT referer FROM log";
$res = mysql_query($sql) or die(mysql_error());
Då ska du få ut allt.
Jag loggar ut och går och lägger mig nu, var uppe halva natten igår... Lycka till!
263 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91