Undefined variable

Eléphanteau du PHP | 11 Messages

06 juin 2017, 10:41

Bonjour à tous;
je sais que je risque de me faire taper sur les doigts pour paresse mais j'ai cherché sauf que les cas que je trouve sont legèrement différents du mien.
Voila le message que j’obtiens sur mon site:

Code : Tout sélectionner

Notice: Undefined variable: affichage_php1 in C:\xampp\htdocs\Intranet\components\com_jumi\files\scripts_xxxx\manifestations_xxxx_liste.php on line 10
.
Pour faire simple voici le code:

Code : Tout sélectionner

<?php $aujourdhui=date("Y-n-j"); $sql = "SELECT description FROM xxxx_manifestations WHERE actif='Y'"; $sql .= " AND date1<='" . $aujourdhui . "' AND date2>='" . $aujourdhui . "' ORDER BY description"; $ma_requete = mysql_query($sql); if ($ma_requete) { $nbrow=mysql_num_rows($ma_requete); $affichage_php1 .= "<div class='texte' style='padding-left:8pt; font:arial; color:blue'>>> <u>Ateliers, séminaires en cours:</u> " . ($nbrow==0?"<i>aucun...</i>":"") . "</div>\n"; if( $nbrow > 0) { $i=1; $affichage_php1 .= "<div class='texte' style='padding-left:25pt; font-weight:bold; color:blue'>"; while ($mon_resultat = mysql_fetch_array($ma_requete)) { $affichage_php1 .= "- " . $mon_resultat["description"] . ($i++<$nbrow?"<br>":""); } $affichage_php1 .= "</div>"; } $affichage_php1 .= "</div><br>"; } echo $affichage_php1; ?>
Es-ce que ma variable n'est pas déclarée?
Merci de votre aide

Mammouth du PHP | 1967 Messages

06 juin 2017, 11:14

Oui c'est bien cela le problème.

avec l'assignation par concaténation .= php s'attend à ce que ta variable soit définie.

Il faut donc que ta première assignation (mais il ne faut pas quelle soit dans une boucle) soit une assignation simple sans le point afin de créer la variable.

J'ajoute, qu'il s'agit d'une erreur de type NOTICE, bien qu'il soit toujours bon de faire en sorte qu'elle n'apparaissent pas, elle ne gène en rien l'éxécution de ton code.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 11 Messages

07 juin 2017, 13:46

Merci Spols pour ta réponse;
Effectivement il s'agit d'une erreur de type NOTICE et comme vous l'avez dit quand j’enlève le point avant = dans ma première assignation, l'erreur disparait. C'est moi qui ai mis mon error_reporting au maxi afin de voir ce qui ne va pas. L'erreur disparait mais il se trouve que cela ne règle pas mon problème. En fait, c’est un script qui doit afficher des données se trouvant dans ma base de données. Absolument rien ne s'affiche, ni données de la base ni erreurs.

Merci

Mammouth du PHP | 1967 Messages

07 juin 2017, 14:38

En y regardant un peu plus près, si ta requète échoue, tu auras toujours l'erreur de type notice car tu tente d'afficher une variable qui n'est créé que si la requète aboutit.

Pour ton autre problème, vérifie ton code source pour être sur qu'e tu n'obtient rien en sortie de php.
affiche également ta requète pour la tester dans un outil comme phpmyadmin pour t'assurer qu'elle est correcte.
tu devrais également récupèrer les erreur mysql et les afficher afin de t'assurer que la connection soit correcte
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 11 Messages

07 juin 2017, 16:11

En y regardant un peu plus près, si ta requête échoue, tu auras toujours l'erreur de type notice car tu tente d'afficher une variable qui n'est créé que si la requête aboutit.
.
Je suis un novice en PHP donc si tu peux un peu baisser le niveau :) :) :)
Effectivement je vois que ma variable vient après le "if" mais en réalité je ne vois pas ce qui pourrait faire échouer cette requête car il s'agit d'un site qui affiche le contenu d'un formulaire, (rappel: c'est un code dont j'ai hérité et que je modifie souvent pour les besoins de la cause)
Pour ton autre problème, vérifie ton code source pour être sur que tu n'obtient rien en sortie de php.
Comment cela se fait?
affiche également ta requête pour la tester dans un outil comme phpmyadmin pour t'assurer qu'elle est correcte
. Comment cela se fait?
tu devrais également récupérer les erreur mysql et les afficher afin de t'assurer que la connexion soit correcte
Comment cela se fait?
Je sais que c'est trop demandé mais tu n'imagine pas à quel point tu m'aidera à sortir de ce bourbier.
Merci beaucoup

Mammouth du PHP | 1967 Messages

08 juin 2017, 08:10

Pour vérifier le code source, ctrl+U te permet de le voir

pour afficher ta requète echo $sql;
tu dois avoir un outil phpmyadmin installer avec ton xamp, celui avec lequel tu a créer ta base de donnée. sur l'onglet SQL tu colle ta requète et tu vérifie son résultat

