UPDATE une ligne dans la BDD

Répondre
mohaalba
le 12/03/2010 à 09:37
mohaalba
Bonjour a tous,

Voila j'ai un problème dans mon code php je suis sure que c'est tout bete mais je ne comprend pas;
j'ai un tableau dans lequel j'ai une colonne que je peux mettre à jour, mon problème c'est que quand je coche une seul ligne et donc à mettre à jours dans la BDD il me met toutes la colonne à la même valeur!!!!?
(je croix que c'est parce qu'il faut récuperer 2 valeurs:l'ID et l'état mai je sais pas comment récuperer 2 valaur dans value????)
je ne voit pas comment faire surtout que je suis débutant.
Aidez moi SVP en vous remerciant d'abord.
voila mon code:

<?php 
<?php
include_once ('verif_admin.php');
?>
<?php
session_start();
error_reporting(E_ALL);
/****************************/
require_once('../config.php');
require_once('../fonctions.php');
$titre_page='Mise à jour de commandes';
include_once('../haut.php');
echo'<link href="../style.css" rel="stylesheet" type="text/css" />';
/****************************/
//$pseudo=formulaires($_POST['pseudo']);
/****************************/
if(!empty($_POST['etat_chek']))

{

//echo $etat_chek,'<br />';
foreach($_POST['etat_chek'] as $val)
{
//echo $val,'<br />';
/*"UPDATE membres SET level='registered' WHERE cle_activation ='$cle_activation' AND level='en_attente'"*/
mysql_query("UPDATE commandes SET etat='$val' WHERE pseudo='$val'") or die ('Impossible de s&eacute;lectionner une base
de donn&eacute;e.'.mysql_error());
echo'<div align="center" ><r><strong>L\'état de commande "'.$val.'" à été bien met à jour</strong></r><br />';
}


}
else
{
// Nous affichons notre tableau des commandes
echo'<form method="post" action="etat_commande.php">';
$entete = array('Client','N° Commande','Date commande','Fichier','Q','Etat','Date livraison','Expédition');
echo'<div align="center" ><r><strong>Liste des clients enregistées - Mettre à jour de l\'état des commandes</strong></r><br />';
echo'<table width="1150" height="40" border="1" align="center" bgcolor=#FF0000>
<colgroup>
<col style="width: 150px">
<col style="width: 120px">
<col style="width: 100px">
<col style="width: 200px">
<col style="width: 60px">
<col style="width: 200px">
<col style="width: 100px">
<col style="width: 220px">
</colgroup>
<tr>
<th scope="col">'.$entete[0].'</th>
<th scope="col">'.$entete[1].'</th>
<th scope="col">'.$entete[2].'</th>
<th scope="col">'.$entete[3].'</th>
<th scope="col">'.$entete[4].'</th>
<th scope="col">'.$entete[5].'</th>
<th scope="col">'.$entete[6].'</th>
<th scope="col">'.$entete[7].'</th>
</tr>
</table>';
$result = mysql_query("SELECT nom, prenom,ref_com, date_com, fichier_com, Q, etat, date_livraison, expedition,pseudo_com FROM commandes ORDER BY id_c DESC") or die ('Impossible de s&eacute;lectionner une base de donn&eacute;e.'.mysql_error());

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
/****Modification de la date : Américan vers Europe**********/
$date_comm = $row[3];
$date_liv = $row[7];
$date_comm = preg_replace('!^([0-9]{4})+-([0-9]{2})+-([0-9]{2})$!', '$3/$2/$1', $date_comm); #Modifiation de la date
$date_liv = preg_replace('!^([0-9]{4})+-([0-9]{2})+-([0-9]{2})$!', '$3/$2/$1', $date_liv); #Modifiation de la date
$row[3] = $date_comm ;
$row[7] = $date_liv ;
/***************************************************************/
echo'<table width="1150" height="40" border="1" align="center" >
<colgroup>
<col style="width: 150px">
<col style="width: 120px">
<col style="width: 100px">
<col style="width: 200px">
<col style="width: 60px">
<col style="width: 200px">
<col style="width: 100px">
<col style="width: 220px">
</colgroup>
<tr>
<th scope="col" ><b>'.$row[1].' '.$row[0].'</b></th>
<th scope="col" >'.$row[2].'</th>
<th scope="col" >'.$row[3].'</th>
<th scope="col" >'.$row[4].'</th>
<th scope="col" >'.$row[5].'</th>
<th scope="col" ><b>'.$row[6].'</b>

<p>
<label>
<input type="checkbox" name="etat_chek[]" value="NEWS" />
NEW</label>
<label>
<input type="checkbox" name="etat_chek[]" value="EN COURS" />
ENC</label>
<br/>
<label>
<input type="checkbox" name="etat_chek[]" value="EXPEDITION" />
EXP</label>
<label>
<input type="checkbox" name="etat_chek[]" value="TERMINEE" />
TER</label>
</p>
</form>
</th>
<th scope="col" >'.$row[7].'</th>
<th scope="col" >'.$row[8].'</th>
</tr>
</table>';

//printf("ID : %s Nom : %s", $row[0], $row[1]);

}
echo'<br/><label><input type="submit" value="Mettre à jour" /></label></form>';
}

