Problème inattendu codage php d'une page avec requête mysql

Résolu/Fermé
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 - 6 févr. 2017 à 14:44
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 - 7 mars 2017 à 13:27
Bonjour,

Le problème rencontré est bizarre et il ne concerne MySql qu'indirectement.
Nous avons un site en php 7.0 qui utilise maintenant Mysql mais seulement dans sa partie membres et 1 page dans la partie publique.

Dans cette page, il y a des include (de type include 'blabla.txt';), qui peuvent se trouver en dehors de ou à l'intérieur du code php comprenant la requête MySql
Et un sondage.
Tous ces include et ce sondage se trouvent aussi dans les pages 'normales' et fonctionnent nickel en PHP7 (donc sans Mysql) depuis longtemps.

L'introduction de la page unique crée des messages d'erreur sur cette page seulement (les autres pages s'affichent correctement pour les include et le sondage).

Voici les messages d'erreur:

1ère erreur:
Strict Standards: date(): We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in /blabla/list-names-used-test.php on line 57

La ligne concernée se situe à côté d'un include dans le code PHP de la requête Mysql qui contient le code suivant (seulement du texte):
<li class="alerts">294-  blabla [26-January-2017]  <a href="http://www.blabla.org/new.php" rel="nofollow noopener noreferrer" target="_blank" "target=_blank"> : Aqua</a><br></li>


2ème erreur:
Notice: Undefined index: go in /blabla/phpolls-0.inc on line 25

La ligne concernée dans phpolls-0.inc est:

if (!isset($_POST['go']) && $_GET['go'] != 1)

3ème erreur:
Strict Standards: date(): We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in /blabla/aaz-foot-legal.txt on line 23
Page update: 5 February 2017

La ligne concernée dans aaz-foot-legal.txt (dans un include hors de la requête mysql) est:
$date = date("j F Y", getlastmod());

Merci de votre aide.



A voir également:

10 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
6 févr. 2017 à 15:35
Bonjour,

Je ne vois aucun lien entre tes messages (et le code que tu nous montres qui n'est que du php...) et une quelconque requête mysql...

Pour les UNDEFINED .. : https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index

Pour ce qui est de la date :
=> https://www.php.net/manual/fr/migration54.incompatible.php
Regarde ici pour corriger :
https://www.php.net/manual/fr/function.date-default-timezone-set.php
1
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
6 févr. 2017 à 20:00
bonsoir,
à propos de la seconde erreur, il me semble que ce test est très bizarre, qu'essaies-tu de faire exactement? il me semble qu'un des deux tests suivants serait plus logique. qu'en penses-tu?
if (isset($_POST['go']) && $_POST['go'] != 1)

ou
if (isset($_GET['go']) && $_GET['go'] != 1) 
1
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 5
6 févr. 2017 à 19:19
Bonjour,

Merci de la réaction rapide !
Si tu ne comprends pas c’est que je dois clarifier.
Le site est banalement construit selon la structure classique pour chaque page en 5 parties, menuhaut, menubas (footer), menugauche, menudroit, centre.
Le site a été actualisé en PHP 7.0 puis testé chez l’hébergeur, puis mis en ligne avec la qualification php 7.0 chez l’hébergeur.
Aucun souci. Toutes les pages s’affichent sans aucun message d’erreur, tous les include marchent, le sondage marche.
Maintenant une des pages pour son center a été transformée :
Au lieu de remplir les données avec du code html, on génère les données en faisant une requête à la BDD.
On met la page en ligne, la requête fonctionne (les données sont générées par la BDD), tous les include marchent sauf 2 dans les menus qui génèrent un message d’erreur et sauf le sondage.
(cf. les messages d’erreur php ci-dessus).
Je ne comprend pas pourquoi tout le site baigne et pour la seule page qui contient une requête Mysql (qui n’a rien à voir avec les 2 include ni avec le sondage) çà plante.
La requête est du type :
$requete = $connexion->prepare("SELECT Used_names, Correct_names, Current_trinom_name, Current_status FROM taxabase1 left outer join taxabase2 on (taxabase1.Rk_Hist = taxabase2.Rk_Hist) left outer join taxabase3 on (taxabase3.Rk_Hist = taxabase2.Rk_Hist) WHERE taxabase1.Rk_Hist and Used_names is not null and trim(Used_names) != '' ORDER BY Used_names, Correct_names");
	$requete->bindParam(':Rk_Hist', $Rk_Hist, PDO::PARAM_INT);

Donc aucune relation avec les 2 include fautifs et le sondage!
C’est plus compréhensible ?
Comme tu le penses c’est sans doute un souci PHP, mais si c’était le cas, pourquoi tout baigne dans les autres pages, tout le site étant en PHP 7.0???
J’espère qu’avec ces explications tu pourras me piloter de manière plus ciblée.
Merci d’avance
Seb
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
6 févr. 2017 à 19:37
Tu as tout ce qu'il faut dans les liens que je t'ai donné. ....

Maintenant pour avoir une aide plus "ciblee" il faut les messages d'erreur EXACTS et en INTÉGRALITÉ. ..ainsi que TOUT le code qui ha avec !!
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
6 févr. 2017 à 20:20
ne penses-tu pas plus efficace de simplement corriger tes erreurs, en utilisant les consignes communiquées par jordane45, au lieu d'expliquer que ces erreurs sont certainement provoquées par autre chose?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié par yg_be le 6/02/2017 à 20:12
à propos des premier et troisième avertissement, tu peux les éviter en ajoutant
date_default_timezone_set('Europe/Paris');
avant d'appeller des fonctions telles que
date()
.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 5
7 févr. 2017 à 13:01
Bonjour,

Et merci à tous les 2.

Je ne vais pas poursuivre et vous accaparer.

Juste 2 mots.

J'ai actualisé l'ancienne page (blabla.php) avec les données en hml (les mêmes que celles générées par MySql) dans le center comme avant et la page marche super bien.

Donc la seule différence entre l'ancienne et la nouvelle (blablatest.php) est la requête ou l'environnement MySql.

Jordane j'ai tout dit, seuls les blablas remplacent les adresses réelles.
Yg_be ce ne sont pas des avertissements mais des messages d'erreurs sur la nouvelle page quand elle est en ligne.

Il semblerait que le codage sans MySQL soit plus tolérant.

Bon je conserve l'ancienne page actualisée et je travaille sur vos pistes et je remplacerai éventuellement si je trouve.

A nouveau, merci à tous les 2!

Seb
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
7 févr. 2017 à 16:10
Seb,
Tu confonds le HTML (avec des données écrites en "statique" ) et le PHP qui permet d'interroger la BDD (pour avoir de l'affichage DYNAMIQUE).
Les erreurs dont tu nous fais part sont en rapport avec le PHP ( et non la base de données ou le langage SQL ).....

Tes soucis se situent bien dans le code PHP ...... mais bon... à toi de voir ....
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
7 févr. 2017 à 16:44
bonjour jordane45, je pense que sebas22 est persuadé que c'est la présence de la requête mysql qui provoque les trois messages d'erreur, comme si ces erreurs étaient tolérées en l’absence d'appel à mysql.
0
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 5
9 févr. 2017 à 13:40
Bonjour,

Tout à fait, c’est bien çà yg_be!
J’ai essayé de chercher avec les pistes…
Pour le time_zone :
date_default_timezone_set('Europe/Paris');
j’ai tenté et çà marche, merci beaucoup.

Pour le sondage, ce test php est très bizarre tout à fait d’accord mais je n’ai pas fait le codage (j’ai utilisé une vieille bibliothèque de sondages en php 4.5 qui marche bien en php 7.0... sans requête Mysql).
Il est très bien car il est simple et parlant et il a du succès (donc on aimerait le garder si pas de risque de vulnérabilité/sécurité).
Mais je ne peux pas tester ce que tu proposes car les 2, le $_GET et le $_POST sont présents dans le code (ici lignes 6, 31, 45, 57).
Voici le code (je le copie aussi pour les forumistes qui pourraient être intéressés, même si les sondages sont un peu passés de mode… de toute façon je l’ai désactivé sur la page à problème) :
$data="phpolls-data-0.dat"; 
$votes="phpolls-votes-0.dat"; 
$path_img="pictures/phpolls.gif"; 
$poll_name="blabla ?";
$dataf=file("phpolls-data-0.dat");
if (!isset($_POST['go']) && $_GET['go'] != 1)
{
     /* Impression des choix */ 
     echo "<i>$poll_name</i>\n";
     echo "<form action='#' method='post'><br>\n";

	 for ($i=0; $i<=count($dataf)-1; $i++)
         echo "<input type=\"radio\" name=\"vote\" value=\"$i\"> $dataf[$i]<br>\n";
 
     echo "<input type='hidden' name='go' value='1'>";
     echo "<br><input type='submit' value='Vote' style='color:#000066;background:#f7f885;height:10;'>"; 
     echo "</form>";
     echo "<a href='index.php?result=1&go=1' rel="nofollow noopener noreferrer" target="_blank"> Results</a>"; 
} 

else
{
     $file_votes=fopen($votes, "r"); 
     $line_votes=fgets($file_votes, 255); 
     $single_vote=explode("|", $line_votes); 
     fclose($file_votes); 
     
     if ($_GET['result']!=1) { 
         
         /* Log du vote */ 
         $file_votes=file($votes); 

		if ($_SERVER['REMOTE_ADDR'] == $file_votes[1]) { 
             echo "<font color=red size=1>You already voted !</font><br>back <a href='index.php' rel="nofollow noopener noreferrer" target="_blank">Home</a> to refresh"; 
             exit; 
         } 
         
         $ficdest=fopen($votes, "w"); 
         for ($i=0; $i<=count($dataf)-1; $i++) { 
             if ($i == $_POST['vote']) { 
                 $single_vote[$i]+=1; 
             } 
             fputs($ficdest, "$single_vote[$i]|"); 
         } 
         fclose($ficdest); 
         $ficdest=fopen($votes, "a"); 
         fputs($ficdest, "\n". $_SERVER['REMOTE_ADDR']); 
         fclose($ficdest); 
         $_GET['result']=1; 
     } 
     
     if ($_GET['result']==1) { 
         
         /* Affichage des résultats */ 
         echo "<table cellpadding=5>"; 
         echo "<tr><td><font face=Verdana size=1>"; 
         echo "<i>Select</i></font>"; 
         echo "</td><td><font face=Verdana size=1>"; 
         echo "<i>%</i></font></td>"; 
         echo "<td><font face=Verdana size=1>"; 
         echo "<i>Votes</i></font></td></tr>"; 
         for ($i=0; $i<=count($dataf)-1; $i++) { 
             $tot_votes+=$single_vote[$i]; 
         } 
         for ($i=0; $i<=count($dataf)-1; $i++) { 
             $stat[$i]=$single_vote[$i]/$tot_votes*100; 
             echo "<tr><td><li><font face=Verdana size=1>"; 
             echo "$dataf[$i]</font></td><td align=left><font face=Verdana size=1>"; 
             echo "<img src="""$path_img\" height=10 width=$stat[$i] align=middle> "; 
             printf("%.1f", "$stat[$i]"); 
             echo "%</font></td><td><font face=Verdana size=1>"; 
             echo "$single_vote[$i]</font>"; 
             echo "</td></tr>"; 
         } 
         echo "</table><p>"; 
         echo "Total: $tot_votes votes | back <a href='index.php' rel="nofollow noopener noreferrer" target="_blank">Home</a>"; 
     } 
}

A+ (et encore merci)
Seb
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
9 févr. 2017 à 14:15
Pour éviter les soucis de UNDEFINED INDEX .... il faut récupérer PROPREMENT les variables AVANT de les utiliser....
Donc :
if (!isset($_POST['go']) && $_GET['go'] != 1) {

est à changer par :
$p_go = isset($_POST['go']) ? $_POST['go'] : NULL;
$g_go = !empty($_GET['go']) ? $_GET['go'] : NULL;
if(!$p_go && $g_go!=1) {


Idem pour
 $g_result = !empty($_GET['result']) ? $_GET['result'] : NULL;
  if ($g_result==1) { 


Au passage ... même si "techniquement" c'est faisable ... ta ligne
$_GET['result']=1; 

ne se fait pas !
On n'assigne pas de valeur directement aux variables GET (ou POST) ?
0
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 5
17 févr. 2017 à 12:46
Bonjour Jordane45,

J'ai essayé plein de choses en suivant tes conseils mais cela plante.

Mais peut-être que pour mes tests j'ai commis l'erreur de créer un autre sondage (pour ne pas perturber les visiteurs du site qui utilisent le sondage dans les pages sans requêtes sql) et je me demande si les 2 sondages n'interfèrent pas car une erreur sur le sondage de test fait planter les pages avec le sondage habituel.

Donc je suis revenu à la page avec requête sans sondage.

Si tu peux peigner le code complet et pointer les erreurs j'essaierai encore, sinon j'abandonnerai.

Merci de ton aide (le plus critique a été réglé par yg_be).

Seb
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
17 févr. 2017 à 12:56
bonjour, pourquoi ne pas expliquer "cela plante"? quelques faits t’aideront plus que de nombreuses hypothèses.
à ta place, je travaillerais aussi sur les mystérieuses interférences. là aussi, quelle est l'erreur?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
18 févr. 2017 à 03:32
Bonjour,


Si tu peux peigner le code complet et pointer les erreurs j'essaierai encore,

Sachant que :

J'ai essayé plein de choses en suivant tes conseils

Dans ce cas ... montre nous le code modifié.


mais cela plante.

C'est à dire ? Pourrais tu être plus précis ? Il y a des messages d'erreurs ??

As tu activé l'affichage des erreurs php ?
Si non ... fais le en ajoutant ces deux lignes de code AU DEBUT de ton script php :
 error_reporting(E_ALL);
 ini_set('display-errors','on');

0
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 5
21 févr. 2017 à 14:10
Bonjour,

Merci de ton soutien.

J'ai fait des tests sur internet pendant la nuit avec le sondage phpolls-0.inc existant
Résultats détaillés:

-page d'accueil (sans requête MySql), le sondage marche

-puis page avec requête, mêmes erreurs
Notice: Undefined index: go in /homepages/dossier/phpolls-0.inc on line 25.... qui est:
if (!isset($_POST['go']) && $_GET['go'] != 1)


-correction propose par Jordane, à la place
$p_go = isset($_POST['go']) ? $_POST['go'] : NULL;
$g_go = !empty($_GET['go']) ? $_GET['go'] : NULL;
if(!$p_go && $g_go!=1)


-page d'accueil (sans requête MySql), le sondage s'affiche, mais si on clique sur une des options, y a un souci majeur, toute la partie centrale de la page ne s'affiche plus (le footer non plus, mais le header et les menus gauche et droite s'affichent).
le sondage (menu droite) affiche
If tempted… please select (once) your view…You already voted !
back Home to refresh
si clic sur home, retour à la page d'accueil avec le sondage qui s'affiche normalement avec les options,
si clic sur une des options du sondage, puis vote, retour à la page avec le centre vide

-passage à la page avec requête Sql, rafraichissement de la page...
plus de message d'erreur, le sondage s'affiche avec ses options
si clic sur une des options, puis vote, retour à la page avec le centre vide!

si l'ancien phpolls-0.inc (existant) est remis à la place du modifié et que l'on clique sur une des options du sondage...
comme on a déjà voté, on a une erreur
Notice: Undefined index: result in /homepages/dossier/phpolls-0.inc on line 47
You already voted !
la ligne 47 correspond à
if ($_GET['result']!=1) { 


Donc j'ai essayé de la remplacer par du code selon la correction précédente, mais là çà devient n'importe quoi!

Suite au message de Jordane, j'avais aussi essayé de modifier (ligne 71

if ($_GET['result']==1) {


par

$g_result = !empty($_GET['result']) ? $_GET['result'] : NULL;
	 if ($g_result==1) {


Enfin, le vide au centre après avoir voté ne semble pas lié à la page avec requête mysql (plus probablement au passage à PHP 7.0, le sondage marchait aussi en cas de vote préalable sur PHP 5.5) car quand je reviens au sondage existant, que je supprime la page avec requête Mysql du site et que je vote à nouveau dans la page Index il n'y a pas de message d'erreur (bien sûr) mais une page avec le centre vide apparaît et si je la raffaichis pas de changement (la page s'appelle alors www.xxx.org/index.php#)

Compliqué!!!

Voilà!

Je pense qu'il faut repeigner le code (voir le code complet dans un message précédent), donc si cela vous tente...
Sinon je crois que je vais le supprimer (même si le risque que qqn qui a voté revote immédiatement est très faible dans la réalité)

Merci d'avance

Seb
PS (pour Jordane, oui j'ai un code d'affichage des erreurs php)
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
21 févr. 2017 à 15:55
Je n'irai pas plus loin que ta première ligne de code et le message d'erreur qui va avec :

Notice: Undefined index: go in /homepages/dossier/phpolls-0.inc on line 25...
if (!isset($_POST['go']) && $_GET['go'] != 1)


Je le répète encore une fois ....
on récupère PROPREMENT les variables AVANT de les utiliser
Donc... va voir ici : https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index

et puis... pourquoi as tu du POST ET du GET pour la même variable ???
0
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 5
2 mars 2017 à 18:49
Bonjour Jordane,

Je viens de passer une semaine à essayer de corriger ce code de sondage.

Pas moyen.

Je te rappelle que c'est un sondage copié d'une bibliothèque de scripts anciens.

Il marche toujours avec PHP 7.1 dans des pages standards php-html mais plus du tout dans une page qui a en plus une requête sql.

Le mieux est d'abandonner.

Puis-je te demander un conseil?

Peut-il y avoir des soucis de sécurité avec ce script de sondage et ses nombreux $_GET en ce qui concerne la BDD MySQL (tout l'espace membre sauf la seule page dans la partie tout public et qui a motivé ce post).

Si oui, je le supprime complètement du site.
Si non, je le garde tel quel pour les pages tout public sauf la page avec requête sql.

Merci de ton conseil.

A+

Seb
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
2 mars 2017 à 21:33
Je pense qu'on peut résoudre ton problème ...
pour ça il faut que tu nous montres le code corrigé (en ayant tenu compte de nos remarques précédentes).

Donc :
1 - Tu apportes les corrections proposées
2 - Tu places au début de ton script les lignes de code :
//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('diplay-erros','on');

3 - Tu nous postes le code (complet) modifié

4 - Tu nous indiques les éventuels messages d'erreur. ( TOUS et dans leur ENTIÈRETÉ ! )
NB : Si la page est "blanche" pense également à afficher le "code source" de la page générées par ton navigateur. Parfois des messages d'erreurs s'y glissent même si ils ne s'affichent pas à l'écran.


5 - Pour les requêtes ... tu sembles utiliser du PDO.
Appliques ceci : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

( la TOTALITE... à savoir : Le code de connexion ET le fait de placer tes instructions dans des blocs TRY/CATCH )
0
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 5
7 mars 2017 à 13:27
Bonjour Jordane,

Je n'ai jamais douté que tu voulais toujours m'aider (comme d'hab... merci encore).
Le souci c'est que je ne peux tester le sondage dans wampserver localhost et que je ne peux le tester qu'en ligne pendant la nuit (il y a des visiteurs de tous les coins du monde).

Donc j'abandonne (et je le supprime du site car risques de sécurité hypothétiques), tout en te renouvelant mes remerciements!

A la revoyure, Seb
0