|
| [MySQL] Hvad er der galt her? Fra : Anders Jacobsen |
Dato : 29-06-03 22:49 |
|
Jeg har forsøgt at lave dette lille tællerscript, som ikke virker, men
heller ikke giver nogen fejlmeldinger...
Hvad er der galt?
<?php
$ip = $_SERVER["REMOTE_ADDR"];
$browser = $_SERVER["HTTP_USER_AGENT"];
include 'mysql_connect.php';
$oldip = mysql_query("SELECT ip,MATCH (ip) AGAINST ('$ip') FROM counter");
$total = mysql_query("SELECT total FROM counter WHERE ip = $oldip");
if ($ip == $oldip) {
$total2 = $total + 1;
} else {
$total2 = 1;
}
$sql = "insert into counter(time,ip,browser,total)
values(now(),'$ip','$browser','$total2') WHERE ip = $ip";
mysql_query($sql);
include 'mysql_disconnect.php';
?>
| |
Johan Holst Nielsen (29-06-2003)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 29-06-03 23:05 |
|
Anders Jacobsen wrote:
> Hvad er der galt?
>
> <?php
> $ip = $_SERVER["REMOTE_ADDR"];
> $browser = $_SERVER["HTTP_USER_AGENT"];
> include 'mysql_connect.php';
> $oldip = mysql_query("SELECT ip,MATCH (ip) AGAINST ('$ip') FROM counter");
> $total = mysql_query("SELECT total FROM counter WHERE ip = $oldip");
>
> if ($ip == $oldip) {
> $total2 = $total + 1;
> } else {
> $total2 = 1;
> }
>
> $sql = "insert into counter(time,ip,browser,total)
> values(now(),'$ip','$browser','$total2') WHERE ip = $ip";
>
> mysql_query($sql);
> include 'mysql_disconnect.php';
> ?>
>
Hvad er det du vil helt præcis? Du skal i hvert fald tage et kig på
f.eks. http://php.net/mysql_fetch_rows
Desuden kan jeg ikke se pointen i at bruge MATCH AGAINST i dette
tilfælde? Er der noget jeg har overset? :)
tror det du vil er noget ala dette her:
<?php
require('mysql_connect.php');
$q = "SELECT total FROM counter WHERE ip=".$_SERVER['REMOTE_ADDR']."'";
$result = mysql_query($q);
if(mysql_num_rows($result)>0) {
$row = mysql_fetch_row($result);
$row[0]++;
mysql_query("UPDATE counter SET total = '".$row[0]."' WHERE
ip='".$_SERVER['REMOTE_ADDR']."'");
}
else {
$q = "INSERT INTO counter (time,ip,browser,total) VALUES
(now(),'".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_USER_AGENT']."',1)";
}
?>
mvh
Johan
| |
Anders Jacobsen (29-06-2003)
| Kommentar Fra : Anders Jacobsen |
Dato : 29-06-03 23:43 |
|
"Johan Holst Nielsen" <johan@weknowthewayout.com> skrev i en meddelelse
news:3EFF62A3.5050102@weknowthewayout.com...
> Hvad er det du vil helt præcis? Du skal i hvert fald tage et kig på
> f.eks. http://php.net/mysql_fetch_rows
>
> Desuden kan jeg ikke se pointen i at bruge MATCH AGAINST i dette
> tilfælde? Er der noget jeg har overset? :)
Det jeg forsøger at lave er en "tæller" som registrerer tid, IP og browser,
og skriver dem i en database. Jeg ved ikke om der er en smartere metode, men
jeg forsøgte at bruge MATCH AGAINST til at søge efter IP'en i databasen, og
i tilfælde af at den fandt en magen til den som pågældende bruger havde,
skulle den overskrive den tidligere række og lægge en til kolonnen "total".
Hvis IP'en ikke fandtes i databasen skulle den bare oprette en med en start
totalt på 1.
> tror det du vil er noget ala dette her:
> <?php
> require('mysql_connect.php');
> $q = "SELECT total FROM counter WHERE ip=".$_SERVER['REMOTE_ADDR']."'";
> $result = mysql_query($q);
> if(mysql_num_rows($result)>0) {
> $row = mysql_fetch_row($result);
> $row[0]++;
> mysql_query("UPDATE counter SET total = '".$row[0]."' WHERE
> ip='".$_SERVER['REMOTE_ADDR']."'");
> }
> else {
> $q = "INSERT INTO counter (time,ip,browser,total) VALUES
>
(now(),'".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_USER_AGENT']."',1)";
> }
> ?>
Det ser da meget godt ud bortset fra at jeg ikke lige ville have opbygget
det på samme måde. Desuden laver den Parse Error i linie 5 hvor der står:
if(mysql_num_rows($result)>0) {$row = mysql_fetch_row($result);}
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result
resource...
Mvh. Anders Jacobsen
| |
Johan Holst Nielsen (29-06-2003)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 29-06-03 23:48 |
|
Anders Jacobsen wrote:
> "Johan Holst Nielsen" <johan@weknowthewayout.com> skrev i en meddelelse
> news:3EFF62A3.5050102@weknowthewayout.com...
>
>>Hvad er det du vil helt præcis? Du skal i hvert fald tage et kig på
>>f.eks. http://php.net/mysql_fetch_rows
>>
>>Desuden kan jeg ikke se pointen i at bruge MATCH AGAINST i dette
>>tilfælde? Er der noget jeg har overset? :)
>
>
> Det jeg forsøger at lave er en "tæller" som registrerer tid, IP og browser,
> og skriver dem i en database. Jeg ved ikke om der er en smartere metode, men
> jeg forsøgte at bruge MATCH AGAINST til at søge efter IP'en i databasen, og
> i tilfælde af at den fandt en magen til den som pågældende bruger havde,
> skulle den overskrive den tidligere række og lægge en til kolonnen "total".
> Hvis IP'en ikke fandtes i databasen skulle den bare oprette en med en start
> totalt på 1.
>
Okay det er det det script jeg har sendt gør :)
>
>>tror det du vil er noget ala dette her:
>><?php
>>require('mysql_connect.php');
>>$q = "SELECT total FROM counter WHERE ip=".$_SERVER['REMOTE_ADDR']."'";
>>$result = mysql_query($q);
>>if(mysql_num_rows($result)>0) {
>> $row = mysql_fetch_row($result);
>> $row[0]++;
>> mysql_query("UPDATE counter SET total = '".$row[0]."' WHERE
>>ip='".$_SERVER['REMOTE_ADDR']."'");
>>}
>>else {
>> $q = "INSERT INTO counter (time,ip,browser,total) VALUES
>>
>
> (now(),'".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_USER_AGENT']."',1)";
>
>>}
>>?>
>
>
> Det ser da meget godt ud bortset fra at jeg ikke lige ville have opbygget
> det på samme måde. Desuden laver den Parse Error i linie 5 hvor der står:
>
> if(mysql_num_rows($result)>0) {$row = mysql_fetch_row($result);}
>
> Warning: mysql_num_rows(): supplied argument is not a valid MySQL result
> resource...
Prøv
echo mysql_error(); på en linie mellem $result = mysql_query($q); og
if(mysql_num_rows...
Smid error'en her :)
mvh
Johan
| |
Anders Jacobsen (29-06-2003)
| Kommentar Fra : Anders Jacobsen |
Dato : 29-06-03 23:57 |
|
"Johan Holst Nielsen" <johan@weknowthewayout.com> skrev i en meddelelse
news:3EFF6C8F.3050001@weknowthewayout.com...
> Smid error'en her :)
| |
Anders Jacobsen (29-06-2003)
| Kommentar Fra : Anders Jacobsen |
Dato : 29-06-03 23:58 |
|
"Johan Holst Nielsen" <johan@weknowthewayout.com> skrev i en meddelelse
news:3EFF6C8F.3050001@weknowthewayout.com...
> Smid error'en her :)
You have an error in your SQL syntax near '.86.5'' at line 1
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result
resource in /home/web/web3645/upd/test/count2.php on line 6
Mvh. Anders Jacobsen
| |
Anders Jacobsen (30-06-2003)
| Kommentar Fra : Anders Jacobsen |
Dato : 30-06-03 00:05 |
|
"Anders Jacobsen" <anders@FJERN.ichtys.dk> skrev i en meddelelse
news:3eff6ef9$0$32486$edfadb0f@dread16.news.tele.dk...
>
> "Johan Holst Nielsen" <johan@weknowthewayout.com> skrev i en meddelelse
> news:3EFF6C8F.3050001@weknowthewayout.com...
> > Smid error'en her :)
>
> You have an error in your SQL syntax near '.86.5'' at line 1
> Warning: mysql_num_rows(): supplied argument is not a valid MySQL result
> resource in /home/web/web3645/upd/test/count2.php on line 6
Jeg er vist meget træt... først poster jeg et "tomt" indlæg, og så glemmer
jeg at skrive det jeg ville have skrevet efter fejlen :)
Min IP er 80.197.86.5, så det er noget af det den skriver om...
Mvh. Anders
| |
Johan Holst Nielsen (30-06-2003)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 30-06-03 00:27 |
|
Anders Jacobsen wrote:
> "Johan Holst Nielsen" <johan@weknowthewayout.com> skrev i en meddelelse
> news:3EFF6C8F.3050001@weknowthewayout.com...
>
>>Smid error'en her :)
>
>
> You have an error in your SQL syntax near '.86.5'' at line 1
> Warning: mysql_num_rows(): supplied argument is not a valid MySQL result
> resource in /home/web/web3645/upd/test/count2.php on line 6
>
> Mvh. Anders Jacobsen
Dooh..
$q = "SELECT total FROM counter WHERE ip=".$_SERVER['REMOTE_ADDR']."'";
Skal laves om til
$q = "SELECT total FROM counter WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
Der manglede en ' mellem ip= og ".$_SERVER...
mvh
Johan
| |
Anders Jacobsen (30-06-2003)
| Kommentar Fra : Anders Jacobsen |
Dato : 30-06-03 00:41 |
|
"Johan Holst Nielsen" <johan@weknowthewayout.com> skrev i en meddelelse
news:3EFF75D7.6050905@weknowthewayout.com...
> Dooh..
> $q = "SELECT total FROM counter WHERE ip=".$_SERVER['REMOTE_ADDR']."'";
> Skal laves om til
> $q = "SELECT total FROM counter WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
>
> Der manglede en ' mellem ip= og ".$_SERVER...
Nu virker den lige så godt som det jeg selv havde lavet :) - Den skriver
ikke nogen fejl på skærmen, og den skriver heller ikke noget i databasen!
Hvorfor er det lige at du bruger både ' og " omkring de ting hvor man
normalt enten bruger ' eller " ?
Mvh. Anders Jacobsen
| |
Johan Holst Nielsen (30-06-2003)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 30-06-03 00:49 |
|
Anders Jacobsen wrote:
> "Johan Holst Nielsen" <johan@weknowthewayout.com> skrev i en meddelelse
> news:3EFF75D7.6050905@weknowthewayout.com...
>
>>Dooh..
>>$q = "SELECT total FROM counter WHERE ip=".$_SERVER['REMOTE_ADDR']."'";
>>Skal laves om til
>>$q = "SELECT total FROM counter WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
>>
>>Der manglede en ' mellem ip= og ".$_SERVER...
>
> Nu virker den lige så godt som det jeg selv havde lavet :) - Den skriver
> ikke nogen fejl på skærmen, og den skriver heller ikke noget i databasen!
DOOOH, jeg er træt....
der mangler endnu en ting... reposter lige fixed script...
<?php
require('mysql_connect.php');
$q = "SELECT total FROM counter WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
$result = mysql_query($q);
if(mysql_num_rows($result)>0) {
$row = mysql_fetch_row($result);
$row[0]++;
mysql_query("UPDATE counter SET total = '".$row[0]."' WHERE
ip='".$_SERVER['REMOTE_ADDR']."'");
}
else {
mysql_query("INSERT INTO counter (time,ip,browser,total) VALUES
(now(),'".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_USER_AGENT']."',1)");
}
?>
SÅ skulle det virke :D
> Hvorfor er det lige at du bruger både ' og " omkring de ting hvor man
> normalt enten bruger ' eller " ?
Fordi jeg har copypasted fra dig... reelt er der ikke problemer med at
bruge ' i stedet for ". Dog er der visse forskelle... f.eks.
<?php
$foo = 'Johan';
echo "Hej mit navn er $foo"; //output Hej mit navn er Johan
echo 'Hej mit navn er $foo'; //output Hej mit navn er $foo
?>
Generelt er det ellers smag og behag... generelt foretrækker jeg f.eks.
altid at bruge " til queries da jeg bruger ' til at indramme strings i
querien ;) Og helst ' til alt andet... da jeg foretrækker at droppe
stringen hver gang... altså..
<?php
$foo = "Tra lala";
$bar = "ehe heh";
echo 'Jeg siger '.$foo.' '.$bar;
//i stedet for
echo "Jeg siger $foo $bar";
?>
Af en simpel årsag... syntax highlighting i min editor :D
mvh
Johan
| |
Anders Jacobsen (30-06-2003)
| Kommentar Fra : Anders Jacobsen |
Dato : 30-06-03 01:30 |
|
"Johan Holst Nielsen" <johan@weknowthewayout.com> skrev i en meddelelse
news:3EFF7B05.4030509@weknowthewayout.com...
> <?php
> require('mysql_connect.php');
> $q = "SELECT total FROM counter WHERE ip='".$_SERVER['REMOTE_ADDR']."'";
> $result = mysql_query($q);
> if(mysql_num_rows($result)>0) {
> $row = mysql_fetch_row($result);
> $row[0]++;
> mysql_query("UPDATE counter SET total = '".$row[0]."' WHERE
> ip='".$_SERVER['REMOTE_ADDR']."'");
> }
> else {
> mysql_query("INSERT INTO counter (time,ip,browser,total) VALUES
>
(now(),'".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_USER_AGENT']."',1)");
> }
> ?>
>
> SÅ skulle det virke :D
Og det gjorde det også :)
Tusind tak Johan! Så må jeg lige sætte mig 100% ind i scriptet imorgen, når
jeg er lidt mindre træt :)
Mvh. Anders Jacobsen
| |
Johan Holst Nielsen (30-06-2003)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 30-06-03 01:36 |
|
Anders Jacobsen wrote:
> "Johan Holst Nielsen" <johan@weknowthewayout.com> skrev i en meddelelse
> Og det gjorde det også :)
>
> Tusind tak Johan! Så må jeg lige sætte mig 100% ind i scriptet imorgen, når
> jeg er lidt mindre træt :)
Det var så lidt ;)
Spørg endelig hvis der er noget du ikke forstår :)
mvh
Johan
| |
Johan Holst Nielsen (30-06-2003)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 30-06-03 01:37 |
|
Johan Holst Nielsen wrote:
> Anders Jacobsen wrote:
>> Tusind tak Johan! Så må jeg lige sætte mig 100% ind i scriptet
>> imorgen, når
>> jeg er lidt mindre træt :)
Hvad fanden laver vi egentlig oppe på den her tid af natten :D
Nå hva fanden - man skal jo nå sine deadlines... :)
mvh
Johan
| |
Anders Jacobsen (30-06-2003)
| Kommentar Fra : Anders Jacobsen |
Dato : 30-06-03 13:22 |
|
"Johan Holst Nielsen" <johan@weknowthewayout.com> skrev i en meddelelse
news:3EFF85D3.3070200@weknowthewayout.com...
> Spørg endelig hvis der er noget du ikke forstår :)
Nu har jeg siddet og kigget på scriptet og prøvet at forstå disse linier,
som faktisk er det eneste jeg ikke er 100% med på:
if(mysql_num_rows($result)>0) {
$row = mysql_fetch_row($result);
$row[0]++;
I den første linie går jeg ud fra at den tjekker om der er nogle row's i
db'en som matcher den IP der førespørges. Hvis der er over 0 row's der
matcher, hentes row'en, men her er jeg så ikke helt med på hvordan et row
hænger sammen når det bliver hentet med mysql_fetch_row. Det minder jo meget
om et array, men istedet for et kolonnenavn, skriver du [0] ? Hvad betyder
det?
Til feltets værdi lægger man så 1, eller hvad betyder de 2 +'er?
Mvh. Anders Jacobsen
| |
Johan Holst Nielsen (30-06-2003)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 30-06-03 13:44 |
|
Anders Jacobsen wrote:
> "Johan Holst Nielsen" <johan@weknowthewayout.com> skrev i en meddelelse
> news:3EFF85D3.3070200@weknowthewayout.com...
>
>>Spørg endelig hvis der er noget du ikke forstår :)
>
>
> Nu har jeg siddet og kigget på scriptet og prøvet at forstå disse linier,
> som faktisk er det eneste jeg ikke er 100% med på:
>
> if(mysql_num_rows($result)>0) {
> $row = mysql_fetch_row($result);
> $row[0]++;
>
> I den første linie går jeg ud fra at den tjekker om der er nogle row's i
> db'en som matcher den IP der førespørges. Hvis der er over 0 row's der
> matcher, hentes row'en, men her er jeg så ikke helt med på hvordan et row
> hænger sammen når det bliver hentet med mysql_fetch_row. Det minder jo meget
> om et array, men istedet for et kolonnenavn, skriver du [0] ? Hvad betyder
> det?
>
> Til feltets værdi lægger man så 1, eller hvad betyder de 2 +'er?
if(mysql_num_rows($result)>0) { //tjekker om querien returner en record
$row[0]++; // Helt rigtigt, ligger en til... reelt det samme som $row[0]
+= 1; eller $row[0] = $row[0]+1;
Grunden til jeg skriver $row[0] er at mysql_fetch_row henter rows ud fra
forespørgslen til tabellen. Således er felt 1 = 0, 2 = 1 osv...
$query = "SELECT felt1, felt2, felt3 FROM tabel";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
Så ville felt1 ligge i $row[0], felt2 i $row[1] og felt3 i $row[2]...
Hvis der returneres mere end 1 record kører man så en while løkke..
Så henter det et set ud pr. gang... lad os antage følgende tabel:
------------------------------------
| felt1 | felt2 | felt3 | type |
----------------------------------
| test11 | test21 | test31 | ty1 |
------------------------------------
| test12 | test22 | test32 | ty2 |
------------------------------------
| test13 | test23 | test33 | ty3 |
------------------------------------
| test13 | test23 | test33 | ty1 |
------------------------------------
Hvis vi laver en forespørgsel der ser således ud:
$query = "SELECT felt1, felt2, felt3 FROM tabel WHERE type = 'ty1'";
ville der blive returneret 2 poster.
Derfor kører vi en while...
while($row = mysql_fetch_row($result)) {
echo $row[0].' '.$row[1].' '.$row[2].'<br>';
}
Ville returnere
test11 test 21 test31<br>test13 test23 test 33<br>
while løkken med et mysql_fetch_row stopper automatisk når der rows
tilbage (fordi den returnere false...).
En anden mulighed... hvis du ikke kan lide 0, 1 osv.. i $row[XX] kan du
bruge mysql_fetch_array... der bruger du i stedet navnet...
Tilbage til det første eksempel.
$query = "SELECT felt1, felt2, felt3 FROM tabel";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
her ville felt1 ligge i $row['felt1'], felt2 i $row['felt2'] og felt3 i
$row['felt3'] ..
Håber det hjælp lidt... ellers spørg :)
mvh
Johan
| |
|
|