pour la récupèration d'erreru mysql, google va t'aider plus que moi, car je ne connait pas la syntaxe par coeur.
exemple sur : https://openclassrooms.com/courses/les- ... avec-mysql
<?php
// Connexion à MySQL
mysql_connect('localhost', 'root', '') or exit('Erreur dans le fichier '.__FILE__.'<br />Ligne '.__LINE__.'<br />MySQL dit : '.mysql_error());
mysql_select_db('monsite') or exit('Erreur dans le fichier '.__FILE__.'<br />Ligne '.__LINE__.'<br />MySQL dit : '.mysql_error());
?>


Pour le reste, un problème temporaire d'accés à la base peut se produire, donc la bonne pratique serait d'instancier ta variableaffichage_php1 à vide avant tout (du moins avant le if) et ensuite de lui ajouter tes chaines de sorties.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 11 Messages

28 juin 2017, 19:26

Bonsoir Splos;
En effet, en enlevant le point devant php, je n'ai plus le message d'erreur d'ailleurs je n'ai aucun autre message d'erreur (Or mon $error_reporting = '30719' c'est a dire au maximum) mais le script n'affiche pas liste comme il faisait avant que je n'ai des soucis avec mon serveur.
Merci de ton aide; je suis dans un vrai trou.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

29 juin 2017, 00:43

Or mon $error_reporting = '30719' c'est a dire au maximum
Juste une remarque, il est préférable d'utiliser directement la variable par son nom dans ton cas E_ALL et pas par son numéro, car le n° peut évoluer.
Et d'ailleurs depuis plusieurs années 30719 n'est plus le maximum, donc raison de + pour utiliser :
error_reporting(E_ALL);
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 1967 Messages

29 juin 2017, 08:24

redonne nous ton script dans son eta t actuel, et dis nous où il ne fait pas ce que tu désire.

PS le reste de mes remarques restent valables, as tu vérifier ta requète dans phpmyadmin ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 11 Messages

29 juin 2017, 19:43

Ce script ci-dessous doit afficher les informations de la table "mon-site-site_absences" sur la page d'accueil de mon site intranet.
redonne nous ton script dans son eta t actuel, et dis nous où il ne fait pas ce que tu désire.

Code : Tout sélectionner

