UPDATE BDD avec checkbox

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : UPDATE BDD avec checkbox

Re: UPDATE BDD avec checkbox

par quiqui » 18 avr. 2011, 13:31

WOUAHOU !!!
Que dire sinon un grand merci pour ton aide misterflo !!!
Merci, merci merci...

Re: UPDATE BDD avec checkbox

par misterflo » 16 avr. 2011, 20:08

Salut,
j'ai refais de manière un peu plus propre, il y a encore quelques petits trucs à mettre à ta sauce.
Comme je l'ai dit, au lieu de prendre une valeur = 1 dans les checkbox, je mets la valeur du numéro d'une commande.
Ainsi le traitement sera plus facile, les cases cochées sont les numéros de commande à passer en 1.

Les modifications apportées sont :
- L'ajout d'un name="valid" dans ton <input type="image"... />
- Modification du traitement php, vers le début tu fais un $validation_reglt = $_POST[validation_reglt]; c'est faux, si jamais ce $_POST ne contient rien tu auras une jolie erreur php.
Il faut donc penser à vérifier si la valeur existe avant de la rentrer de l'appeler !!
- Déplacement du traitement php, je l'ai mis au niveau de l'affichage du formulaire, ainsi soit on affiche le formulaire, soit on exécute le traitement php (si le bouton image a été cliqué).
<?php
session_start();
if(empty($_SESSION['membre']))
{
   header('Location: admin.php5');
}

$login = $_SESSION['membre'];

 try{
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '') or die(print_r($bdd->errorInfo()));
$bdd->exec('SET NAMES utf8');
}
   
 catch(Exeption $e){ 
die('Erreur:'.$e->getMessage());
}
  
$req = $bdd->prepare('SELECT * FROM membre WHERE login = :login');
$req->execute(array('login'=>$_SESSION['membre']));
$data = $req->fetch();
$req->closeCursor();


?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="style.css" media="screen" />
</head>

<body>
<div id="content">
<table width="1024" border="0"><tr><td align="center" valign="middle"><div id="logo"><p><img src="img/logo.gif" width="325" height="74" /><br />XXXXXX</p></div id="logo"></td></tr></table><br>

<table width="1010" border="0" align="center">
<tr>
  <td align="center">GESTION DES COMMANDES</td></tr></table>
<br />
<br />

       <table width="280" border="0">
       <form action="" method="post">
         <tr>
           <td width="160" align="left"><strong>N° Commande</strong></td>
           <td width="120" align="center"><strong>Règlement validé</strong></td>
          </tr>
         <tr>
           <td colspan="2">
           <?php
				//On vérifie que la personne clique sur le bouton image du formulaire.
				//Un input de type image retourne 2 valeur ..._x et ..._y, on vérifie qu'au moins un des deux existe pour continuer le traitement.
				if (isset($_POST['valid_x'])) {
					//Pour chaque case cochée on va passer sa validation à 1
					if (!empty($_POST['validation_reglt'])) {
						foreach ($_POST['validation_reglt'] as $reglt) {
							$req_update = $bdd->prepare('UPDATE commandes SET validation_reglt=1 WHERE num_commande=:num_commande');
							$req_update->bindValue('num_commande',$reglt,PDO::PARAM_INT);
							$req_update->execute();
						}
						$req_update->closeCursor();
					} else {
						echo "Veuillez cocher au moins une case.";
					}
				} else {
					$req = $bdd->prepare('SELECT DISTINCT num_commande, validation_reglt FROM commandes WHERE validation_reglt = :validation_reglt');
					$req->bindValue('validation_reglt',0,PDO::PARAM_INT);
					$req->execute();
					while( $data = $req->fetch()) {
						echo "<tr>";
						echo "<td width='160' align='left'>".$data['num_commande']."</a></td>";
						echo "<td width='120' align='center'><input type=\"checkbox\" name=\"validation_reglt[]\" value=\"{$data['num_commande']}\" /></td>"; 
						echo "</tr>";
					}
					$req->closeCursor();
				}
			?>
              </td>
           </tr>
           <tr>
           <td colspan="5" align="center">
           <br />
           <br />
           <input src="img/bouton-valid-off.jpg" alt="accueil" border="0" onMouseOver="this.src='img/bouton-valid-on.jpg'" onMouseOut="this.src='img/bouton-valid-off.jpg'" id="valid" type="image" name="valid" />
           </td>
           </tr>
           </form>
       </table>
 </div>
 </body>
 </html>

Re: UPDATE BDD avec checkbox

par quiqui » 16 avr. 2011, 14:44

Salut et merci de ta réponse,

Je ne passe pas d'une page à l'autre. Tout est sur le même fichier.
Le code complet de la page est comme suit :
<<?php
session_start();
if(empty($_SESSION['membre']))
{
  header('Location: admin.php5');
}

$login = $_SESSION['membre'];
$validation_reglt = $_POST[validation_reglt];

try{
$bdd = new PDO('mysql:host=xxx;dbname=xxx', 'xxx', 'xxx') or die(print_r($bdd->errorInfo()));
$bdd->exec('SET NAMES utf8');
}
  
catch(Exeption $e){ 
die('Erreur:'.$e->getMessage());
}
 
$req = $bdd->prepare('SELECT * FROM membre WHERE login = :login');
$req->execute(array('login'=>$_SESSION['membre']));
$data = $req->fetch();
$req->closeCursor();

if(!empty($_POST))
{
	$req_update = $bdd->prepare('UPDATE commandes SET validation_reglt=:validation_reglt WHERE num_commande=:num_commande');
	$req_update->execute(array(
							   'num_commande'=>$data['num_commande'],
							   'validation_reglt'=>$validation_reglt,
							   ));
	$req_update->closeCursor();
	
	}
	
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="style.css" media="screen" />
</head>

<body>
<div id="content">
<table width="1024" border="0"><tr><td align="center" valign="middle"><div id="logo"><p><img src="img/logo.gif" width="325" height="74" /><br />XXXXXX</p></div id="logo"></td></tr></table><br>

<table width="1010" border="0" align="center">
<tr>
  <td align="center">GESTION DES COMMANDES</td></tr></table>
<br />
  <br>

      <table width="280" border="0">
      <form action="reglement-commandes.php5" method="post">
        <tr>
          <td width="160" align="left"><strong>N° Commande</strong></td>
          <td width="120" align="center"><strong>Règlement validé</strong></td>
         </tr>
        <tr>
          <td colspan="2">
          <?php
		$req = $bdd->prepare('SELECT DISTINCT num_commande, validation_reglt FROM commandes WHERE validation_reglt = :validation_reglt');
		$req->execute(array('validation_reglt'=>'0'));
		while( $data = $req->fetch() )
			{
	   		 echo "<tr>";
			 echo "<td width='160' align='left'>".$data['num_commande']."</a></td>";
			 echo "<td width='120' align='center'><input type=\"checkbox\" name=\"validation_reglt\" value=\"1\" /></td>"; 
			 echo "</tr>";
			 }
			 $req->closeCursor();
			 ?>
             </td>
          </tr>
          <tr>
          <td colspan="5" align="center">
          <br />
          <br />
          <input src="img/bouton-valid-off.jpg" alt="accueil" border="0" onMouseOver="this.src='img/bouton-valid-on.jpg'" onMouseOut="this.src='img/bouton-valid-off.jpg'" id="valid" type="image" value="Envoyer"/>
          </td>
          </tr>
          </form>
      </table>
</div>
</body>
</html>
Et pour répondre à ta dernière question, les valeurs 0 et 1 de ma BDD sont bien des numériques.

Re: UPDATE BDD avec checkbox

par misterflo » 16 avr. 2011, 09:18