/*if (isset($_POST['checkbox'])){

for ($i = 0, $c = count($_POST['checkbox']); $i < $c; $i++) { echo '<br/><b>' .$_POST['checkbox'][$i]. '</b>'; }
}

$tab_quand = $_POST['checkbox']; //$tab_quand est un tableau, attention !!!!
foreach($tab_quand as $checkbox)
{
echo $checkbox.' ';
}*/




?>
<html>
<head>
<title>xxxxx : Mise à jour de commandes</title>
<link href="../style.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
r {
color:red;
}
b {
color:blue;
}
-->
</style>
</head>

<body>
<div align="center"><a href="http://xxxx/xxxx_admin/membre_admin.php"> Retour</a></div>
<?php
include_once('../bas.php');
?>
?>
Amery
le 12/03/2010 à 10:47
Amery
Normal, puisque dans ton foreach tu mets $val partout dans ta requête. Donc tous les champs ont la valeur $val.

Ta première idée (voire ton thread précédent) était la bonne. Utilise plutôt un select à la place de tes checkbox.

Bon, je vois que tu bloques, donc pour ton select tu peux utiliser ce bout de code :

<select name="etat">
<?php
$status = array('NEWS','EN COURS','EXPEDITION','TERMINEE');
foreach ($status as $valeur) {
$selected = ($valeur == $row[6]) ? 'selected="selected"' : '';
echo '<option value="'.$valeur.'" '.$selected.'>'.$valeur.'</option>'; }
?>
</select>
mohaalba
le 12/03/2010 à 11:39
mohaalba
je croix que vous m'avez mal compris.

au fait dans $val j'ai les bons case qui sont coché mais je ne voit pas comment enregistré les 6 valeurs récuperer(dans chekbox) de la boucle while correspondant à chaque ligne??

merci infiniment pour votre aide
mohaalba
le 12/03/2010 à 11:52
mohaalba
excusez moi j'ai compris ce vous voulez dire.il faut ke j'utilise menu déroulant mais là j'aurai le même problème?
comment récuperer la valeur de ID(ou pseudo_com par exemple) pour modifier que la ligne que nous avons modifier.

je vous remercie encore
moogli
le 12/03/2010 à 12:06
moogli
salut,

Je pense que tu n'a pas compris comment fonctionne la récupération des valerus d'un formulaire !

1/ les checkbox :
comme déja dit, avec une nom du style ckeck[] tu récupère un tableau dans l'index check de $_POST (en clair $_POST['check'] est un tableau a partir de la tu peu mettre checked="checked" dans la balise de la case à cocher avec un simple if ou l'opérateur conditionnel utilisé par Amery dans sa réponse.

2/ la balise select :
si tu a plusieur option à cocher il faut utiliser un select de type multiple
Le fonctionnement de select est expliquer ici
La pré selection se faisant comme indiqué par Amery.

avant otu autre chose :
1/ définit l'afefichage que tu veut, case à cocher ou liste à choix multiple
2/ définit clairement le fonctionnement
3/ Fait un essai simple sans fioriture pour comprendre le fonctionnement.
4/ On est toujours la pour t'aider en cas de soucis.

@+
Il en faut peu pour être heureux !!!!!
mohaalba
le 12/03/2010 à 12:30
mohaalba
je vais faire ça.
je vous remercie pour votre réponse.
la je commence à mieux comprendre.
mohaalba
le 12/03/2010 à 15:30
mohaalba
j'ai fait ce vous m'avez dit et là j'arrive à récuperer les valeur selectionné mais je ne voit pas comment en registrer dans ma BDD valeur(NEWS,...) pour chaque client(pseudo_com) correspondant.
Autre question SVP: à chaque fois que j'envoie le formulaire il passe dans if(!empty($_POST['etat'])) même si on selectionne, et je ne comprend pas!!?

je vous remercie d'avance.

voila mon code:
<?php 
<?php
include_once ('verif_admin.php');
?>
<?php
session_start();
error_reporting(E_ALL);
/****************************/
require_once('../config.php');
require_once('../fonctions.php');
$titre_page='Mise à jour de commandes';
include_once('../haut.php');
echo'<link href="../style.css" rel="stylesheet" type="text/css" />';
/****************************/
//$pseudo=formulaires($_POST['pseudo']);
/****************************/
if(!empty($_POST['etat']))

