Avatar billede Slettet bruger
07. oktober 2005 - 22:05 Der er 25 kommentarer og
1 løsning

mysql_num_rows giver fejl

Hej

Jeg prøver på at banne folk i 5 minutter med følgende script:

Den giver dog fejl:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/domain.com/includes/banip.php on line 45
Error - Unable to insert records

Hvad gør jeg galt ??? :o)

På forhånd tak

<?php
$ip = $_SERVER['REMOTE_ADDR'];

$server = "localhost";
$table = "mail_ip";
$database = "db";
$username = "dbuser";
$password = "passwd";

$connection = mysql_connect($server,$dbuser,$passwd);
mysql_select_db($database,$connection);

$minutes = 5;
$seconds = $minutes*60;
$past = time()-$seconds;
$now = time();

if ( mysql_num_rows(mysql_query("SELECT * FROM $table WHERE ip=$ip")) != 0 ) {

mysql_query("UPDATE $table SET date=$now WHERE ip=$ip") or die ("Error - Unable to update visit");
} else {

mysql_query("INSERT INTO $table (id,date) VALUES ($ip,$now)") or die ("Error - Unable to insert records");

}
mysql_query("DELETE FROM $table WHERE date < $past") or die ("Error - Unable to delete old visits");
?>
Avatar billede erikjacobsen Ekspert
07. oktober 2005 - 22:07 #1
Du skal have at vide hvad der er galt, så:

$s=mysql_query("SELECT * FROM $table WHERE ip=$ip") or die(mysql_error());
if ( mysql_num_rows($s) != 0 ) {
Avatar billede arne_v Ekspert
07. oktober 2005 - 22:07 #2
if ( mysql_num_rows(mysql_query("SELECT * FROM $table WHERE ip='$ip'")) != 0 ) {

måske
Avatar billede arne_v Ekspert
07. oktober 2005 - 22:08 #3
ellers or die som Erik foreslår så vi kan se hvad der er galt
Avatar billede erikjacobsen Ekspert
07. oktober 2005 - 22:10 #4
'...'-erne nok en god idé, Arne. Det var bare for at lære spørgeren hvordan han kan klare sig selv en anden gang ;)
Avatar billede Slettet bruger
07. oktober 2005 - 22:13 #5
okay... Jeg har nok brug (tør næsten ikke sige det) en times tid eller sådan noget... Og nu kan jeg se at det bare var en syntax-fejl...

('$ip','$now') gjorde det ;o)
Avatar billede Slettet bruger
07. oktober 2005 - 22:13 #6
kom med et svar, så skal du få point, erik ;o)
Avatar billede erikjacobsen Ekspert
07. oktober 2005 - 22:18 #7
Ingen point til mig, tak.
Avatar billede Slettet bruger
07. oktober 2005 - 22:29 #8
måske var jeg også for hurtig på aftrækkeren...
Jeg får indsat mine data nu, men den fejl stadig...

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 '.193.173' at line 1

det gør den med:

$s=mysql_query("SELECT * FROM $table WHERE ip=$ip") or die(mysql_error());
if ( mysql_num_rows($s) != 0 ) {
Avatar billede Slettet bruger
07. oktober 2005 - 22:30 #9
dvs. nu får jeg ikke indsat mine data... klokken er vist ved at være mange ;o)
Avatar billede erikjacobsen Ekspert
07. oktober 2005 - 22:31 #10
Se Arnes forslag 22:07:56
Avatar billede Slettet bruger
07. oktober 2005 - 22:33 #11
'$ip' igen... nu må jeg snart lære at bruge '' ;o)
Avatar billede erikjacobsen Ekspert
07. oktober 2005 - 22:38 #12
Lige præcis i MySql må du sætte '...' omkring alle værdier, tal, tekst, whatever. Det er så let at huske ;)
Avatar billede Slettet bruger
07. oktober 2005 - 22:39 #13
takker for hurtig input ;o)
Avatar billede arne_v Ekspert
07. oktober 2005 - 22:41 #14
man må sætte '' omkring tal

men man bør undlade at ætte '' omkring tal
Avatar billede Slettet bruger
07. oktober 2005 - 22:48 #15
hvorfor ?
Avatar billede arne_v Ekspert
07. oktober 2005 - 22:49 #16
den dag du skal flytte din SQL til en anden database (andre databaser tillader
nemlig ikke '' omkring tal)
Avatar billede terrak Nybegynder
07. oktober 2005 - 22:49 #17
Sidenote: Det er også en god ide at bruge `` rundt om tabel- og feltnanve, da du ellers vil få fejl hvis du henter data fra en tabel eller et felt ved navn select, where, drop, update etc.
Avatar billede arne_v Ekspert
07. oktober 2005 - 22:50 #18
jeg vil fraråde at bruge `` omkring navne af samme årsag - den dag man skal skifte
database - vær lidt omhyggelig med at undgå reserverede navne
Avatar billede Slettet bruger
07. oktober 2005 - 22:53 #19
Men hvordan vil du undgå brugen af '' da den ellers vil give syntax-fejl... btw, så bruger fx phpmyadmin også '' omkring tabel- og feltnavne ;o)
Avatar billede arne_v Ekspert
07. oktober 2005 - 22:58 #20
den giver ikke syntax fejl ved tal uden '' kun ved tekster uden ''

(og en IP adresse med flere punktummer er en tekst)
Avatar billede arne_v Ekspert
07. oktober 2005 - 22:59 #21
PHPMyAdmin  er ikke lavet til at understøtte andre databaser
Avatar billede Slettet bruger
07. oktober 2005 - 23:07 #22
det har du selvfølgelig ret i - den understøtter kun MySQL... Ganske god gratis database server, hvorfor jeg vælger at bruge den fremfor MS eller Oracle..
Avatar billede arne_v Ekspert
07. oktober 2005 - 23:09 #23
jo men om 2 år flytter du din web app til et andet web hotel og ups de kører
PostgreSQL - det er også en glimrende gratis database - og så er det trist
at skulle rette alle de unødvendige MySQL'ismer
Avatar billede Slettet bruger
07. oktober 2005 - 23:14 #24
Nu hoster jeg selv, så det er jeg sådan set selv herre over, men i teorien, ja... Stadig er jeg nødt til at bruge '' omkring min IP
Avatar billede arne_v Ekspert
07. oktober 2005 - 23:15 #25
jep
Avatar billede Slettet bruger
07. oktober 2005 - 23:33 #26
Så virker det...

<?php
require("dbconn.php");
$ip = $_SERVER['REMOTE_ADDR'];
$table = "mail_ip";
$minutes = 1;
$seconds = $minutes*60;
$past = time()-$seconds;
$now = time();

mysql_query("DELETE FROM $table WHERE date < $past") or die (mysql_error());

$s=mysql_query("SELECT * FROM $table WHERE ip='$ip'") or die(mysql_error());
if ( mysql_num_rows($s) != 0 )
    {
    echo "Sorry, you are not allowed to use this form more than <b>one</b> time every <b>$minutes</b> minutes...";
    }
    else
    {
    mysql_query("INSERT INTO $table (ip,date) VALUES ('$ip','$now')") or die (mysql_error());
    }
?>

Er der nogle, der ellers har et forslag til hvordan man kan sikre sig mod SPAM fra en mail formular ?? Ovenstående sørger kun for at der skal gå x antal minutter før man må sende en mail igen fra formen...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester