cleex Posté 17 Février 2010 Posté 17 Février 2010 Bonjour à tous. Je suis face à un problème que je dois résoudre très rapidement... Je remercie déjà très fort les personnes qui prendront un peu de leur temps pour m'aider Explication : Une page dans la zone admin qui sert à modifier des informations d'une table d'une base de donnée. Elle est présentée sous forme d'un formulaire où les informations sont incrustées dedans. Il y a un champ contenant une date d'un début et un autre champ contenant une date de fin. Je veux au finish avoir dans une variable toutes les dates entre ces 2 dates. Erreur : Warning: Invalid argument supplied for foreach() in /homez.309/montheat/www/admin/modifier.php on line 48 Code : function getDatesBetween($start, $end) { if($start > $end) { return false; } $sdate = strtotime("$start +1 day"); $edate = strtotime($end); $dates = array(); for($i = $sdate; $i < $edate; $i += strtotime('+1 day', 0)) { $dates[] = date('d-m-Y', $i); } return $dates;} $dates=getDatesBetween($date0, $date1); // $date0 = date de début et $date1 = date de finforeach($dates AS $cle => $valeur){ if($valeur != "") { if($cle>0) { $ddates="$ddates/$valeur"; } else { $ddates="$valeur"; } }}$dates_total="$date0/$ddates/$date1"; // ce qui donnera toutes les dates séparées par des / Indice : Après une recherche sur internet, le problème vient peut-être du fait que la variable $dates n'est pas un tableau. Donc le foreach ne va pas. J'ai véirfié cela : if (!is_array($dates)) { echo "lol"; } Ce qui affiche "lol" ... Donc $dates n'est pas un tableau pourtant la fonction en donne bien un ... Conclusion : Je ne comprend plus rien. Merci a tous !!!
captain_torche Posté 17 Février 2010 Posté 17 Février 2010 Chez moi, ça fonctionne très bien ... A condition de renseigner les variables $date0 et $date1 ! Sinon, le traitement foreach est inutile : tu peux utiliser la fonction implode pour un résultat identique en une seule ligne. Et tant qu'à faire, au lieu d'ajouter tes variables de début et de fin manuellement, pourquoi ne pas les ajouter dans le résultat de ta fonction ? Ca sera encore plus simple ! De plus, comme tu utilises la fonction strtotime, tes variables de début et de fin n'ont pas obligatoirement la même forme que les variables retournées par ta fonction. Faire en sorte que ces dates soient incluses dans l'intervalle te garantit que toute ta liste sera au même format.
Jeanluc Posté 17 Février 2010 Posté 17 Février 2010 Donc $dates n'est pas un tableau pourtant la fonction en donne bien un ...Pas à tous les coups: si ($start > $end), la fonction ne renvoie pas un tableau. Jean-Luc
captain_torche Posté 17 Février 2010 Posté 17 Février 2010 Effectivement ! Tu ferais mieux de renvoyer un tableau vide, dans ce cas.
cleex Posté 18 Février 2010 Auteur Posté 18 Février 2010 Bonjour, Merci à vous pour votre réponse rapide mais le problème persiste... voici le résultat : lol Warning: implode() [function.implode]: Invalid arguments passed in /homez.309/montheat/www/admin/modifier.php on line 49 Le problème vient alors de la variable $dates qui est censée être un tableau ... J'ai aussi le même problème en mettant : $datess=getDatesBetween('31-01-2010', '27-03-2010'); if (!is_array($dates)) { echo "lol"; }$ddatess = implode("/", $datess); Je ne comprend plus rien ... J'utilise la même fonction sur un autre page du site avec succès. Cette page contient le formulaire pour insérer les données dans la base de donnée. Il y a donc le même calcul de dates à faire : $date000=$_POST['date0'];$date111=$_POST['date1'];$dates = getDatesBetween($date000, $date111); foreach($dates AS $cle => $valeur){ if($valeur != "") { if($cle>0) { $ddates="$ddates/$valeur"; } else { $ddates="$valeur"; } }}$ddates="$date000/$ddates/$date111"; Et ca marche ... Je vous met la page entière où le problème persiste : <?php function getDatesBetween($start, $end){ if($start > $end) { return false; } $sdate = strtotime("$start +1 day"); $edate = strtotime($end); $dates = array(); for($i = $sdate; $i < $edate; $i += strtotime('+1 day', 0)) { $dates[] = date('d-m-Y', $i); } return $dates;}//Connexion à la base de donnéesmysql_connect('...', '...', '...');mysql_select_db('...');if(isset($mod)){ $datess=getDatesBetween($_POST['dd1'], $_POST['dd2']); if (!is_array($dates)) { echo "lol"; }$ddatess = implode("/", $datess);$retour_messages=mysql_query('SELECT * FROM inscription WHERE id='.$idd.''); // on récupere les données de la table sélectionnéeswhile($d=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce à une boucle{if($editor1!=$d['comm']) // si on insert un commentaire, une image va ce supperposer sur l'image de la table { $dercr=mysql_query('UPDATE dercr SET idd="'.$idd.'" ');$d="../up/mini_".$d['visuel'];if(substr($d,-3) == "jpg" OR substr($d,-3) == "jpeg") { $background = imagecreatefromjpeg($d); }if(substr($d,-3) == "png" OR substr($d,-3) == "PNG") { $background = imagecreatefrompng($d); }if(substr($d,-3) == "gif" OR substr($d,-3) == "GIF") { $background = imagecreatefromgif($d); }$insert = imagecreatefrompng("critique.png");imagecolortransparent($insert,imagecolorat($insert,0,0));$insert_x = imagesx($insert);$insert_y = imagesy($insert);imagecopymerge($background,$insert,0,5,0,0,$insert_x,$insert_y,100);imagejpeg($background, $d);}}$modif=mysql_query('UPDATE inscription SET titre="'.$ttitre.'" , auteur="'.$aauteur.'", duree="'.$dduree.'", scene="'.$sscene.'", distribution="'.$ddistribution.'" , registre="'.$rregistre.'" , lieu="'.$llieu.'" , adresse="'.$aadresse.'", tel="'.$ttel.'", date="'.$dates_total.'" , d1="'.$date0.'" , d2="'.$date1.'" , lient="'.$llient.'" , lienc="'.$llienc.'" , nom="'.$nnom.'" , mail="'.$mmail.'" , tel2="'.$ttel2.'" , horaire="'.$hhoraire.'" , resume="'.$editor2.'" , comm="'.$editor1.'" WHERE id="'.$idd.'"');?><script>alert("L'annonce a bien été modifiée !")</script><br><br><? }// La requête sql pour récupérer les messages de la page actuelle.$retour_messages=mysql_query('SELECT * FROM inscription WHERE id="'.$idd.'" ');while($d=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce à une boucle{ //Je vais afficher les messages dans des petits tableaux. C'est à vous d'adapter pour votre design... //De plus j'ajoute aussi un nl2br pour prendre en compte les sauts à la ligne dans le message. $['id'] echo '<form action=modifier.php method=post> <table border="1" cellspacing="0" cellpadding="2" align=center width=700> <tr> <td width=80 align=left height=20 bgcolor="#CCCCCC"><strong>Date</strong> </td> <td align=left>'.$d['date_ins'].'</td></tr> <tr> <td align=left height=20 bgcolor="#CCCCCC"><strong>Titre</strong> </td> <td align=left><input type=text name=ttitre value="'.$d['titre'].'"></td></tr> <tr><td align=left bgcolor="#CCCCCC"><strong>Auteur</strong></td> <td align=left><input type=text name=aauteur value="'.$d['auteur'].'"></td></tr><tr> <td align=left bgcolor="#CCCCCC"><strong>Mise en scène </strong></td> <td align=left><input type=text name=sscene value="'.$d['scene'].'"></td></tr><tr> <td align=left bgcolor="#CCCCCC"><strong>Distribution</strong></td> <td align=left><input type=text name=ddistribution value="'.$d['distribution'].'"></td></tr><tr> <td align=left bgcolor="#CCCCCC"><strong>Registre</strong></td> <td align=left><input type=text name=rregistre value="'.$d['registre'].'"></td></tr><tr> <td align=left bgcolor="#CCCCCC"><strong>Théatre/lieu</strong></td> <td align=left><input type=text name=llieu value="'.$d['lieu'].'"></td></tr><tr> <td align=left bgcolor="#CCCCCC"><strong>Adresse</strong></td> <td align=left><input type=text name=aadresse value="'.$d['adresse'].'"></td></tr><tr> <td align=left bgcolor="#CCCCCC"><strong>Tel</strong></td> <td align=left><input type=text name=ttel value="'.$d['tel'].'"></td></tr><tr> <td align=left bgcolor="#CCCCCC"><strong>Dates présentations </strong></td> <td align=left><input type=text name="dd1" value="'.$d['d1'].'"> au <input type=text name="dd2" value="'.$d['d2'].'"></td></tr> <tr> <td align=left bgcolor="#CCCCCC"><strong>Durée </strong></td> <td align=left><input type=text name=dduree value="'.$d['duree'].'"></td></tr> <tr> <td align=left bgcolor="#CCCCCC"><strong>Horaire </strong></td> <td align=left><textarea name="hhoraires" cols="30" rows="3">'.$d['horaire'].'</textarea></td></tr> <tr> <td align=left bgcolor="#CCCCCC"><strong>Site théatre </strong></td> <td align=left><input type=text name=llient value="'.$d['lient'].'"></a></td></tr><tr> <td align=left bgcolor="#CCCCCC"><strong>Site compagnie </strong></td> <td align=left><input type=text name=llienc value="'.$d['lienc'].'"></a></td></tr><tr> <td align=left bgcolor="#CCCCCC"><strong>Nom Resp</strong></td> <td align=left><input type=text name=nnom value="'.$d['nom'].'"></td></tr><tr> <td align=left bgcolor="#CCCCCC"><strong>Mail Resp</strong></td><td align=left><input type=text name=mmail value="'.$d['mail'].'"></td></tr><tr> <td align=left bgcolor="#CCCCCC"><strong>Tel Resp</strong></td> <td align=left><input type=text name=ttel2 value="'.$d['tel2'].'"></td></tr> <tr> <td>Critique</td> <td > <textarea cols=50 rows=7 name=editor1>'.$d['comm'].'</textarea> <script type="text/javascript"> CKEDITOR.replace( "editor1", { toolbar : "MyToolbar" }); </script> </td></tr><tr> <td>résumé</td><td ><textarea name=editor2>'.$d['resume'].'</textarea> <script type="text/javascript"> CKEDITOR.replace( "editor2", { toolbar : "MyToolbar" }); </script></td></tr><tr> <td>Visuel</td> <td align=left valign=top><a href=../up/'.$d['visuel'].'><img src="../up/mini_'.$d['visuel'].'"></a></td></tr><tr> <td width=70 align=left colspan=2><input type=hidden name=mod value=1><input type=hidden name=idd value='.$d['id'].'><input type=submit value=Modifier></td> </tr></table> <br><hr></br> '; //J'ai rajouté des sauts à la ligne pour espacer les messages. }?></body></html> Merci encore d'avance à vous !
captain_torche Posté 18 Février 2010 Posté 18 Février 2010 C'est normal : tu alimentes ta fonction avec des dates au format français (JJ-MM-AAAA), que la fonction strtotime() ne reconnaît pas. Il te suffit de l'alimenter avec des dates au format mysql (AAAA-MM-JJ) et tout rentrera dans l'ordre. De plus, tu déclares la variable $datess, mais tu testes la variable $dates.
cleex Posté 18 Février 2010 Auteur Posté 18 Février 2010 Bonjour à tous ! Voila le problème est réglé ! Un grand merci à tous pour votre aide ! Voici comment j'ai fait : $date00 = explode("-", $date0);$date11 = explode("-", $date1); $date000= "$date00[2]-$date00[1]-$date00[0]"; $date111= "$date11[2]-$date11[1]-$date11[0]";
cleex Posté 18 Février 2010 Auteur Posté 18 Février 2010 Re bonjour ... Bon ben apparemment, un problème en crée un autre ... J'ai posté cet autre problème ici car il est sur la même page. Il n'y a pas d'erreur mais le code ne s'exécute pas... Au même endroit que le problème précédent, j'ai inclus test.php : Il a pour but de supperposer une image à la miniature. Cette partie fonctionne. Ce qui ne fonctionne pas est la ligne $dercr=mysql_query('UPDATE dercr SET idd = '.$idd.''); Le champ idd n'est pas réactualisé... Ca ne doit être quelque chose de compliqué je pense ... <?$retour_messages=mysql_query('SELECT * FROM inscription WHERE id='.$idd.''); while($d=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce à une boucle{if($editor1!=$d['comm']) { $dercr=mysql_query('UPDATE dercr SET idd = '.$idd.''); $d="../up/mini_".$d['visuel']; if(substr($d,-3) == "jpg" OR substr($d,-3) == "jpeg") { $background = imagecreatefromjpeg($d); } if(substr($d,-3) == "png" OR substr($d,-3) == "PNG") { $background = imagecreatefrompng($d); } if(substr($d,-3) == "gif" OR substr($d,-3) == "GIF") { $background = imagecreatefromgif($d); } $insert = imagecreatefrompng("critique.png"); imagecolortransparent($insert,imagecolorat($insert,0,0)); $insert_x = imagesx($insert); $insert_y = imagesy($insert); imagecopymerge($background,$insert,0,5,0,0,$insert_x,$insert_y,100); imagejpeg($background, $d); }}?> Merci encore à vous !
Portekoi Posté 18 Février 2010 Posté 18 Février 2010 Bonjour, Tu n'as pas de where dans ton update, c'est normal? Portekoi
cleex Posté 18 Février 2010 Auteur Posté 18 Février 2010 Ben je pense que oui Car la table derCr contient qu'un champ idd. Donc je pense que je ne suis pas obliger de mettre un where car je remplace la seule entrée de la table. Je me trompe ? On est obligé de mettre un where ?
cleex Posté 19 Février 2010 Auteur Posté 19 Février 2010 (modifié) Bonjour à tous. J'ai trouvé ... Ma table Dercr était vide donc impossible d'y modifier quelque chose Encore merci à tous pour votre aide ! Vraiement ! Sujet Résolu Modifié 19 Février 2010 par olitax Inutile d'agrandir la taille du texte pour dire que le sujet est résolu ;)
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant