Avatar billede simon_jacobsen Nybegynder
21. april 2004 - 09:57 Der er 20 kommentarer og
1 løsning

gem og hent fra mysql

jeg har en mysql tabel med navnet download, indeholdene punkterne "ip" og "tal".
jeg skal bruge en funktion der kan gemme :
ip under ip
og lægge 1 til "tal" sådan at hvis den bliver oprettet står der 1.

en anden funktion skal trække 1 fra "tal", og gemme dette hvis brugerens ip findes i tabellen.
Avatar billede b4r0n3n Nybegynder
21. april 2004 - 10:39 #1
Kan dette bruges?

Funktion 1:
"INSERT INTO download SET ip = '$ip', tal = tal+1"

Funktion 2:
"UPDATE download SET tal = tal-1 where ip = '$ip'"
Avatar billede dennismp Nybegynder
21. april 2004 - 11:25 #2
den første er forkert:
$tal++;
"INSERT INTO download(ip, tal) values('$ip',$tal)";
Avatar billede b4r0n3n Nybegynder
21. april 2004 - 11:40 #3
sjovt nok, for det virker fint på min egen side
Avatar billede dennismp Nybegynder
21. april 2004 - 11:48 #4
Ved ikke om det er sjovt, men jeg kan ikke finde noget dokumentation (og dev.mysql.com er belejligt nok nede) på den syntax. Og hvis han nogensinde kommer til at arbejde med andre databaser end mysql, så virker den slags jo ikke.

Jeg vil til enhvertid fortrække at bruge det der ligner/er standarden, så kan man jo altid bevist lave et valg hvis man bryder den.
Avatar billede b4r0n3n Nybegynder
21. april 2004 - 13:54 #5
det er rigtigt...
Avatar billede b4r0n3n Nybegynder
21. april 2004 - 13:55 #6
hov

...men nu siger han at han bruger mysql, og så er det jo egentlig godt nok
Avatar billede dennismp Nybegynder
21. april 2004 - 14:11 #7
Ja, men jeg kunne godt tænke mig at se i dokumentationen. Hvis det ikke står der, så kan det jo tænkes at det noget der kunne forsvinde igen ved nye versioner.

Anyway, det må være simon der tager den beslutning :)
Avatar billede simon_jacobsen Nybegynder
21. april 2004 - 14:15 #8
undskyld havde glemt at skrive at jeg er dum til php, men i kort form vil jeg have :

funktion 1
åben database
if $ip exist i tabel then
skal der bare ligges en til $tal under den ip
}
else{
$ip = $_SERVER[REMOTE_ADDR];
opret ny linie i tabel hvor ip = $ip og tal = 1
}
luk database


funktion 2
åben database
if ip exist i tabel og tal > 0 {
der skal trækkes en fra tal i tabellen
load side //kan jeg godt
}
else{
echo "access denied";
}
luk database
Avatar billede dennismp Nybegynder
21. april 2004 - 14:56 #9
funktion1:

$ip = $_SERVER['REMOTE_ADDR'];
$res = mysql_query("UPDATE download SET tal=tal+1 WHERE ip='$ip'") or die(mysql_error());

if( mysql_affected_rows($res) == 0 ) {
  mysql_query("INSERT INTO download(ip,tal) VALUES('$ip',1)") or die(mysql_error());
}

funktion2:
$ip = $_SERVER['REMOTE_ADDR'];
$res = mysql_query("SELECT 1 FROM download WHERE ip = '$ip' AND tal > 0") or die(mysql_error());
if( $row = mysql_fetch_row($res) ) {
  mysql_query("UPDATE download SET tal=tal-1 WHERE ip = '$ip'") or die(mysql_error());
}
else {
  echo "Access denied";
}

*utestet
Avatar billede simon_jacobsen Nybegynder
21. april 2004 - 15:08 #10
kan ikke lige teste det på nuværende tidspunkt, men satser på det virker, smid lige et svar så du kan få points :)
Avatar billede dennismp Nybegynder
21. april 2004 - 15:16 #11
Det haster skam ikke - bare test før du giver points.
Avatar billede simon_jacobsen Nybegynder
21. april 2004 - 21:52 #12
Takker :)
Avatar billede simon_jacobsen Nybegynder
23. april 2004 - 11:21 #13
den melder om fejl i kommandoen
if( mysql_affected_rows($res) == 0 ) {
den skriver :
Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource
findes der en anden løsning ?
Avatar billede dennismp Nybegynder
23. april 2004 - 13:42 #14
Hvordan ser scriptet ud? Hvis mysql_query() fejler, burde den ikke nå så langt.
Avatar billede simon_jacobsen Nybegynder
23. april 2004 - 15:12 #15
$link = mysql_connect("", "", "");
    mysql_select_db("", $link);
$ip = $_SERVER['REMOTE_ADDR'];

$res = mysql_query("UPDATE download SET tal=tal+1 WHERE ip='$ip'") or die(mysql_error());

if( mysql_affected_rows($res) == 0 ) {
  mysql_query("delete from download where ip = '$ip'");
  mysql_query("INSERT INTO download(ip,tal) VALUES('$ip',1)") or die(mysql_error());
}
Avatar billede simon_jacobsen Nybegynder
23. april 2004 - 15:12 #16
jeg har skrevet login og kode ind men ville ikke lige smide det op her ;)
Avatar billede dennismp Nybegynder
23. april 2004 - 17:16 #17
hvorfor har du denne linje?
mysql_query("delete from download where ip = '$ip'");
Avatar billede simon_jacobsen Nybegynder
27. april 2004 - 01:30 #18
for ellers skriver den en ny linie hver gang :/
så det ser således ud :
192.168.0.1 | 1
192.168.0.1 | 2
192.168.0.1 | 3
192.168.0.1 | 4
og det er jo ikke det der er meningen ...
Avatar billede dennismp Nybegynder
27. april 2004 - 09:17 #19
Jo men,

$res = mysql_query("UPDATE download SET tal=tal+1 WHERE ip='$ip'") or die(mysql_error());

Laver en update, hvor ip=$ip

if( mysql_affected_rows($res) == 0 ) {

Hvis der er 0 rækker.

  mysql_query("delete from download where ip = '$ip'");

Så slet alle rækker med ip=$ip


.. så du sletter kun, når du er rimelig sikker på at du ikke kan finde nogen ip'er der matcher.. Hvilket jo måske er lidt overflødigt :)
Avatar billede simon_jacobsen Nybegynder
27. april 2004 - 09:28 #20
ja ok, men det burde være ligemeget, den burde stadig ikke melde fejl ved :
if( mysql_affected_rows($res) == 0 ) {
Avatar billede dennismp Nybegynder
27. april 2004 - 09:40 #21
prøv at skrive $res ud, sådan i stil m ed
print "res: $res<br/>";
før den if-sætning
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