{

foreach($_POST['etat'] as $val)
{

echo $val,'<br />';
//echo $pseudoo,'<br />';

mysql_query("UPDATE commandes SET etat='$val'") or die ('Impossible de s&eacute;lectionner une base
de donn&eacute;e.'.mysql_error());
echo'<div align="center" ><r><strong>L\'état de commande "'.$val.'" à été bien met à jour</strong></r><br />';

}

}
else
{
// Nous affichons notre tableau des commandes
echo'<form method="post" action="etat_commande.php">';
$entete = array('Client','N° Commande','Date commande','Fichier','Q','Etat','Date livraison','Expédition');
echo'<div align="center" ><r><strong>Liste des clients enregistées - Mettre à jour de l\'état des commandes</strong></r><br />';
echo'<table width="1150" height="40" border="1" align="center" bgcolor=#FF0000>
<colgroup>
<col style="width: 150px">
<col style="width: 120px">
<col style="width: 100px">
<col style="width: 200px">
<col style="width: 60px">
<col style="width: 200px">
<col style="width: 100px">
<col style="width: 220px">
</colgroup>
<tr>
<th scope="col">'.$entete[0].'</th>
<th scope="col">'.$entete[1].'</th>
<th scope="col">'.$entete[2].'</th>
<th scope="col">'.$entete[3].'</th>
<th scope="col">'.$entete[4].'</th>
<th scope="col">'.$entete[5].'</th>
<th scope="col">'.$entete[6].'</th>
<th scope="col">'.$entete[7].'</th>
</tr>
</table>';
$result = mysql_query("SELECT nom, prenom,ref_com, date_com, fichier_com, Q, etat, date_livraison, expedition,pseudo_com FROM commandes ORDER BY id_c DESC") or die ('Impossible de s&eacute;lectionner une base de donn&eacute;e.'.mysql_error());
$i=0;
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
/****Modification de la date : Américan vers Europe**********/
$date_comm = $row[3];
$date_liv = $row[7];
$date_comm = preg_replace('!^([0-9]{4})+-([0-9]{2})+-([0-9]{2})$!', '$3/$2/$1', $date_comm); #Modifiation de la date
$date_liv = preg_replace('!^([0-9]{4})+-([0-9]{2})+-([0-9]{2})$!', '$3/$2/$1', $date_liv); #Modifiation de la date
$row[3] = $date_comm ;
$row[7] = $date_liv ;
/***************************************************************/
echo'<table width="1150" height="40" border="1" align="center" >
<colgroup>
<col style="width: 150px">
<col style="width: 120px">
<col style="width: 100px">
<col style="width: 200px">
<col style="width: 60px">
<col style="width: 200px">
<col style="width: 100px">
<col style="width: 220px">
</colgroup>
<tr>
<th scope="col" ><b>'.$row[1].' '.$row[0].'</b></th>
<th scope="col" >'.$row[2].'</th>
<th scope="col" >'.$row[3].'</th>
<th scope="col" >'.$row[4].'</th>
<th scope="col" >'.$row[5].'</th>
<th scope="col" ><b>'.$row[6].'</b>

<select name="etat[]">';

$status = array('NEWS','EN COURS','EXPEDITION','TERMINEE');
foreach ($status as $valeur) {
$selected = ($valeur == $row[6]) ? 'selected="selected"' : '';
echo '<option value="'.$valeur.'" '.$selected.'>'.$valeur.'</option>'; }

echo'</select>


</th>
<th scope="col" >'.$row[7].'</th>
<th scope="col" >'.$row[8].'</th>
</tr>
</table>';

$pseudoo=$row[9];
//printf("ID : %s Nom : %s", $row[0], $row[1]);

}

echo'<br/><label><input type="submit" value="Mettre à jour" /></label></form>';
}

/*if (isset($_POST['checkbox'])){

for ($i = 0, $c = count($_POST['checkbox']); $i < $c; $i++) { echo '<br/><b>' .$_POST['checkbox'][$i]. '</b>'; }
}

$tab_quand = $_POST['checkbox']; //$tab_quand est un tableau, attention !!!!
foreach($tab_quand as $checkbox)
{
echo $checkbox.' ';
}*/




?>
<html>
<head>
<title>xxxx : Mise à jour de commandes</title>
<link href="../style.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
r {
color:red;
}
b {
color:blue;
}
-->
</style>
</head>

<body>
<div align="center"><a href="http://xxxx/xxx_admin/membre_admin.php"> Retour</a></div>
<?php
include_once('../bas.php');
?>

?>
moogli
le 16/03/2010 à 12:52
moogli
salut,

eux la faut reprendre calmement, au final c'est quoi le problème ?

Met ton code sur le wall et pas dans les messages, ça pollue le tout et ça devient incompréhensible.
donc :
1/ quel est le problème (un seul à la fois)
2/ un wall du code

je suis désolé mais la c'est trop le foutoir je m'y perd.

@+
Il en faut peu pour être heureux !!!!!
mohaalba
le 16/03/2010 à 14:33
mohaalba
je te remercie beaucoup pour ta réponse c'est très gentil.
pour mon problème c'est bon je l'ai résolu, plutôt quelqu'un du forum phpfacile.com m'a trouvé ce que je doit faire.
juste petite question:
tu veux dire quoi par:
Met ton code sur le wall?
c'est quoi un wall?
merci d'avance.
Répondre
LoadingChargement en cours