8795 sujets

Développement web côté serveur, CMS

Bonjour à toutes et à tous et bonne année ^^

Je ne trouve pas de solution précise à mon problème sur les autres forums, alors je me retourne à vos compétences ^^

Voilà j'ai un souci au niveau d'un code PHP
Quand je selectionne plusieurs checkbox d'un formulaire (checkbox dynamique) aucune valeur n'est n'envoyée dans la base de données :

voilà le code du formulaire :
<?php
mysql_connect("localhost", "root", ""); // Connexion a MySQL
mysql_select_db("gestiondesprojets"); // Selection de la base de données
				
$sql = "SELECT colanom, colaprenom, colamail FROM collaborateur ORDER BY colanom ASC"; // ORDER BY renvoi les données triées (ici par nom croissant)
$result = mysql_query($sql) or die("La base est vide"); 
$row_users = mysql_fetch_assoc($result);
				
				
	do { 
	echo"<table>";
	echo"<tr>"; 
	echo"<td>";
?>
					
<input type="checkbox" name="user_<?php echo $row_users['colamail']; ?>" value="0" />
					
<?php echo $row_users['colanom'];  echo " "; echo $row_users['colaprenom'];
	echo "</td>";
	echo "</tr>";
	echo "</table>";
					
	   }

	while ($row_users = mysql_fetch_assoc($result));
	
            {
	
            $rows = mysql_num_rows($result);
				
	} 
				
	if($rows > 0) 
	{
	
            mysql_data_seek($result, 10);
					
	}
				
				
?>


Et voici celui de la page de traitement :


$sql4="SELECT sousprojetid FROM sousprojet WHERE sousprojetnom = '$nomsousprojet'";
$req4= mysql_query($sql4) or die ('Erreur SQL : <br/>'.$sql4);
$idss = mysql_fetch_array($req4);
					
					
$_POST['user_'.$row_users['colamail']] = mysql_real_escape_string($_POST['colmail']);
					
$mel = $_POST['user_'.$row_users['colamail']];
$date = date('Y-m-d');
					
					
if(isset($_POST['user_'.$row_users['colamail']]) && $_POST['user_'.$row_users['colamail']] == "on") // Si la checkbox est cochée
{
					
foreach ($_POST['user_'.$row_users['colamail']] as $mel)
	{
							
					
$sql16= "INSERT INTO est_associe (colamail, sousprojetid, date) VALUES ('$mel', '$idss[sousprojetid]', '$date')";
$req16=mysql_query($sql16)or die('Erreur SQL : <br/>'.$sql16);
							
	}
}

					
else
					
{ 					
					
$sql6= "INSERT INTO est_associe (colamail, sousprojetid, date) VALUES ('$utilisateurs',   '$idss[sousprojetid]', '$date')";				
$req6=mysql_query($sql6)or die('Erreur SQL : <br/>'.$sql6);
					
}


Merci d'avance pour votre aide précieuse Smiley cligne
Modifié par ChristOffDandy (09 Jan 2009 - 11:58)
Hello ChristOffDandy et bienvenue sur le forum, Smiley smile

là tout de suite j'ai un peu la flemme d'alimenter des tables à la main pour faire le test... mais si tu peux nous coller un dump de PHPMyAdmin (les CREATE TABLE et les INSERT) je jetterai un oeil. Smiley cligne
Tu n'as qu'à le coller ici (à condition de ne sélectionner que les tables qui nous intéressent Smiley langue !)
Voilà le dump, il devrait contenir toutes les informations dont tu as besoin.

Merci de ton aide :

-- phpMyAdmin SQL Dump
-- version 2.11.6
--  http://www.phpmyadmin.net
 
--
-- Serveur: localhost
-- Généré le : Ven 09 Janvier 2009 à 14:31
-- Version du serveur: 5.0.51
-- Version de PHP: 5.2.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de données: `gestiondesprojets`
--

-- --------------------------------------------------------

--
-- Structure de la table `collaborateur`
--

