Aller au contenu

Problème URGENT de boucle et tableau


cleex

Sujets conseillés

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 fin

foreach($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 !!!

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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ées
mysql_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ées
while($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 !

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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]";

Lien vers le commentaire
Partager sur d’autres sites

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 ... :whistling:


<?
$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 ! :blush:

Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous.

J'ai trouvé ... Ma table Dercr était vide donc impossible d'y modifier quelque chose :wacko:

Encore merci à tous pour votre aide ! Vraiement !

Sujet Résolu

Modifié par olitax
Inutile d'agrandir la taille du texte pour dire que le sujet est résolu ;)
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...