Salut,
comment récupères-tu le $data['num_commande'] d'une page à l'autre ?
Il faudrait la suite du code de la première partie, y a-t-il un bouton submit ?
Dans les checkbox plutôt que de mettre la valeur 1, je mettrai plutôt le numéro de la commande, ensuite on récupère le numéro de toutes les commandes dans un tableau (dans le name du input : validation_reglt[]), et toutes ces commandes ont leur règlement qui passe à 1.
D'ailleur, dans la bdd la valeur 0 ou 1 sont des numériques ? Si oui alors tu ne peux pas mettre la valeur dans un array() lors du execute() de ta requête.
$req = $bdd->prepare('SELECT DISTINCT num_commande, validation_reglt FROM commandes WHERE validation_reglt = :validation_reglt');
$req->bindValue('validation_reglt',0,PDO::PARAM_INT);
$req->execute();
while( $data = $req->fetch() )
{
	echo "<tr>";
	echo "<td width='160' align='left'>{$data['num_commande']}</td>";
	echo "<td width='120' align='center'><input type=\"checkbox\" name=\"validation_reglt[]\" value=\"{$data['num_commande']}\" /></td>"; 
	echo "</tr>";
}
$req->closeCursor();
Ensuite le traitement de modification :
if (isset($_POST['validation'])) {
foreach ($_POST['validation_reglt'] as $reglt) {
		$req = $bdd->prepare("UPDATE commandes SET validation_reglt = 1 WHERE num_commande = :num_commande");
		$req->bindValue('num_commande',$reglt,PDO::PARAM_INT);
		$req->execute();
}
}

UPDATE BDD avec checkbox

par quiqui » 16 avr. 2011, 02:10

Bonsoir,

J'ai une BDD avec une ligne comportant des numéros de commande et une autre ligne m'informant de la validation de paiement de ces dites commandes.
(si "validation_reglt" = 0, le paiement n'est pas encore accepté, si "validation_reglt" = 1, le paiement est accepté).
Je souhaite mettre à jour les lignes de validation de paiement avec des checkbox via une interface PHP.
Le principe : Une page en PHP affiche seulement les lignes dont la valeur de "validation_reglt" = 0 et grâce à une checkbox, j'update la valeur de 0 à 1 pour valider le paiement.

Pour faite apparaître tous les numéros de commandes dont la valeur "validation_reglt" = 0, j'utilise la boucle suivante :
<?php
		$req = $bdd->prepare('SELECT DISTINCT num_commande, validation_reglt FROM commandes WHERE validation_reglt = :validation_reglt');
		$req->execute(array('validation_reglt'=>'0'));
		while( $data = $req->fetch() )
			{
	   		 echo "<tr>";
			 echo "<td width='160' align='left'>".$data['num_commande']."</td>";
			 echo "<td width='120' align='center'><input type=\"checkbox\" name=\"validation_reglt\" value=\"1\" /></td>"; 
			 echo "</tr>";
			 }
			 $req->closeCursor();
			 ?>
Et pour UPDATER la valeur "validation_reglt", je me connecte à ma BDD et ensuite, j'utilise le code suivant :

<?php
$validation_reglt = $_POST[validation_reglt];

if(!empty($_POST))
{
	$req_update = $bdd->prepare('UPDATE commandes SET validation_reglt=:validation_reglt WHERE num_commande=:num_commande');
	$req_update->execute(array(
							   'num_commande'=>$data['num_commande'],
							   'validation_reglt'=>$validation_reglt,
							   ));
	$req_update->closeCursor();
	
	}
?>
Evidemment, ça ne fonctionne pas...
Je me dis que dans cette seconde partie de code, il faudrait peut-être que j'utilise à nouveau la boucle WHILE, puisque je m'en sert pour afficher tous les N° de commande dont "validation_reglt" = 0.
Mais je ne sais vraiment pas comment m'y prendre...

Quelqu'un peut-il m'aider ???
Merci d'avance...