CREATE TABLE `collaborateur` (
  `colamail` varchar(50) NOT NULL,
  `colanom` varchar(20) default NULL,
  `colaprenom` varchar(50) default NULL,
  PRIMARY KEY  (`colamail`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Contenu de la table `collaborateur`
--

INSERT INTO `collaborateur` (`colamail`, `colanom`, `colaprenom`) VALUES
('a@group.com', 'Ba', 'A'),
('b@group.com', 'B', 'Al'),
('c@group.com', 'D', 't'),
('d@group.com', 'S', 'n'),
('e@group.com', 'V', 'n'),
('f@group.com', 'Ma ', 'Ch'),
('g@group.com', 'Pl', 'Cl'),
('h@group.com', 'Vi', 'tophe'),
('i@group.com', 'Je', 'Dom'),

-- --------------------------------------------------------

--
-- Structure de la table `est_associe`
--

CREATE TABLE `est_associe` (
  `colamail` varchar(100) NOT NULL,
  `sousprojetid` int(11) NOT NULL auto_increment,
  `date` date default NULL,
  PRIMARY KEY  (`colamail`,`sousprojetid`),
  KEY `sousprojetnom` (`sousprojetid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;

--
-- Contenu de la table `est_associe`
--


-- --------------------------------------------------------

--
-- Structure de la table `projet`
--

CREATE TABLE `projet` (
  `projetid` int(11) NOT NULL auto_increment,
  `projetnom` varchar(20) default NULL,
  `datedebut` date default NULL,
  `datefin` date default NULL,
  `idcate` int(11) default NULL,
  `colamail` varchar(50) default NULL,
  PRIMARY KEY  (`projetid`),
  KEY `colamail` (`colamail`),
  KEY `catecode` (`idcate`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Contenu de la table `projet`
--

INSERT INTO `projet` (`projetid`, `projetnom`, `datedebut`, `datefin`, `idcate`, `colamail`) VALUES
(1, 'Projet Hotline 1', '2009-01-01', '2009-01-31', 2, 'a@group.com'),
(2, 'Projet devis 1', '2009-01-24', '2009-01-31', 1, 'b@group.com');

-- --------------------------------------------------------

--
-- Structure de la table `sousprojet`
--

CREATE TABLE `sousprojet` (
  `sousprojetid` int(11) NOT NULL auto_increment,
  `sousprojetnom` varchar(30) NOT NULL default '',
  `sousprojetconso` int(11) default NULL,
  `sousprojetrae` int(11) default NULL,
  `sousprojetcharini` int(11) default NULL,
  `sousprojetcp` varchar(50) default NULL,
  `projetid` int(20) default NULL,
  PRIMARY KEY  (`sousprojetid`),
  KEY `projetnom` (`projetid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;

--
-- Contenu de la table `sousprojet`
--

INSERT INTO `sousprojet` (`sousprojetid`, `sousprojetnom`, `sousprojetconso`, `sousprojetrae`, `sousprojetcharini`, `sousprojetcp`, `projetid`) VALUES
(1, 'Essai', 0, 0, 10, 'a@group.com', 1),
(2, 'gtftgfgtg', 0, 0, 47, 'b@group.com', 1),
(3, 'dcrfvghyqs', 0, 0, 5, 'b@group.com', 1),
(4, 'dcert', 0, 0, 10, 'c@group.com', 1),
(5, 'sedcrfvtg', 0, 0, 2, 'c@group.com', 1),
(6, 'vvvvvv', 0, 0, 1, 'd@group.com', 1),
Hem... désolé mais je ne comprends rien à ta page de traitement ! Smiley murf

D'où sort $_POST['colmail'] ?

Tu fais une boucle foreach sur $_POST['user_'.$row_users['colamail']] qui a toutes les chances d'être vide... et qui de toute façon n'est pas un Array...

Tu testes $mavar == 'on' mais tu as affecté une valeur de 0 à tes checkboxs.


En l'état je t'invite à faire un
print_r($_POST);
dans ta page de traitement pour voir si tu fais bien ce que tu voulais faire...
Alors en faisant un print_r($POST]; dont voicile résultat :

Array ( [utilisateurs] => abaldanello@sopragroup.com [proj] => Projet Hotline 1 [user_eadolphe@sopragroup_com] => 0 [user_gaguillon@sopragroup_com] => 0 [user_jmbert@sopragroup_com] => 0 [nomsousprojet] => rdcxa [charinissproj] => 10 [Submit] => OK ) 


J'ai bien dans mes variables les mails selectionnés.

de plus j'ai enlevé le test sur $_POST['colmail'] qui servait à vérifier les caracteres.

et j'ai changé mon for each pour un while

j'ai donc :

while  ($_POST['user_'.$row_users['colamail']] == "on")
	{
							
					
							$sql16= "INSERT INTO est_associe (colamail, sousprojetid, date) VALUES ('$mel','$idss[sousprojetid]', '$date')";
							$req16=mysql_query($sql16)or die('Erreur SQL : <br/>'.$sql16);
							
	}

Mais toujours un souci je passe directement dans le cas où aucune case n'est cochée à savoir :
[code]else

{

$sql6= "INSERT INTO est_associe (colamail, sousprojetid, date) VALUES('$utilisateurs', '$idss Smiley sousprojetid ', '$date')"; $req6=mysql_query($sql6)or die('Erreur SQL : <br/>'.$sql6);

}

La variables '$utilisateurs' vient d'un text form que l'on selectionne au préalable au cas où aucune case n'est sélectionnée.

j'espere que tu comprends un peu mieux. sinon n'hésite pas à me psoer des questions.
Modifié par ChristOffDandy (09 Jan 2009 - 15:48)
Pourquoi ne pas faire
...
do {
echo '<p>';
?>
<input type="checkbox" name="user[]" value="<?php echo $row_users['colamail']; ?>"  />
<?php echo $row_users['colanom'].' '.$row_users['colaprenom'].'</p>';
}
...
Ce qui te donnerait un vrai tableau...
Modifié par Heyoan (09 Jan 2009 - 16:16)
Euh... ça fait plus qu'alléger ton code : ça te permet de récupérer un Array utilisable.
foreach ($_POST['user'] as $mel) {
	echo "<p>$mel</p>";
}
à la place du echo je devrais pas plutot mettre ma requete ??


non marche toujours pas Smiley decu Smiley edit Modifié par ChristOffDandy (09 Jan 2009 - 16:47)
ChristOffDandy a écrit :
à la place du echo je devrais pas plutot mettre ma requete ??
Ben oui... c'était juste pour que tu vois que tu récupérais bien les emails Smiley lol !
quand je met les echos rien ne s'affiche, et quand je met ma requete j'ai toujours le même problème. je commence à desesperer
Modifié par ChristOffDandy (09 Jan 2009 - 16:57)
ChristOffDandy a écrit :
je commence à desesperer
Moi aussi... Smiley sweatdrop

je résume !

dans le formulaire :
...
do {
echo '<p>'; ?>
<input type="checkbox" name="user_email[]" value="<?php echo $row_users['colamail']; ?>"  />
<?php echo $row_users['colanom'].' '.$row_users['colaprenom'].'</p>';
}
...
(j'ai renommé user en user_email pour être plus cohérent)

Dans la page de traitement
$req4= mysql_query($sql4) or die ('Erreur SQL : <br/>'.$sql4);
$idss = mysql_result($req4 ,0);
$date = date('Y-m-d');
if (!empty($_POST['user_email'])) {
	foreach ($_POST['user_email'] as $mel) {
		$sql16= "INSERT INTO est_associe (colamail, sousprojetid, date) VALUES ('$mel', '$idss', '$date')";
		mysql_query($sql16)or die('Erreur SQL : <br/>'.$sql16);
	}
} else {
	$sql6= "INSERT INTO est_associe (colamail, sousprojetid, date) VALUES ('$utilisateurs', '$idss', '$date')";
	mysql_query($sql6)or die('Erreur SQL : <br/>'.$sql6);
}

Modifié par Heyoan (09 Jan 2009 - 17:17)
fiouuuuu j'ai mis du temps à comprendre mais ça marche (enfin).

Et bien il me reste pluqu'à te remercier pour ton aide mais surtout pour ta patience!!

J'ai qu'une chose à dire vive Alsacreations
Modifié par ChristOffDandy (09 Jan 2009 - 17:26)
Cool ! Smiley ola

Sinon il faudrait associer un LABEL à chaque INPUT :
do {
$iter++; // pour affecter un id à chaque INPUT ce qui permet de lier un LABEL
echo '<p>'; ?>
<input type="checkbox" name="user_email[]" id="id_user_email_<?php echo $iter; ?>" value="<?php echo $row_users['colamail']; ?>"  />
<?php echo '<label for="id_user_email_'.$iter.'">'.$row_users['colanom'].' '.$row_users['colaprenom'].'</label></p>';
}
Attention également au fait que l'INSERT peut planter si l'enregistrement existe déjà.