<?php $aujourdhui=date("Y-n-j"); $sql = "SELECT DISTINCT nom,date_depart_saf,date_retour_saf,pays,date1,date2 FROM mon-site-site_absences WHERE actif='Y' AND "; $sql .= "((validation <'9' AND date_depart_saf<='" . $aujourdhui . "' AND date_retour_saf>='" . $aujourdhui . "') OR "; $sql .= " (type='2' AND date1<='" . $aujourdhui . "' AND date2>='" . $aujourdhui . "')) ORDER BY nom"; $ma_requete = mysql_query($sql); echo mysql_error(); if ($ma_requete) { $nbrow = mysql_num_rows($ma_requete); $affichage_php = "<p style='padding-left:8pt; font:arial; color:blue'><b><u>Liste des absences du jour</u></b> : les dates de départ et de retour sont celles du billet d'avion ou de la demande d'absence</p><table id='rounded-corner' summary='Absences de la période'> <thead> <tr> <th scope='col' class='rounded-top-left'>Nom de l'agent</th> <th scope='col' class='rounded-pays'>Pays</th> <th scope='col' class='rounded-depart'>Date de départ</th> <th scope='col' class='rounded-top-right'>Date de retour</th> </tr> </thead> <tfoot> <tr> <td colspan='3' class='rounded-foot-left'><em><a href='http://mon-site-site01/intranet/index.php?option=com_content&view=article&id=93'>Pour plus d'information, merci de consulter la page des absences</a></em></td> <td class='rounded-foot-right'>&nbsp;</td> </tr> </tfoot> <tbody>"; if( $nbrow > 0) { $i=1; while ($mon_resultat = mysql_fetch_array($ma_requete)) { //$affichage_php .= "<b>" . $mon_resultat["nom"] . "</b> (><i>" . date("d-m-Y",strtotime($mon_resultat["date2"])) . "</i>)"; //$affichage_php .= ($i++<$nbrow?", ":""); $affichage_php .= "<tr>"; $affichage_php .= "<td>".$mon_resultat["nom"]."</td>"; if (($mon_resultat["pays"] != 'n/a')) { $pays = $mon_resultat["pays"]; $req = mysql_query("select pays from mon-site-site_liste_pays where code3='$pays'"); $res = @mysql_fetch_array($req); if (isset($res["pays"])) $pays = $res["pays"]; $affichage_php .= "<td>".$pays."</td>"; $affichage_php .= "<td>".date("d / m / Y",strtotime($mon_resultat["date_depart_saf"]))."</td>"; $affichage_php .= "<td>".date("d / m / Y",strtotime($mon_resultat["date_retour_saf"]))."</td>"; }else { $pays = "En congés"; $affichage_php .= "<td>".$pays."</td>"; $affichage_php .= "<td>".date("d / m / Y",strtotime($mon_resultat["date1"]))."</td>"; $affichage_php .= "<td>".date("d / m / Y",strtotime($mon_resultat["date2"]))."</td>"; } $affichage_php .= "</tr>"; } } else { //$affichage_php .= "<div class='texte' style='padding-left:8pt; font:arial; color:blue'>>> <u>Absence(s) du jour:</u> "; $affichage_php .="<i>aucune...</i>"; //$affichage_php .= "</div><br>"; } $affichage_php .= "</tbody></table>"; } $aujourdhui=date("Y-n-j"); $sql = "SELECT DISTINCT nom,date1,date2,date_depart_saf,date_retour_saf,pays FROM mon-site-site_absences WHERE actif='Y' AND "; $sql .= "((validation = '1' AND type='1') OR (validation = '0' AND type='2')) AND date1>'" . $aujourdhui . "' OR date_depart_saf>'" . $aujourdhui . "' ORDER BY nom"; $ma_requete = mysql_query($sql); echo mysql_error(); if ($ma_requete) { $nbrow=mysql_num_rows($ma_requete); $affichage_php .= "<p></p><p style='padding-left:8pt; font:arial; color:blue'><b><u>Liste des absences à venir</u></b> : les demandes ci-dessous ont été autorisées par la Direction Générale</p><table id='rounded-corner' summary='Absences de la période'> <thead> <tr> <th scope='col' class='rounded-top-left'>Nom de l'agent</th> <th scope='col' class='rounded-pays'>Pays</th> <th scope='col' class='rounded-depart'>Départ probable</th> <th scope='col' class='rounded-top-right'>Retour probable</th> </tr> </thead> <tfoot> <tr> <td colspan='3' class='rounded-foot-left'><em><a href='http://mon-site-site01/intranet/index.php?option=com_content&view=article&id=93'>Pour plus d'information, merci de consulter la page des absences</a></em></td> <td class='rounded-foot-right'>&nbsp;</td> </tr> </tfoot> <tbody>"; if( $nbrow > 0) { $i=1; while ($mon_resultat = mysql_fetch_array($ma_requete)) { //$affichage_php .= "<b>" . $mon_resultat["nom"] . "</b> (><i>" . date("d-m-Y",strtotime($mon_resultat["date2"])) . "</i>)"; //$affichage_php .= ($i++<$nbrow?", ":""); $pays = $mon_resultat["pays"]; $req = mysql_query("select pays from mon-site-site_liste_pays where code3='$pays'"); //echo var_dump($pays)." ".var_dump($req)."<br />"; $res = mysql_fetch_array($req); if (isset($res["pays"])) $pays = $res["pays"]; else $pays = "En congés"; $affichage_php .= "<tr>"; $affichage_php .= "<td>".$mon_resultat["nom"]."</td>"; $affichage_php .= "<td>".$pays."</td>"; if ($mon_resultat["date_depart_saf"] != '0000-00-00') $affichage_php .= "<td>".date("d / m / Y",strtotime($mon_resultat["date_depart_saf"]))."</td>"; else $affichage_php .= "<td>".date("d / m / Y",strtotime($mon_resultat["date1"]))."</td>"; if ($mon_resultat["date_retour_saf"] != '0000-00-00') $affichage_php .= "<td>".date("d / m / Y",strtotime($mon_resultat["date_retour_saf"]))."</td>"; else $affichage_php .= "<td>".date("d / m / Y",strtotime($mon_resultat["date2"]))."</td>"; $affichage_php .= "</tr>"; } } else { //$affichage_php .= "<div class='texte' style='padding-left:8pt; font:arial; color:blue'>>> <u>Absence(s) du jour:</u> "; $affichage_php .="<i>aucune...</i>"; //$affichage_php .= "</div><br>"; } $affichage_php .= "</tbody></table>"; } echo $affichage_php; ?>
PS le reste de mes remarques restent valables, as tu vérifier ta requète dans phpmyadmin ?

Code : Tout sélectionner

Erreur Voici ce que ça m'affiche quand je fais le test dans SQL -> PHPMYADMIN -> Exécuter. Merci de m'éclairer. Il semble qu'il y ait une erreur dans votre requête SQL. Le message ci-bas peut vous aider à en trouver la cause. ERROR: Ponctuation invalide @ 1 STR: <? SQL: <?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j");<?php $aujourdhui=date("Y-n-j"); requête SQL: <?php $aujourdhui=date("Y-n-j"); MySQL a répondu:Documentation #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 '<?php $aujourdhui=date("Y-n-j")' at line 1

Mammouth du PHP | 1967 Messages

30 juin 2017, 08:02

Tenter d'injecter ton code php dans phpmyadmin ne peut pas fonctionner, il n'est pas capable de l'interprèter et ce n'est pas fais pour fonctionner comme cela

tente plutot un echo $sql juste avant ton $ma_requete = mysql_query($sql);
ainsi tu obtiendra ta requète en texte telle que php l'envoie à ta BDD. et c'est ce texte là qu'il faut envoyer dans phpmyadmin.

Es tu sur de ne pas avoir de message d'erreur pour nous mettre sur la voie ? as tu bien paramètrer php pour afficher toutes les erreurs ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube