Bonjour,
Depuis que j'ai changé les commandes PHP 5 pour les rendrent compatible PHP 7, ça ne fonctionne plus aussi bien qu'avant et je me casse la tête à comprendre pourquoi...
Le but final, c'est pour afficher des messages en boucle sur un écran dédié.
Tous fonctionne bien, sauf quand c'est différente condition sont réunies :
Je met hors ligne ou que je supprime le dernier messages de la liste et qu'il soit affiché à ce même moment.
et n'affiche pas le message suivant, par contre j'ai le droit à un joli petit mot d'amour.
Toute aide et la bien venu, merciFatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 in /var/www/html/ecraninfo/index.php:83 Stack trace: #0 /var/www/html/ecraninfo/index.php(83): PDO->query(' select * from ...') #1 {main} thrown in /var/www/html/ecraninfo/index.php on line 83
le fichier original en PHP5
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 //------------------------------------------------------------------------------------------------------------ // lire le nombre d'éléments contenu dans la base //------------------------------------------------------------------------------------------------------------ $rsCount = mysql_query("select count(*) as nbElement from contenu where id AND online = 1 AND permanent = 1"); // Je determine Pour permanent =1 mysql_select_db($database_conMsg, $conMsg); $row_rsCount = mysql_fetch_assoc($rsCount); $query_nb_id = $pdo_conMsg->query('SELECT count(*) as nb_id FROM contenu where id AND online = 1 AND permanent = 2 AND date_debut <= now() AND now() <= date_fin'); // Je determine Pour permanent =2 $fetch_nb_id = $query_nb_id->fetch(); // Conexion a la database mysql_select_db($database_conMsg, $conMsg); // On récupère tout le contenu de la table params //Je fait une requette dans la table params $query_mysql_Planification = mysql_query("SELECT * FROM params WHERE p_key = 'mysql_Planification'"); // je Récupére la reponse $fetch_mysql_Planification = mysql_fetch_assoc($query_mysql_Planification); //echo $fetch_mysql_Planification['Mysql_nb_stocke']; //j'affiche le contenu avec la commande ci-dessous //echo $row_rsCount['nbElement']; echo ' ET '; echo $fetch_nb_id['nb_id'] ; // on vérifie le nombre d'éléments : // si c'est = 0 alors on affiche un message (l'heure par exemple) et puis en boucle // si c'est > 0 alors on affiche un élément selon le numero d'ordre passé en paramètre et on boucle selon la durée // les differents état de ONLINE et permanent == 2 $online0 = $row_rsCount['nbElement'] == 0 ; $permanent20 = $fetch_nb_id['nb_id'] == 0 ; $online1 = $row_rsCount['nbElement'] >= 1 ; //$permanent21 = $fetch_nb_id['nb_id'] >= 1 ; if ($online0 == $permanent20 AND $online1 == 0) { include ('horloge.php'); die(); } else { // maintenant que le nombre d'éléments est > 0 alors on traite selon le rang // si le numéro est passé en paramètre, on fait une vérification sur ce numéro // ds tous les cas de figure, on vérifie si le message doit être affiché en permanence (champs permanent = 1) // ou alors, si permanent = 2 : donc il faut que la date soit comprise entre date de debut et date de fin // notre requête de recherche doit inclure ce critère pour trouver le prochaine no de rang : donc le prochain message $sql = " and ((permanent = 1) or (permanent = 2 and date_debut <= now() and now() <= date_fin)) "; if (isset($_GET['rang']) && ($_GET['rang'] != "")) { // on vérifie si le numéro n'est pas le plus petit, car dans ce cas, il faut passer au plus grand (boucler) $rsMinMax = mysql_query("select min(rang) as mini, max(rang) as maxi from contenu where online = 1" . $sql); $row_rsMinMax = mysql_fetch_assoc($rsMinMax); // si on est au plus petit on passe comme paramètre le plus grand if ($_GET['rang'] == $row_rsMinMax['maxi']) { $param = $row_rsMinMax['mini']; } // sinon on passe le suivant dans l'ordre croissant. Pour mettre en décroissant changer le symbole ">" en "<" et rajouter "DESC" entre rang et limit 1 else { $query = "select rang from contenu where online = 1 " . $sql . " and rang > " . $_GET['rang'] . " order by rang limit 1"; $rsNext = mysql_query($query); $row_rsNext = mysql_fetch_assoc($rsNext); $param = $row_rsNext['rang']; } mysql_free_result($rsMinMax); } // si le rang n'est pas passé en paramètre on affiche l'élément ayant le rang le + grand else { $rsMaxi = mysql_query("select max(rang) as maxi from contenu where online = 1 " . $sql); $row_rsMaxi = mysql_fetch_assoc($rsMaxi); $param = $row_rsMaxi['maxi']; mysql_free_result($rsMaxi); } // maintenant que le paramètre est déterminé on exécute la requête de selection $sql = ""; $sql .= " select * from contenu where rang = " . $param; // online = 1 and $rsElement = mysql_query($sql); $row_rsElement = mysql_fetch_assoc($rsElement); }
Et le fichier modifier en PHP7
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 //------------------------------------------------------------------------------------------------------------ // lire le nombre d'éléments contenu dans la base //------------------------------------------------------------------------------------------------------------ $rsCount = $pdo_conMsg->query("select count(*) as nbElement from contenu where id AND online = 1 AND permanent = 1"); // Je determine Pour permanent =1 $row_rsCount = $rsCount->fetch(PDO::FETCH_ASSOC); $query_nb_id = $pdo_conMsg->query('SELECT count(*) as nb_id FROM contenu where id AND online = 1 AND permanent = 2 AND date_debut <= now() AND now() <= date_fin'); // Je determine Pour permanent =2 $fetch_nb_id = $query_nb_id->fetch(); // On récupère tout le contenu de la table params //Je fait une requette dans la table params $query_mysql_Planification = $pdo_conMsg->query("SELECT * FROM params WHERE p_key = 'mysql_Planification'"); // je Récupére la reponse // $fetch_mysql_Planification = mysql_fetch_assoc($query_mysql_Planification); $fetch_mysql_Planification = $query_mysql_Planification->fetch(PDO::FETCH_ASSOC); //echo $fetch_mysql_Planification['Mysql_nb_stocke']; //j'affiche le contenu avec la commande ci-dessous //echo $row_rsCount['nbElement']; echo ' ET '; echo $fetch_nb_id['nb_id'] ; // on vérifie le nombre d'éléments : // si c'est = 0 alors on affiche un message (l'heure par exemple) et puis en boucle // si c'est > 0 alors on affiche un élément selon le numero d'ordre passé en paramètre et on boucle selon la durée // les differents état de ONLINE et permanent == 2 $online0 = $row_rsCount['nbElement'] == 0 ; $permanent20 = $fetch_nb_id['nb_id'] == 0 ; $online1 = $row_rsCount['nbElement'] >= 1 ; //$permanent21 = $fetch_nb_id['nb_id'] >= 1 ; if ($online0 == $permanent20 AND $online1 == 0) { include ('horloge.php'); die(); } else { // maintenant que le nombre d'éléments est > 0 alors on traite selon le rang // si le numéro est passé en paramètre, on fait une vérification sur ce numéro // ds tous les cas de figure, on vérifie si le message doit être affiché en permanence (champs permanent = 1) // ou alors, si permanent = 2 : donc il faut que la date soit comprise entre date de debut et date de fin // notre requête de recherche doit inclure ce critère pour trouver le prochaine no de rang : donc le prochain message $sql = " and ((permanent = 1) or (permanent = 2 and date_debut <= now() and now() <= date_fin)) "; if (isset($_GET['rang']) && ($_GET['rang'] != "")) { // on vérifie si le numéro n'est pas le plus petit, car dans ce cas, il faut passer au plus grand (boucler) $rsMinMax = $pdo_conMsg->query("select min(rang) as mini, max(rang) as maxi from contenu where online = 1" . $sql); $row_rsMinMax = $rsMinMax->fetch(PDO::FETCH_ASSOC); // si on est au plus petit on passe comme paramètre le plus grand if ($_GET['rang'] == $row_rsMinMax['maxi']) { $param = $row_rsMinMax['mini']; } // sinon on passe le suivant dans l'ordre croissant. Pour mettre en décroissant changer le symbole ">" en "<" et rajouter "DESC" entre rang et limit 1 else { $query = "select rang from contenu where online = 1 " . $sql . " and rang > " . $_GET['rang'] . " order by rang limit 1"; $rsNext = $pdo_conMsg->query($query); $row_rsNext = $rsNext->fetch(PDO::FETCH_ASSOC); $param = $row_rsNext['rang']; } ($rsMinMax)->closeCursor();; } // si le rang n'est pas passé en paramètre on affiche l'élément ayant le rang le + grand else { $rsMaxi = $pdo_conMsg->query("select max(rang) as maxi from contenu where online = 1 " . $sql); $row_rsMaxi = $rsMaxi->fetch(PDO::FETCH_ASSOC); $param = $row_rsMaxi['maxi']; ($rsMaxi)->closeCursor();; } // maintenant que le paramètre est déterminé on exécute la requête de selection $sql = ""; $sql .= " select * from contenu where rang = " . $param; // online = 1 and $rsElement = $pdo_conMsg->query($sql) $row_rsElement = $rsElement->fetch(PDO::FETCH_ASSOC); }
Partager