Problème avec PHP MySQL

Eléphanteau du PHP | 10 Messages

09 avr. 2024, 08:52

- J'ai un problème avec mon compteur de visite. Suite a la mise à jour de MariaDB.
- Pouvez-vous me dire ce qui cloche dans le code.

je suis novice dans php et null en MySQL, mon code est celui du dessus.
Appartement ma variable $donnees['nbre_entrees'] est toujours nul !
J'ai modifié tous les mysql en mysqli, ce qui a supprimé l'ERREUR 500 sur la page, mais ne résous qu'une petite partie du problème.

Expliquez-moi avec des exemple.
je patauge vraiment... J'ai vraiment besoin de vous. Mille Mercis à vous !

Code : Tout sélectionner

$servername = "localhost"; $database = "*************"; $table = "*************"; $username = "*************"; $password = "*************"; mysqli_connect($servername, $username, $password); mysqli_select_db($database); $retour = mysqli_query('SELECT COUNT(*) AS nbre_entrees FROM $table'); $donnees = mysqli_fetch_array($retour); $timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes $retour = mysqli_query('SELECT COUNT(*) AS nbre_entrees FROM $table WHERE timestamp>\'' . $timestamp_5min . '\''); $donnees = mysqli_fetch_array($retour); if ($donnees['nbre_entrees'] == 1) { // respect du singulier echo '<strong>' . $donnees['nbre_entrees'] . '</strong> visiteur connecté<br />'; } else { echo '<strong>' . $donnees['nbre_entrees'] . '</strong> visiteurs connectés<br />'; } $jour = date('d'); $mois = date('m'); $annee = date('Y'); $aujourd_hui = mktime(0, 0, 0, $mois, $jour, $annee); $retour = mysqli_query('SELECT COUNT(*) AS nbre_entrees FROM $table WHERE timestamp>\'' . $aujourd_hui . '\''); $donnees = mysqli_fetch_array($retour); if ($donnees['nbre_entrees'] == 1) { // respect du singulier echo '<strong>' . $donnees['nbre_entrees'] . '</strong> visiteur aujourd\'hui<br />'; } else { echo '<strong>' . $donnees['nbre_entrees'] . '</strong> visiteurs aujourd\'hui<br />'; } $retour = mysqli_query('SELECT COUNT(*) AS nbre_entrees FROM $table'); $donnees = mysqli_fetch_array($retour); echo '<strong>' . $donnees['nbre_entrees'] . '</strong> visites au total<br />'; echo $donnees['nbre_entrees'];
Modifié en dernier par serge_felix le 09 avr. 2024, 10:44, modifié 1 fois.

Avatar du membre
Mammouth du PHP | 1564 Messages

09 avr. 2024, 10:35

Pour commencer, vérifie ce que $donnees renvoi :
$servername = "localhost";
$database = "*************";
$table = "*************";
$username = "*************";
$password = "*************";
mysqli_connect($servername, $username, $password);
mysqli_select_db($database);
$retour = mysqli_query('SELECT COUNT(*) AS nbre_entrees FROM $table');
$donnees = mysqli_fetch_array($retour);

var_dump($donnees); //vérifie qu'ici $donnees affiche bien les résultats de ta BDD

//n'affiche rien d'autres ici pour le moment
On continuera ensuite le débogage.

Je proposes également une solution PHP gratuite sans base de données pour compter les visites.

Eléphanteau du PHP | 10 Messages

09 avr. 2024, 10:51

Bonjour,
Réponseest : /volume1/web/t/index.php:25: NULL
Excuse je suis disesclique !
Modifié en dernier par serge_felix le 09 avr. 2024, 11:07, modifié 1 fois.

Avatar du membre
Mammouth du PHP | 1564 Messages

09 avr. 2024, 11:01

$table contient des données ?

Eléphanteau du PHP | 10 Messages

09 avr. 2024, 11:09

Oui, environ 6933 ligne en deux colonnes.
Modifié en dernier par serge_felix le 09 avr. 2024, 11:36, modifié 1 fois.

Avatar du membre
Mammouth du PHP | 1564 Messages

09 avr. 2024, 11:13

Que retourne ceci ?
$servername = "localhost";
$database = "*************";
$table = "*************";
$username = "*************";
$password = "*************";
var_dump(mysqli_connect($servername, $username, $password));

Eléphanteau du PHP | 10 Messages

09 avr. 2024, 11:39

Réponseest :
/volume1/web/t/index.php:20: class mysqli#1 (19) { public $affected_rows => int(0) public $client_info => string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: 7cc7cc96e675f6d72e5cf0f267f48e167c2abb23 $" public $client_version => int(50012) public $connect_errno => int(0) public $connect_error => NULL public $errno => int(0) public $error => string(0) "" public $error_list => array(0) { } public $field_count => int(0) public $host_info => string(25) "Localhost via UNIX socket" public $info => NULL public $insert_id => int(0) public $server_info => string(14) "5.5.68-MariaDB" public $server_version => int(50568) public $stat => string(137) "Uptime: 268913 Threads: 1 Questions: 29882 Slow queries: 0 Opens: 498 Flush tables: 2 Open tables: 4 Queries per second avg: 0.111" public $sqlstate => string(5) "00000" public $protocol_version => int(10) public $thread_id => int(8114) public $warning_count => int(0) }
Modifié en dernier par serge_felix le 09 avr. 2024, 12:02, modifié 1 fois.

Eléphanteau du PHP | 10 Messages

09 avr. 2024, 11:48

Avec cette routine ge peu liste la base :

Code : Tout sélectionner

<h1>//------------LIRE LA TABLE-------------------------</h1> <?php $mysqli = new mysqli($servername, $username, $password, $database); $mysqli->set_charset("utf8"); $requete = "SELECT * FROM " . $table; $resultat = $mysqli->query($requete); while ($ligne = $resultat->fetch_assoc()) { echo $ligne['ip'] . ' ' . $ligne['timestamp'] . '<br>'; } $mysqli->close(); ?>
J'ai l'impression que le format de lecture des donne n'ai pas bon

Avatar du membre
Mammouth du PHP | 1609 Messages

09 avr. 2024, 14:10

Salut, avec des " autour de la requête à la place des ' ça devrait aller mieux !

Les variables ne sont pas interprétées si la chaine est entourée de simple quotes.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 10 Messages

09 avr. 2024, 14:33

Voici ce que j'ai fait, les valeur ne s'affiche toujour pas

Code : Tout sélectionner

mysqli_connect($servername, $username, $password); mysqli_select_db($database); $retour = mysqli_query("SELECT COUNT(*) AS nbre_entrees FROM $table"); $donnees = mysqli_fetch_array($retour); $timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes $retour = mysqli_query("SELECT COUNT(*) AS nbre_entrees FROM $table WHERE timestamp > \'" . $timestamp_5min . "\'"); $donnees = mysqli_fetch_array($retour); if ($donnees['nbre_entrees'] == 1) { // respect du singulier echo "<strong>" . $donnees['nbre_entrees'] . "</strong> visiteur connecté <br/>"; } else { echo "<strong>" . $donnees['nbre_entrees'] . "</strong> visiteurs connectés <br/"; } $jour = date('d'); $mois = date('m'); $annee = date('Y'); $aujourd_hui = mktime(0, 0, 0, $mois, $jour, $annee); $retour = mysqli_query("SELECT COUNT(*) AS nbre_entrees FROM $table WHERE timestamp > \'" . $aujourd_hui . "\'"); $donnees = mysqli_fetch_array($retour); if ($donnees[nbre_entrees] == 1) { // respect du singulier echo "<strong>" . $donnees['nbre_entrees'] . "</strong> visiteur aujourd'hui <br/>"; } else { echo "<strong>" . $donnees['nbre_entrees'] . "</strong> visiteurs aujourd'hui <br/>"; } $retour = mysqli_query("SELECT COUNT(*) AS nbre_entrees FROM $table"); $donnees = mysqli_fetch_array($retour); echo "<strong>" . $donnees['nbre_entrees'] . "</strong> visites au total <br/>"; echo $donnees['nbre_entrees'];

Eléphanteau du PHP | 10 Messages

19 avr. 2024, 11:24

Pouvez-vous me dire pourquoi les variable $retour et $donnees reste vide ?
$retour = mysqli_query("SELECT COUNT(*) AS nbre_entrees FROM " . $table);
$donnees = mysqli_fetch_array($retour);
Merci pour vos reponse !

Avatar du membre
Mammouth du PHP | 1564 Messages

19 avr. 2024, 12:28

Est ce que $table est définit ?

Est ce que faire la requête suivante dans phpMyAdmin retourne un résultat ?

Code : Tout sélectionner

SELECT COUNT(*) AS nbre_entrees FROM ta_table

Eléphanteau du PHP | 10 Messages

19 avr. 2024, 13:01

Remonse des requête est NULL
Sur le serveur, je suis en php7 et je pense de ma programmation contient du php5 donc une incompatibilit.
var_dump($retour);
/volume1/web/t/index-8.php:26: NULL
var_dump($donnees);
/volume1/web/t/index-8.php:28: NULL

Avatar du membre
Mammouth du PHP | 1564 Messages

19 avr. 2024, 13:26

As tu essayé dans phpMyAdmin (ou autre SGBD) ?

Eléphanteau du PHP | 10 Messages

19 avr. 2024, 13:39

Je suis nulle et j'utilise se que je suppose connaître. Mes mon serveur(NAS synology) ses mise à jours... Voilà le résultat, je me retrouve complètement dépassé.