Problem requete update avec boucle while

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 : Problem requete update avec boucle while

hani

par re » 07 juin 2007, 23:09

probleme résolu: il fallait juste ajouter une autre condition dans la requete update.
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('trans',$db);

//mise à jour de la date LOS DONE
$majdate=mysql_query("UPDATE commande_los SET DATE_LOS_DONE='".$datedone."' WHERE REFERENCE ='".$postres."' ")or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$vu=mysql_affected_rows(); 

$i=0;

//selection des enregistrement dans cocerner 2 portant une REFERENCE egale a $postres
$extract=mysql_query("SELECT * FROM commande_los,concerner2 WHERE commande_los.REFERENCE ='".$postres."' AND  concerner2.REFERENCE ='".$postres."'  ")or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$req=mysql_num_rows($extract);

 while($verif=mysql_fetch_array($extract))//parcourir les enregistrement trouvées
{
  if($tab[$i]!=""){//si le resultat est vide ne pas faire de maj
 $maj=mysql_query("UPDATE concerner2 SET RESULT ='".$tab[$i]."' WHERE REFERENCE ='".$postres."' [b]AND NAME='".$verif['NAME']."' [/b]  ")  or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());  
  $i=$i+1;//incrementation de l'indice

 }

}

Re: Problem requete update avec boucle while

par Hubert Roksor » 06 juin 2007, 18:38

Suis ces conseils de débogage, poste la requête qui ne fonctionne pas et le message d'erreur qui va avec.

re

par hani » 06 juin 2007, 16:41

j'ai essayé aussi avec ça mais sa donne le méme resultat;

Code : Tout sélectionner

$i=0; $p=count($tab); $extract=mysql_query("SELECT * FROM commande_los,concerner2 WHERE commande_los.REFERENCE ='".$postres."' AND concerner2.REFERENCE ='".$postres."' ")or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $req=mysql_num_rows($extract); if($req>0) { while(($verif=mysql_fetch_array($extract))&&($i<$p)) { $maj=mysql_query("UPDATE concerner2 SET RESULT ='".$tab[$i]."' WHERE REFERENCE ='".$postres."' ") or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $i=$i+1; } }
aidez moi svp

re

par hani » 06 juin 2007, 13:44

voici le schéma des deux tables: avec concerner2 c'est une table d'association:

Code : Tout sélectionner

