[PHP]voorwaardelijk updaten of invoegen in mysql

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Ik heb de volgende functie, het is de bedoeling dat hij kijkt of de record al bestaat, zoniet voeg je er eentje toe. Bestaat ie al wel dan vernieuw je de datum en kijk je welk veld in de rij(page1 t/m page 100) nog leeg is, daarplaats je dan $pagina.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function AddHit(){ 
      $ip=getenv(REMOTE_ADDR);
      $pagina=$_GET['pagina'];
      $nu = date("YmdHi");
      $uur_geleden = date("YmdHi", mktime(date("H") - 1, date("i"), 0, date("m"), date("d"), date("Y")));
      $sql1="SELECT * FROM ip WHERE ip='$ip' AND datum>'$uur_geleden'";
      $result=mysql_query($sql1)||die(mysql_error());
      $gevonden=mysql_num_rows($result);
      if($gevonden>0){
                                        while($row=mysql_fetch_array($result){
                                        for($i=1;$i<101;$i++){
                                        if($row['page'.$i]==0){
                                        sql="UPDATE ip SET datum='$nu', hits=hits+1, page$i='$pagina' WHERE ip='$ip'";
                                        }
                                        }
                    }                                       
                      
      }else{                      
                      $sql = "INSERT INTO ip (ip, datum, hits, page1) VALUES ('$ip', '$nu', '1', '$pagina')";
      } 
      mysql_query($sql)||die(mysql_error()); 
      return TRUE; 
   }

Sorry dat ie wat te breed is :)

Acties:
  • 0 Henk 'm!

Verwijderd

Dat is erg fijn voor je dat je die functie hebt.... wat moeten wij er mee?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Sorry, ik was vergeten te vermelden dat ie het dus niet doet. Ik denk dat de fout in het bovenste rijtje variablen zit omdat de eerste if statement niet goed word uitgevoerd.

[ Voor 3% gewijzigd door djluc op 17-02-2004 19:34 ]


Acties:
  • 0 Henk 'm!

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 16-08 06:44

CyberSnooP

^^^^ schrijft --->

Een kleine greep uit mijn gedachten bij jou code:
• Datums vergelijken kan in MySQL beter met daarvoor gemaakt functies als DATE_DIFF. Zoek die eens op de in MySQL Manual. Een groter-dan operator op strings (eerste query, regel 6 aan het einde) vind ik helemaal twijfelachtig tenzij dat ergens duidelijk gespecificeerd is.
• Ook voor dingen als 'een uur geleden' (=nu - 3600 in het geval van timestamps overigens) en 'nu' bestaan functies in MySQL
• Ik krijg sterk het gevoel dat jij een tabel hebt met de velden page1 tot en met page100. Dat is vies, zo doen we dat niet :) Een goed data-model is een vereiste voor het begin.
• Een variabele, een veld en een tabel delen dezelfde naam (ip).. Overzichtelijk is anders.
• De code is niet netjes geïndent en toch zie ik zo al een ontbrekend $-tekentje op regel 13 (en op regel 1)

Korte conclusie: Werk netjes, neem de tijd, denk na hoe je het wilt doen voor je begint etc..

|_____vakje______|


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
CyberSnooP schreef op 17 november 2002 @ 17:34:
Een kleine greep uit mijn gedachten bij jou code:
• Datums vergelijken kan in MySQL beter met daarvoor gemaakt functies als DATE_DIFF. Zoek die eens op de in MySQL Manual. Een groter-dan operator op strings (eerste query, regel 6 aan het einde) vind ik helemaal twijfelachtig tenzij dat ergens duidelijk gespecificeerd is.
Ik ben deze functie aan het maken aan de hand van een artikel op www.phpfreakz.com Die werkten op deze manier, daarom gebruik ik deze nu ook, volgende keer gebruik ik misschien wel de mysql manier. Alvast bedankt voor deze tip!
• Ook voor dingen als 'een uur geleden' (=nu - 3600 in het geval van timestamps overigens) en 'nu' bestaan functies in MySQL
zelfde verhaal
• Ik krijg sterk het gevoel dat jij een tabel hebt met de velden page1 tot en met page100. Dat is vies, zo doen we dat niet :) Een goed data-model is een vereiste voor het begin.
Ik heb hier bewust voor gekozen, omdat ik zeker weet dat dit gaat passen, het is idd niet mooi en ook niet precies zoals het zou moeten.
• Een variabele, een veld en een tabel delen dezelfde naam (ip).. Overzichtelijk is anders.
Heb ik ook uit het artikel, brengt momenteel geen problemen met zich mee.
• De code is niet netjes geïndent en toch zie ik zo al een ontbrekend $-tekentje op regel 13 (en op regel 1)
Wat betekent geïndent? Regel 1 is de functie, defenitie, wat kan ik hier voor $ plaatsen? Verder mis ik ook niets op regel 13, misschien dat jij hier een probleem in ziet: page$i de bedoeling is dus eigenlijk dit: "page".$i Dit hoeft echter niet in PHP met dubbele quotes.

Korte conclusie: Werk netjes, neem de tijd, denk na hoe je het wilt doen voor je begint etc..[/quote]

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

Ik heb hier bewust voor gekozen, omdat ik zeker weet dat dit gaat passen, het is idd niet mooi en ook niet precies zoals het zou moeten.
Is toch niet zo moeilijk om gewoon de pagina op te slaan ($_SERVER['PHP_SELF'] bijvoorbeeld). Dan heb je je unieke page :P Is stuk makkelijker dan 100 (!!!) kolommen voor alle pagina's..

Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

Probeer eens de combinatie:
INSERT IGNORE INTO ip VALUES (....)
UPDATE ip SET hits = hits+1

die regelt alles wat je wilt volgens mij, en scheelt een hoop code en overhead.

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

Verwijderd

djluc schreef op 17 November 2002 @ 15:43:
Sorry, ik was veregten te vermelden dat ie ut dus niet doet. Ik denk dat de fout in het bovenste rijtje varablen zit omdat de eerste if statement niet goed word uitgevoer.
Wat doet ie (?) dus niet? Hij geeft geen output? Hij kijkt niet welk veld leeg is?? Hij runt uberhaupt niet?

Trouwens zoals CyberSnooP al zei: Op regel 13 mist een $.....
PHP:
1
sql="UPDATE ip SET datum='$nu', hits=hits+1, page$i='$pagina' WHERE ip='$ip'";

...moet zijn:
PHP:
1
$sql="UPDATE ip SET datum='$nu', hits=hits+1, page$i='$pagina' WHERE ip='$ip'";
Pagina: 1