[PHP/MYSQL] een array met bezoekersroutes vullen.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
ik heb het volgende functietje geschreven:
PHP:
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
<?PHP 
function pageroute(){ 
global $siteid, $routes, $myroute; 
   /* Alle hits bezoekers ophalen uit de db*/ 
   $sql="
SELECT page, user, volgnr, datum 
FROM hits 
WHERE site=1 
ORDER BY user, volgnr";  
           $result = mysql_query($sql)||die($sql.'->'.mysql_error());  
                 
  while ($row = mysql_fetch_object($result)){ 
    /* een array vullen met de gegevens van deze bezoeker */ 
       $myroute[$row->user][]=$row->page; 
    } 

  foreach ($myroute AS $usernr){ 
   
    foreach ($myroute[$usernr] AS $page){ 
     
    $nivo=1; 
        if(!in_array($myroute[$usernr][$page], $routes[$nivo])){ 
            $routes[$nivo][]=$page; 
        } 
        $nivo++; 
    }     
  }  
   
  /* een beetje testuitvoer */ 
  print_r($routes); 
} 
?> 

In de database staan steeds per rij de user, pagina en het volgnr. Het gebruik van die en global is nu maar even om te testen, dat gaat er straks allemaal uit.

Ik wil de routes van alle bezoekers gaan combineren, ik wil dus bv weten:
PHP:
1
2
3
4
5
6
home 
|______pagina allo 1
|            |____ pagina allo 2 
|            |____ pagina allo 3 
|______pagina allo 2 
             |____ pagina allo 3

Het is dus niet mogelijk om gewoon per volgnr alle pagina's te nemen omdat de 2 bezoeken aan allo 3 beide in een ander pad thuis horen.

ik krijg de volgende errors, de 2de komt denk ik door de eerste:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/vhosts/djluc.nl/httpdocs/show.php on line 629

Warning: Invalid argument supplied for foreach() in /var/www/vhosts/djluc.nl/httpdocs/show.php on line 634

Als ik het query gewoon uitvoor in myadmin werkt het wel.

De site waar ik de statistieken op aan het testen ben is www.djluc.nl
De pagina waar je de statistieken kunt bekijken is: www.djluc.nl/show.php gebruikersnaam en wachtwoord: test/test

[ Voor 26% gewijzigd door djluc op 23-03-2003 17:16 ]


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 13:04
De eerste foutmelding wil zeggen dat er ofwel niet connected is, ofwel een foute query staat. De tweede foutmelding komt idd door de eerste: omdat er geen gegevens zijn is er geen array gedefinieerd en dus gaat foreach de fout in. Verdient trouwens de voorkeur even te checken of het wel een array is (if is_array($var)) ...).

Gezien het feit dat in PHPMyAdmin de query wel werkt, lijkt mij dat de db niet connected is.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

$result = mysql_query($sql)||die($sql.'->'.mysql_error());

Doet, zet in de variable 'result' de waarde van mysql_query() ge-orred met de waarde van die(). Dit komt doordat de precedence van de = lager is dan die van de ||...
Zie ook: http://www.php.net/manual/en/language.operators.php

Daardoor wordt dus eerst de || uitgevoerd en dan de =.
Dus het is eigenlijk:
$result = (mysql_query($sql)||die($sql.'->'.mysql_error()));
Waardoor er in $result een boolean komt (check evt met var_dump($result) ), met de waarde true als de query lukt en false als ie niet lukt (hoewel het script dan al dood is...).

Probeer het eens met de 'or' operator, die heeft een lagere precedence dan de =, dus dan wordt het:
$result = mysql_query($sql) or die($sql.'->'.mysql_error());
te lezen als:
($result = mysql_query($sql)) or die($sql.'->'.mysql_error());
Als je er haakjes bij zou zetten om de boel te verduidelijken.
Hier komt de uitkomst van mysql_query in $result en als dat false geworden is, DAN wordt de die uitgevoerd.

Ik weet niet zeker of dit zo is, maar test het maar es :)

[ Voor 21% gewijzigd door ACM op 23-03-2003 21:06 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Je had inderdaad gelijk, dat was inderdaad de reden.

Ik krijg nu de volgende error:
Warning: Illegal offset type in /var/www/vhosts/djluc.nl/httpdocs/show.php on line 636
Warning: Invalid argument supplied for foreach() in /var/www/vhosts/djluc.nl/httpdocs/show.php on line 636

Dat is deze regel:
PHP:
1
 foreach ($myroute[$usernr] AS $page){

Deze regel is eigenlijk hetzelfde als de loop die er boven staat alleen wordt hier een array in een array gebruikt, mag dat niet?

edit:
volgens mij moet ik:
PHP:
1
 foreach ($usernr AS $page){
gebruiken, ik ga het ff proberen.

[ Voor 10% gewijzigd door djluc op 26-03-2003 10:52 ]