/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
[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


Søg
Reklame
Statistik
Spørgsmål : 177502
Tips : 31968
Nyheder : 719565
Indlæg : 6408534
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste