+1 is niet +1 maar +5 ???

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Guido S

Guido S

12/07/2009 11:40:00
Quote Anchor link
Ik wil bij mijn pageviews 1 optellen, het hele vreemde is dat hij er 5 bij optelt.
Hier is de code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$mysqli
->query("UPDATE users_sessions
SET datum_last_timestamp='"
.time()."',
session_views=session_views+1
WHERE user_id='"
.$user_id."' AND session_id='".$_SESSION['session_id']."'
LIMIT 1"
);
?>

De session_views=sessoin_views+1 werkt dus niet goed, heb alleen geen idee waarom. Ergens anders in een script gaat het namelijk wel goed.
Heb ik te maken met een vreemde mysqli bug?
Gewijzigd op 01/01/1970 01:00:00 door Guido S
 
PHP hulp

PHP hulp

06/05/2024 13:55:20
 
Tikkes C

Tikkes C

12/07/2009 11:43:00
Quote Anchor link
kijk eens in je mysqli class
 
Guido S

Guido S

12/07/2009 11:48:00
Quote Anchor link
Hoezo?
Ik kan niks vreemds ontdekken, dat is gewoon:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$mysqli
= new mysqli("localhost", het gebruikelijke)
    or die("Kan niet verbinden: ".mysqli_connect_error());
?>

Deze code staat in de bottom.php, alles wat daar niet instaat word wel goed uitgevoerd. Zover ik getest heb.

Edit: Alles wat ik op wil tellen word met x5 gedaan.
Gewijzigd op 01/01/1970 01:00:00 door Guido S
 
Midas

Midas

12/07/2009 14:15:00
Quote Anchor link
Probeer eens om je query direct in phpMyAdmin uit te voeren, dan weet je of het aan de query ligt.
 
- Mark -

- Mark -

12/07/2009 14:24:00
Quote Anchor link
Is session_views van het type int in je database?
 
Guido S

Guido S

12/07/2009 14:30:00
Quote Anchor link
session_views is type int :)

@Midas
Dat ga ik even proberen.

Edit: In phpmyadmin werkt het wel gewoon :S
Gewijzigd op 01/01/1970 01:00:00 door Guido S
 
Midas

Midas

12/07/2009 14:38:00
Quote Anchor link
Het lijkt me niet dat je te maken hebt met een bug, want het optellen van een waarde bij een bestaande waarde is een redelijk vaak gebruikte actie, dus ik denk dat je dat kunt uitsluiten..

Misschien omslachtig, maar wat ik vaak doe bij dit soort dingen is het stukje met de query helemaal isoleren van de andere code. Ik maak dus een soort testcase. Alleen een bestandje met: verbinden, query en dan kijken wat het resultaat is. Misschien een idee..
 
Guido S

Guido S

12/07/2009 14:48:00
Quote Anchor link
Heb wat zitten testen, en het lijkt dat mijn bottom.php en top.php enzo 5 keer word uitgevoerd. Want zodra ik de code in bijvoorbeeld nieuws.php zet werkt het wel gewoon.

Nieuws zit er zo uit (globaal):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
require("framework/core.php"); // 5x uitgevoerd session_views

require("layout/top.php"); // 5x uitgevoerd session_views

// hier nieuws code, 1x uitgevoerd session_views


require("layout/bottom.php"); // Hier staat de session_views update in. 5x uitgevoerd
?>

Ik heb de query zitten testen op vier mogelijke plekken zoals hier boven aangegeven wordt de session_views, in de core, top en bottom 5x uitgevoert. En in het bestand nieuws maar 1x.
(normaal gesproken staat hij dus in bottom.php)


Edit: Toen ik de top.php weg haalde werkten het opeens weg. Dus ben ik gaan testen wat het probleem veroorzaakden in de top.php. Wat bleek, een javscript document veroorzaakten het probleem.

Iemand enig idee hoe dat kan? :P
Dit is de javascript code die het probleem veroorzaakten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
if (document.images){
  pic1 = new Image(30,30);
  pic1.src = "images/loader_white.gif";

  pic2 = new Image(25,75);
  pic2.src = "images/rater/rating_star.gif";
  
  pic4 = new Image(16,13);
  pic4.src = "images/rater/rating_tick.gif";
  
  pic5 = new Image(14,14);
  pic5.src = "images/rater/rating_warning.gif";
}

// AJAX ----------------------------------------

var xmlHttp

function GetXmlHttpObject(){

var xmlHttp = null;

    try {
      // Firefox, Opera 8.0+, Safari
      xmlHttp = new XMLHttpRequest();
      }
    catch (e) {
      // Internet Explorer
      try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
      catch (e){
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
      }
      
    return xmlHttp;

}

// Calculate the rating
function rate(rating,id,show5,showPerc,showVotes){

    xmlHttp = GetXmlHttpObject()
    
    if(xmlHttp == null){
        alert ("Your browser does not support AJAX!");
        return;
      }

    xmlHttp.onreadystatechange = function(){
        
    var loader = document.getElementById('loading_'+id);
    var uldiv = document.getElementById('ul_'+id);
    
        if (xmlHttp.readyState == 4){
            
            //loader.style.display = 'none';
            var res = xmlHttp.responseText;
            
            //alert(res);
            
            if(res == 'already_voted'){
                
                loader.style.display = 'block';
                loader.innerHTML = '<div class="voted_twice">Je hebt al gestemd!</div>';
                
            } else {
                
                loader.style.display = 'block';
                loader.innerHTML = '<div class="voted">Bedankt voor het stemmen!</div>';

                if(show5 == true){
                    var out = document.getElementById('outOfFive_'+id);
                    var calculate = res/20;
                    out.innerHTML = Math.round(calculate*100)/100; // 3.47;
                    //out.innerHTML = Math.round((calculate*2),0)/2; // 3.5;
                }
                
                if(showPerc == true){
                    var perc = document.getElementById('percentage_'+id);
                    //var newPerc = Math.round(Math.ceil(res/5))*5;
                    var newPerc = res;
                    perc.innerHTML = newPerc+'%';
                }
                
                else if(showPerc == false){
                    var newPerc = res;
                }
                
                if(showVotes == true){
                    var votediv = document.getElementById('showvotes_'+id).firstChild.nodeValue;
                    var splitted = votediv.split(' ');
                    var newval = parseInt(splitted[0]) + 1;
                    if(newval == 1){
                        document.getElementById('showvotes_'+id).innerHTML = newval+' Stem';
                    } else {
                        document.getElementById('showvotes_'+id).innerHTML = newval+' Stemmen';
                    }
                }
                
                var ulRater = document.getElementById('rater_'+id);
                ulRater.className = 'star-rating';
                
                if(navigator.appName == 'Microsoft Internet Explorer'){
                    uldiv.style.setAttribute('width',newPerc+'%'); // IE
                 } else {
                    uldiv.setAttribute('style','width:'+newPerc+'%'); // Everyone else
                 }
                
            }
        } else {
            loader.innerHTML = '<img src="images/loader_white.gif" alt="loading" />';    
        }
    
    }
    var url = "includes/rating_process.php";
    var params = "id="+id+"&rating="+rating;
    xmlHttp.open("POST",url,true);
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlHttp.setRequestHeader("Content-length", params.length);
    xmlHttp.setRequestHeader("Connection", "close");
    xmlHttp.send(params);

}
Gewijzigd op 01/01/1970 01:00:00 door Guido S
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.