2009-10-17 8 views
0

Ok Je suis nouveau sur php et mysql J'ai essayé de construire un compteur de pages web, mais mon compteur de pages ne se met pas à jour correctement et il reçoit les avertissements suivants listés ci-dessous.Problème avec PHP et MySql hitcounter?

Warning: mysqli_query() expects at least 2 parameters, 1 given in 
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in 

Voici le code PHP ci-dessous.

<?php 

$page = $_SERVER['SCRIPT_FILENAME']; 

// Query member data from the database and ready it for display 
$mysqli = new mysqli("localhost", "root", "", "sitename"); 
$dbc = mysqli_query($mysqli,"SELECT id page FROM mysql_counter_logs WHERE page = '$page'"); 

if (mysqli_num_rows($dbc) == 0) { 
    $mysqli = new mysqli("localhost", "root", "", "sitename"); 
    $dbc = mysqli_query($mysqli,"INSERT INTO mysql_counter_logs (page) VALUES ('$page')"); 
    mysqli_query($dbc); 
} elseif (mysqli_num_rows($dbc) == 1) { 
    $mysqli = new mysqli("localhost", "root", "", "sitename"); 
    $dbc = mysqli_query($mysqli,"UPDATE mysql_counter_logs SET hits = hits + 1 WHERE page = '$page'"); 
    mysqli_query($dbc); 
} 

//Retreives the current count 
$count = mysqli_fetch_row(mysqli_query($mysqli,"SELECT hits FROM mysql_counter_logs")); 

if (!$dbc) { 
    // There was an error...do something about it here... 
    print mysqli_error(); 
} 


//Displays the count on your site 
print "$count[0]"; 

?> 

Répondre

2

Un extrait de votre code:

$mysqli = new mysqli("localhost", "root", "", "sitename"); 
$dbc = mysqli_query($mysqli,"INSERT INTO mysql_counter_logs (page) VALUES ('$page')"); 
mysqli_query($dbc); 

Tout d'abord, selon le manuel de mysqli_query, lorsqu'il est utilisé en fonction:

mixed mysqli_query (mysqli $link , string $query [, int $resultmode ]) 

Ce qui signifie que vous devez passer votre variable $mysqli en tant que premier paramètre et votre requête en tant que deuxième paramètre. Qu'est-ce que je ne comprends pas pourquoi vous utilisez mysqli_query de cette façon sur la troisième ligne que j'ai copié-collé, alors que vous l'utilisez correctement dans les autres parties de votre code? Voulez-vous vraiment utiliser cette fonction ici?


De plus, sachant sur quelles lignes vous obtenez ces messages d'erreur peuvent aider ;-)
Vérifiez que vous ne faites rien d'autre « mal » là - comme "mysqli_query() attend au moins 2 paramètres , 1 donné "


En y repensant: mysqli_query renverra false booléen s'il y a une erreur.

Dans ce cas, vous ne devez pas appeler mysqli_num_rows sur la valeur de retour de mysqli_query, car ce n'est pas un mysqli_result valide - d'où le deuxième message d'erreur.

Vous vérifiez $dbc à la fin de votre script, mais il pourrait être intéressant de le vérifier aussi un biit plus tôt - en fait, après chaque appel à mysql_query, je dirais.


En outre, comme sidenote: vous ne avez probablement pas besoin d'instancier la classe mysqli que plusieurs fois: juste instancier une fois, puis utilisez la variable $mysqli pour y reste de votre script. Pour des raisons de sécurité, et pour éviter tout problème, vous pouvez également utiliser mysqli_real_escape_string sur la variable $page, avant de l'injecter dans les requêtes.

Oh, et, d'ailleurs: vous pourriez être intéressé par le INSERT ... ON DUPLICATE KEY UPDATE Syntax que MySQL permet d'utiliser ;-)
(Eh bien, c'est si page est la clé primaire de votre table, au moins ...)

+0

lignes 12 et 18 – new

+0

J'ai modifié ma réponse plusieurs fois; J'espère que cela t'aides ! –