probleme undefined offset !!!!

Répondre
raka
le 06/02/2005 à 14:33
raka
Voila je viens de créer un ptit script qui permet des recupérer des valeurs dans une base de donnée par le biais de checkbox cochée ou non cochée. Quand je coche une ou plusieurs checkxbox, ke resultat correspondant (dans la db) a la case coché s'affiche. Mais case qui sont cochée affiche bien unn résultat la n'est pas le probleme. Le probleme est que les cases (qui suivent la premiere case cochée) qui ne sont pas coché m'indique une erreur: Notice: Undefined offset: 1 in d:\archibel\temp\testbeta.php on line 38

Par exemple si je coche uniquement la case 1 bah tout les autres qui suivent (et qui ne sont pas cochée) auront une errreur offset machin chose.
par contre si je coche la 3ieme case les deux qui premiers case n'ont pas d'erreur mais celle qui suivent la 3ieme on une erreur.

J'espere que vous pourrez m'aider car c'est une partie important d'un projet que je doit realiser pour mes etudes et je bloque deja au debut.

Voici mon code. (si vous voulez visualiser , créer une ptite db appelée archibel et une table appellée amazone. Crée dedans deux champ (id , nom).


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" type="text/css" title="Exemple" href="style.css" />
</head>

<body>

<form method="post" action="testbeta.php">
<input type="hidden" name="envoi" value="yes">
<input type="text" name="diagnostique"><br>
<input type="checkbox" name="options[]" value="produit1">produit1<br>
<input type="checkbox" name="options[]" value="produit2">produit2<br>
<input type="checkbox" name="options[]" value="produit3">produit3<br>
<input type="checkbox" name="options[]" value="produit4">produit4<br>
<input type="submit">
<form>


<?

mysql_connect("localhost", "root", ""); // Connexion à MySQL
mysql_select_db("archibel"); // Sélection de la base coursphp

$reponse = mysql_query("SELECT * FROM amazone LIMIT 0,4"); // Requête SQL

$envoi = @$_POST['envoi']; //aiguilleur
$options = @$_POST['options']; //Contenu des cases à cocher
$i = 0;


if ($envoi == 'yes')
{
while ($donnees = @mysql_fetch_array($reponse) )
{
if($options[$i] == $donnees['nom'] AND $options[$i] != null)
{?>
<p>
<strong>nom:</strong> <? echo $donnees['nom'];?> <br>
<?$i++;
}?></p>

<? }

}

mysql_close(); // Déconnexion de MySQL

?>

</body>
</html>
bibi
le 06/02/2005 à 14:50
bibi
en fait, je pense qu'il faudrai ke tu changes pour tes checkbox:
regarde comment je fais moi, peut etre que ca t'aidera

saisie.php
<form name='delete' action='main.php?page=suppr' method='post'><?
$req = mysql_query('SELECT NomFichier,NumFichier,NumetatFichier,NumtypeFichier FROM fichier WHERE NumUserFichier = "'.$data['NumUser'].'" AND NumTypeFichier ="'.$ligne['NumType'].'" ORDER BY NomFichier ASC');

while($fic = mysql_fetch_array($req))
{
?><input type="checkbox" name="fichier[<?= $fic['NumFichier'];?>]" value="<?= $fic['NomFichier'];?>"/><?=$fic['NomFichier'];?><?
}


traitement
foreach($_POST['fichier'] as $key => $value)
{
$del = mysql_query('DELETE FROM fichier WHERE NumFichier = "'.$key.'"') or die("Erreur SQL");
}
commit suicide
raka
le 06/02/2005 à 14:59
raka
je vois a peu pres ce que tu fait. SI je ne me trompe pas. A partir de ta bd tu crées tes checkbox fichier et quand tu veux en effacer une tu checked la case et si elle est checker tu efface ce qu'il y a dans ta bd et qui correspond a cette case. La ou je bloque c au niveau ded $key.
c'est quoi cetet variable?
keitarosan
le 06/02/2005 à 15:20
keitarosan
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" type="text/css" title="Exemple" href="style.css" />
</head>

<body>

<form method="post" action="testbeta.php">
<input type="hidden" name="envoi" value="yes">
<input type="text" name="diagnostique"><br>
<input type="checkbox" name="options[]" value="produit1">produit1<br>
<input type="checkbox" name="options[]" value="produit2">produit2<br>
<input type="checkbox" name="options[]" value="produit3">produit3<br>
<input type="checkbox" name="options[]" value="produit4">produit4<br>
<input type="submit">
<form>


<?

mysql_connect("localhost", "root", ""); // Connexion à MySQL
mysql_select_db("archibel"); // Sélection de la base coursphp

$reponse = mysql_query("SELECT * FROM amazone LIMIT 0,4"); // Requête SQL

$envoi = @$_POST['envoi']; //aiguilleur
$options = @$_POST['options[]']; //<----- //Contenu des cases à cocher
$i = 0;


if ($envoi == 'yes')
{
while ($donnees = @mysql_fetch_array($reponse) )
{
if($options[$i] == $donnees['nom'] AND $options[$i] != null)
{?>
<p>
<strong>nom:</strong> <? echo $donnees['nom'];?> <br>
<?$i++;
}?></p>

<? }

}

mysql_close(); // Déconnexion de MySQL

?>

</body>
</html>


voila, essaye ca, voir ce que ca donne...
y auras peut etre un peu de mieux ;)
>> http://projectopensource.free.fr/index.php?m=2&m2=5&s=8 <<
keitarosan
le 06/02/2005 à 15:21
keitarosan
<?php
.
.
.
$options = @$_POST['options[]'];
.
.
.
?>
>> http://projectopensource.free.fr/index.php?m=2&m2=5&s=8 <<
keitarosan
le 06/02/2005 à 16:41
keitarosan
fait:

<?php

echo ("<pre>");
var_export($_POST["options"]);
var_export($_POST["options[]"]);
echo ("</pre>");

?>

avec ca, tu vas voir ce que contiennent tes variable options.

Et je viens d'y penser, mais si tu ne les coches pas, elles n'exisent pas, d'ou le probleme d'offset ;)

si tu ne veux pas se probleme, utilise plutot la boucle "foreach()" a la place de la boucle "for()"
>> http://projectopensource.free.fr/index.php?m=2&m2=5&s=8 <<
keitarosan
le 06/02/2005 à 17:57
keitarosan
oup, pardon, a la place de ta boucle while, ce qui au final revient au meme qu'une boucle for ^^
>> http://projectopensource.free.fr/index.php?m=2&m2=5&s=8 <<
raka
le 06/02/2005 à 18:20
raka
cette boucle la marche tres bien je pense que c plutot la condition dans le if() qui fait planté le bazard . on dirait que quand les case sont vide il point sur rien du tout et ca il n'accepte pas.
Répondre
LoadingChargement en cours