Help...Warning: Invalid argument

Eléphanteau du PHP | 35 Messages

12 avr. 2006, 12:55

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

Eléphant du PHP | 451 Messages

12 avr. 2006, 13:35

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 ?
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphanteau du PHP | 35 Messages

12 avr. 2006, 13:56

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?

Eléphant du PHP | 135 Messages

12 avr. 2006, 13:59

la variable $suppr doit être un tableau :)

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

Eléphanteau du PHP | 35 Messages

12 avr. 2006, 14:53

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:

Eléphant du PHP | 135 Messages

12 avr. 2006, 14:59

echo "<input type='checkbox' name='suppr[".$data[$i]."]' value='' />"; 
par
echo "<input type='checkbox' name='suppr[]' value='".$data[$i]."' />"; 

Eléphanteau du PHP | 35 Messages

12 avr. 2006, 16:02

merci pr ton code mai ca affiche toujours la meme erreure :s

Eléphant du PHP | 312 Messages

12 avr. 2006, 16:18

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

Eléphant du PHP | 135 Messages

12 avr. 2006, 16:36

Bien vu Hermès, ce n'est pas si ça se trouve, c'est bien ça l'erreur :)

Eléphanteau du PHP | 35 Messages

12 avr. 2006, 16:37

oki mlerci je vais essayer :wink:

Eléphant du PHP | 312 Messages

12 avr. 2006, 16:38

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

Eléphant du PHP | 135 Messages

12 avr. 2006, 16:44

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.

Invité
Invité n'ayant pas de compte PHPfrance

12 avr. 2006, 17:20

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!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 avr. 2006, 17:40

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

Eléphanteau du PHP | 35 Messages

12 avr. 2006, 18:22

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!