Page 1 sur 2

Help...Warning: Invalid argument

Posté : 12 avr. 2006, 12:55
par artémis
Bonjour a tous,
je poste sur ce forum en espérant trouver un gentil petit programmeur :D qui pourait 'aider a résoudre un petit soucis ds mon code php....

Dans on site de rencontre j'ai une partie admin, dns laquelle il y a une secton "photo" qui me permet d les suprier (logiquement) si le caractère de la photo me déplait, le soucis est que lorsque je sélectionne la photo et que je clique sur supprimer voici ce que j'ai a l'écran:

Warning: Invalid argument supplied for foreach() in /home/templedu/public_html/rencontre1/tdpmyad/admin_membre/photos.php on line 6

et voici mon code de la ligne 6:
foreach($suppr as $key=>$value) {

merci d'avance p votre coup de pouce....

Posté : 12 avr. 2006, 13:35
par jpaul
Excepté le fait que je mets un espace de chaque côté du => ta syntaxe est ce que j'aurais pu coder, ça a l'air correct.
Es-tu sûr que la variable $suppr est bien un tableau ?

Help....

Posté : 12 avr. 2006, 13:56
par artémis
Bjr jpaul, c'est athena... ca te dis qqch :wink:
tu sais quoi plus j'avance ds le site plus je remarque des bug...
la programation php a été faite par un programmeur "proffessionel" soit disant.... et plus les jours avancent plus les erreures apparaissent....
est il possible qu'il ai laisser des codent permetant de faire tout buguer? et de rendre le site inutilisable?

Posté : 12 avr. 2006, 13:59
par Erazer
la variable $suppr doit être un tableau :)

vu ton erreur, ça n'est pas le cas :)

Posté : 12 avr. 2006, 14:53
par artémis
voilà enfait sur un autre forum on m'a conseillé de mettre ce bout de code pr ma ligne 6:
if($tableau && is_array($tableau)) {
foreach($tableau as $cle => $value) {}
}
j'ai essayé mais ce ne fonctionne qd même pas...

voici le code de ma page (on ne sait jamais...)
<?php
require_once("../../phplib/connect.php");
require_once("../../phplib/requete.class.php");

if (!empty($_POST)) {
foreach($suppr as $key=>$value) {
$req1 = "SELECT id_membre, num FROM tem_photos WHERE nom='$key'";
$result1 = mysql_query($req1) or die(mysql_error());
while($row = mysql_fetch_assoc($result1)) {
if($row['num'] == 1) unlink("../../photosmembres/vignettes/".$row['id_membre'].".jpg");
}

$req2 = "DELETE FROM tem_photos WHERE nom='$key'";
$result1 = mysql_query($req2) or die(mysql_error());
unlink("../../photosmembres/grandes/$key");
}
}

if (isset($_GET['page'])) $page = $_GET['page'];
else $page = 1;

$nbparpage = 50;
$min = (($page-1)*$nbparpage);
$max = $min+$nbparpage;

$sql = "SELECT nom FROM tem_photos LIMIT $min, $max";
$result = mysql_query($sql) or die(mysql_error());
$c = 0;
$data = array();
while($row = mysql_fetch_assoc($result)) {
$data[$c] = $row['nom'];
$c++;
}
$nbresult = mysql_num_rows($result);
mysql_free_result($result);

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Document sans nom</title>
</head>

<body>
<?php if($page>1) { ?>
<a href="photos.php?page=<?php echo ($page-1); ?>">Page précédente</a> - 
<?php } ?>
<a href="photos.php?page=<?php echo ($page+1); ?>">Page suivante</a>
<form method="post" action="photos.php">

<table><tr>
<?php
for ($i=0; $i<$nbresult; $i++) {
echo "<td>";
echo "<img src='../../photosmembres/grandes/".$data[$i]."'><br/>";
echo "<input type='checkbox' name='suppr[".$data[$i]."]' value='' />";
echo "</td>\n";
if($i%5==0 && $i!=0) echo ("</tr><tr>");
}
?>
</tr></table>
<input type="submit" value="Supprimer ces photos"/>
</form>
</body>
</html>
merci d'avance :wink:

Posté : 12 avr. 2006, 14:59
par Erazer
echo "<input type='checkbox' name='suppr[".$data[$i]."]' value='' />"; 
par
echo "<input type='checkbox' name='suppr[]' value='".$data[$i]."' />"; 

Posté : 12 avr. 2006, 16:02
par artémis
merci pr ton code mai ca affiche toujours la meme erreure :s

Posté : 12 avr. 2006, 16:18
par Hermès
fais un
echo "<pre>"; print_r($suppr); echo "</pre>";
au début de ton code (juste avant le foreach) et montre-nous ce que ça donne.
Ca se trouve c'est une mauvaise récupération de $suppr...

Posté : 12 avr. 2006, 16:36
par Erazer
Bien vu Hermès, ce n'est pas si ça se trouve, c'est bien ça l'erreur :)

Posté : 12 avr. 2006, 16:37
par artémis
oki mlerci je vais essayer :wink:

Posté : 12 avr. 2006, 16:38
par Hermès
ben je sais qu'il est possible de faire une création automatique de variables à partir de la récupértion des informations d'un formulaire (configuration sous apache ?) mais je sais pas si ça s'applique aux données POST, GET, les deux, etc...

Posté : 12 avr. 2006, 16:44
par Erazer
ben je sais qu'il est possible de faire une création automatique de variables à partir de la récupértion des informations d'un formulaire (configuration sous apache ?) mais je sais pas si ça s'applique aux données POST, GET, les deux, etc...
Hermès:
register_globals , tu parles de ceci?


artémis, essaie de faire ceci
foreach($_POST['suppr] as $key=>$value) 
mais je ne serais trop de conseiller de bien vérifier ce que contient la variable avant de générer ta requête.

Posté : 12 avr. 2006, 17:20
par Invité
bin voilà j'ai essayé le premier code mais rien de nouveau
je viens ensuite de réessayer le second et s'affiche une erreure...
je ne sais plus trop quoi faire :(
voilà du travail rémunéré et fait par un soit disant programmeur....
génial après un mois je me rends compte que de plus en plus de choses bug...
d'ou vous comprendrez mon incompétance...lol
mais j'ai qd meme la volonté de faire fonctionner mon site!

Posté : 12 avr. 2006, 17:40
par Ryle
Il te faut faire un mix des deux... cela dit pourquoi utiliser un tableau associatif quand on fait un foreach sur un tableau à une dimension ?

Donc à changer au niveau du code html : donner le même nom à tous tes input et modifier leur valeur :
echo "<input type='checkbox' name='suppr[]' value='".$data[$i]."' />"; 
Et au niveau de ton foreach :
if($_POST['suppr']) { // si la variable est passée
  foreach($_POST['suppr'] as $value) { // pour chaque valeur
    $req1 = "SELECT id_membre, num FROM tem_photos WHERE nom='$value'"; 
    $result1 = mysql_query($req1) or die(mysql_error()); 
    while($row = mysql_fetch_assoc($result1)) { 
      if($row['num'] == 1) unlink("../../photosmembres/vignettes/".$row['id_membre'].".jpg"); 
    } // fin while

    $req2 = "DELETE FROM tem_photos WHERE nom='$value'"; 
    $result1 = mysql_query($req2) or die(mysql_error()); 
    unlink("../../photosmembres/grandes/$value"); 
  }// fin foreach
}// fin if

Posté : 12 avr. 2006, 18:22
par artémis
merci pr ton code! :)
si je t'envoi ma page serais tu prets a m'aider en m'insérent ton code au bon endroit?
merci d'avance!