-- Structure de la table `commande_los` -- CREATE TABLE `commande_los` ( `REFERENCE` varchar(25) NOT NULL default '', `CODE_ING` varchar(25) NOT NULL default '', `NAME` varchar(30) NOT NULL default '', `CODE_ST` varchar(25) NOT NULL default '', `DATE` date default NULL, `DATE_RECEPTION` date default NULL, `DATE_VALIDATION` date default NULL, `valide` tinyint(1) default NULL, `DATE_ENR` date default NULL, `enregistré` tinyint(1) default NULL, `LINFRA` varchar(50) default NULL, `DATE_PLANNED` date default NULL, `planifié` tinyint(1) default NULL, PRIMARY KEY (`REFERENCE`), KEY `CONCERNER1_FK` (`NAME`), KEY `TRAITER_FK` (`CODE_ST`), KEY `ETABLIR_FK` (`CODE_ING`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Contenu de la table `commande_los` -- INSERT INTO `commande_los` VALUES ('LOS_AL125_1_6607', 'hani', 'AL125', 'LINFRA2', '2007-06-06', '0000-00-00', '0000-00-00', 0, '2007-06-06', 1, '0', '2007-06-07', 1); -- -------------------------------------------------------- -- -- Structure de la table `concerner2` -- CREATE TABLE `concerner2` ( `REFERENCE` varchar(25) NOT NULL default '', `NAME` varchar(30) NOT NULL default '', `AZIMUTAX` int(11) default NULL, `AZIMUTXA` int(11) default NULL, `DISTANCE` int(11) default NULL, `RESULT` varchar(20) default NULL, PRIMARY KEY (`REFERENCE`,`NAME`), KEY `CONCERNER2_FK` (`REFERENCE`), KEY `CONCERNER3_FK` (`NAME`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Contenu de la table `concerner2` -- INSERT INTO `concerner2` VALUES ('LOS_AL125_1_6607', 'AL126', 213, 33, 8663, 'nok'); INSERT INTO `concerner2` VALUES ('LOS_AL125_1_6607', 'AL127', 26, 206, 16766, 'nok'); et ceci sont les contraintes qui concerne mon probleme: ALTER TABLE `commande_los` ADD CONSTRAINT `FK_CONCERNER1` FOREIGN KEY (`NAME`) REFERENCES `site` (`NAME`), ADD CONSTRAINT `FK_ETABLIR` FOREIGN KEY (`CODE_ING`) REFERENCES `ingenieur` (`CODE_ING`), ADD CONSTRAINT `FK_TRAITER` FOREIGN KEY (`CODE_ST`) REFERENCES `sous_traitant` (`CODE_ST`); -- -- Contraintes pour la table `concerner2` -- ALTER TABLE `concerner2` ADD CONSTRAINT `FK_CONCERNER2` FOREIGN KEY (`REFERENCE`) REFERENCES `commande_los` (`REFERENCE`), ADD CONSTRAINT `FK_CONCERNER3` FOREIGN KEY (`NAME`) REFERENCES `site` (`NAME`);

Re: Problem requete update avec boucle while

par Hubert Roksor » 06 juin 2007, 13:24

l'insertion dans les enregistrements ne se passe pas bien
Oui, mais sans message d'erreur, sans savoir quelles requêtes ne fonctionnent pas et sans avoir le schéma des tables on est obligé de deviner...

Suis ces conseils de débogage, poste la requête qui ne fonctionne pas et le message d'erreur qui va avec. Poste également le schéma des tables concernées, sous la forme d'une requête CREATE TABLE.

Merci de ne pas reposter le même sujet. Un seul suffit.

re

par hani » 06 juin 2007, 11:19

Ce n'est pas un probleme car jusque la les requete marchaient bien! je vous ai dis que c'est un probléme d'affichage des valeurs dans le champs RESULT.

par Sékiltoyai » 06 juin 2007, 02:54

REFERENCE est un mot réservé du serveur MySQL, c'est très déconseillé de l'utiliser comme nom de table, de champ, ou autre. Le mieux serait que tu changes ce nom, ou au pire, de l'échapper de cette manière : `REFERENCE`

Problem requete update avec boucle while

par hani » 06 juin 2007, 02:05

Bonjour à tous

je travail avec php et mysql.
voila mon but c'est de faire une mise à jour d'une table qui contien les champs suivant: REFERENCE, NAME, AZIMUTAX ,AZIMUTXA, DISTANCE, RESULT
et cette mise à jour concerne le champs RESULT qui doit contenir une chaine recuperée à partir de 4 select et qui peuvent etre soit: OK, NOK ou ND
et ceci sur au + quatre enregistrement.

voila le script:
<?php session_start(); 


$res1=$_POST['res1']; //chaine 1 du premier select
$res2=$_POST['res2'];// deuxieme chaine 
$res3=$_POST['res3'];// troisieme chaine
$res4=$_POST['res4'];// quatrieme chaine
if($res1=="value"){$res1="";}
if($res2=="value"){$res2="";}
if($res3=="value"){$res3="";}
if($res4=="value"){$res4="";}
$tab=array($res1,$res2,$res3);

 
$postres=$_SESSION['postres'];// c la REFERENCE


$db = mysql_connect('localhost', 'root', '');
mysql_select_db('trans',$db);
$i=-1;
$extract=mysql_query("SELECT * FROM commande_los,concerner2 WHERE commande_los.REFERENCE ='".$postres."' AND concerner2.REFERENCE ='".$postres."'  ")or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$req=mysql_num_rows($extract);
if($req>0)
{ 
 
 while($verif=mysql_fetch_array($extract))
 {$i++;
  $maj=mysql_query("UPDATE concerner2 SET RESULT ='".$tab[$i]."' WHERE REFERENCE ='".$verif['REFERENCE']."'     ")  or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
 
}
}


$num=mysql_affected_rows();
 if ($num>0){
?>
<div id="Layer11">
   <font size="+2">La mise à jour s'est bien déroulée </font></div>


....etc

la premiere requete SELECT c'est pour extraire les enregistrement de la table "concerner2" ayant la méme REFERENCE que la table "commande_los"
et suivant ces enregistrements je veux faire un update avec le champs RESULT et les valeur par exemple pour 3 enregistrements: OK, NOK , NOK mais le probleme j'obttien dans mysql soit OK, OK ,OK ou bien NOK,NOK,NOK .
la recuperation des valeurs se fait correctement mais l'insertion dans les enregistrements ne se passe pas bien .
Merci de m'eclaircir je vous serais trés reconnaissant.