8722 sujets

Développement web côté serveur, CMS

Bonjour a tous,

j'ai un script qui dans une moitié de page me renvoi des données de ma table 'reclam' et dans l'autre moitié qui est formulaire avec un renvoi de données complémentaire sur sur cette meme table

Malheureusement meme si tout semble bien se passer, rien ne s'inscrit dans ma bdd

j'ai du faire une erreur mais je ne vois pas ou.

<html>
<head><meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type"></head>
<body>
<div style="width:550px">
<basefont face="Tahoma" size="2">
<center style="color: white;"><h3 style="background-color: rgb(92, 168, 10);">Fiche de réclamation</h3></center><br>
 
<!-- entete -->
<!-- ------------------------------------------------------------------------------------------------------------- -->
<TABLE BORDER="1">
  <TR>
 <TD width=100> <IMG SRC="logo2.jpg"
 ALT="logo"> </TD>
 <TD width=350 align=center> <B>FICHE RECLAMATION</B><BR>
(non-conformité produit, réclamation, anomalie, action<BR>
corrective, action préventive, axe amélioration, identification<BR>
d'urgence, plaintes...) </TD>
 <TD width=100> Référence : ENR FREC<BR>
-----------------<BR>
Indice : 04<br>
-----------------<BR>
Page : 1/1</TD>
  </TR>
</TABLE>
 
<!--fin d'entete -->
<!-- ------------------------------------------------------------------------------------------------------------- -->
 
<!-- ------------------------------------------------------------------------------------------------------------- -->
<!-- deuxième tableau -->
<TABLE BORDER="1">
  <TR>
 <TD width=550>
 
<?php
// recup variable
$ID=$_POST['ID'];
//Connection Mysql
mysql_connect("******","******","******")or die("Problème avec la base de données");<br>mysql_select_db("******a")or die ("pas de connection");<br>
 
 $reponse = mysql_query("SELECT `Theme` FROM reclam WHERE `ID` = '".$ID."'"); // Requête SQL
// on recupere le resultat sous forme d'un tableau
 $data = mysql_fetch_array($reponse);
 echo '<b><u>Thème de la fiche</u> : </b>'.$data['Theme'];
?>
 </TD>
  </TR>
</TABLE>
 
<!-- Fin de deuxième tableau -->
<!-- ------------------------------------------------------------------------------------------------------------- -->
 
<!-- ------------------------------------------------------------------------------------------------------------- -->
<!-- Troisième tableau -->
<TABLE BORDER="1">
  <TR>
 <TD width=550>
 
<?php
 
//Connection Mysql
mysql_connect("******o","******","******")or die("Problème avec la base de données");<br>mysql_select_db("******")or die ("pas de connection");<br>
 
 $reponse = mysql_query("SELECT * FROM reclam WHERE `ID` = '".$ID."'"); // Requête SQL
// on recupere le resultat sous forme d'un tableau
 $data = mysql_fetch_array($reponse);
 echo '<b><u>Recepteur</u> : </b>'.$data['rece'];
 echo '&nbsp;&nbsp;&nbsp;&nbsp;<b><u> Date</u> : </b>'.$data['daterece'];
 echo '&nbsp;&nbsp;&nbsp;&nbsp;<b><u> Heure</u> : </b>'.$data['heurerece'];
 echo '&nbsp;&nbsp;&nbsp;&nbsp;<b><u> Moyen</u> : </b>'.$data['Recepteur'];
 
?>
     
</TD>
  </TR>
</TABLE>
 
<!-- Fin de troisieme tableau -->
<!-- ------------------------------------------------------------------------------------------------------------- -->
 
 
<!-- ------------------------------------------------------------------------------------------------------------- -->
<!-- Quatrième tableau -->
 
<TABLE BORDER="1">
  <TR>
 <TD width=550>
 
 <?php
 
//Connection Mysql
mysql_connect("******","******","******")or die("Problème avec la base de données");<br>mysql_select_db("******")or die ("pas de connection");<br>
 
 $reponse = mysql_query("SELECT * FROM reclam WHERE `ID` = '".$ID."'"); // Requête SQL
// on recupere le resultat sous forme d'un tableau
 $data = mysql_fetch_array($reponse);
 echo '<b><u>Emetteur</u> : </b>'.$data['Emetteur'];
 echo '     <b><u> Nom</u> : </b>'.$data['Nom'];
 echo '     <b><u> Société</u> : </b>'.$data['Societe'];
 echo '<br>';
 echo '     <b><u> Mail</u> : </b>'.$data['mail'];
 
?>
</TD>
  </TR>
</TABLE>
 
<!-- Fin de 4ème tableau -->
<!-- ------------------------------------------------------------------------------------------------------------- -->
 
<!-- ------------------------------------------------------------------------------------------------------------- -->
<!-- 5ème tableau -->
 
<TABLE BORDER="1">
  <TR>
 <TD width=550>
 
 
    <b><u>3. Description de l'anomalie ou écart</u></b><br>
    <p>Quelles sont les causes du problème ?</p><br>
<?php
 
//Connection Mysql
mysql_connect("******","******","T******")or die("Problème avec la base de données");<br>mysql_select_db("******")or die ("pas de connection");<br>
 
 $reponse = mysql_query("SELECT * FROM reclam WHERE `ID` = '".$ID."'"); // Requête SQL
// on recupere le resultat sous forme d'un tableau
 $data = mysql_fetch_array($reponse);
 echo '<b><u>Cause</u> : </b>'.$data['cause'];
 echo '<br>';
 echo '<b><u>Description</u> : </b>'.$data['description'];
 echo '<br>';
 
?>
</TD>
  </TR>
</TABLE>
 
<!-- Fin de 5ème tableau -->
<!-- ------------------------------------------------------------------------------------------------------------- -->
 
<!-- ------------------------------------------------------------------------------------------------------------- -->
<!-- tableau qualité-->
<TABLE BORDER="1">
  <TR>
 <TD width=550>
 
<form method="post">
    <b><u>4. Traitement mis en oeuvre</u></b>

    <input type="checkbox" name="traitement" value="Action préventive" />Action préventive
    <input type="checkbox" name="traitement" value="Action corrective"/>Action corrective
 </TD>
  </TR>
</TABLE>
 
<!-- Fin du tableau qualité -->
<!-- ------------------------------------------------------------------------------------------------------------- -->
 
<!-- ------------------------------------------------------------------------------------------------------------- -->
<!-- 2ème tableau qualité -->
 
<TABLE BORDER="1">
  <TR>
 <TD width=550>
 
 
    <b><u>5. Action mise en oeuvre :</u></b><br>
    <p>Action mise en oeuvre : (nature, par qui ? <u>quand</u> ? comment ?</p><br>
    <textarea name="action" rows="4" cols="60"></textarea>
</TD>
  </TR>
</TABLE>
 
<!-- Fin du 2ème tableau qualité -->
<!-- ------------------------------------------------------------------------------------------------------------- -->
 
<!-- ------------------------------------------------------------------------------------------------------------- -->
<!-- 3ème tableau qualité-->
<TABLE BORDER="1">
  <TR>
 <TD width=550>
 
    <b><u>6. Transmission service qualité</u></b> : (Cadre réservé au Service Qualité)

    <input type="checkbox" name="final" value="Action réalisée satisfaisante" />Action réalisée satisfaisante
    <input type="checkbox" name="final" value="A revoir"/>A revoir<br/>
    Motif : <textarea name="motif" rows="1" cols="20"></textarea>
    Délais : <textarea name="delais" rows="1" cols="20"></textarea>
    <input type="submit" value="Validation"/>
</form>
 </TD>
  </TR>
</TABLE>
 
<!-- Fin du 3ème tableau qualité -->
<!-- ------------------------------------------------------------------------------------------------------------- -->
 
<!--Recupération des variables -->
<?php
 
//recup des variables
$traitement=$_POST['traitement'];
$action=$_POST['action'];
$final=$_POST['final'];
$motif=$_POST['motif'];
$delais=$_POST['delais'];
//$ID=$_POST['ID'];
 
 
// Fin de Recupération des variables
//---------------------------------------------------------------------------------------------------------------------
 
//Connection Mysql
 
 
    //Connexion à la base.
    mysql_connect("*****","****","****")or die("Problème avec la base de données");
    mysql_select_db("****")or die ("pas de connection");
 
//Requête
if ((!empty($traitement)) and (!empty($action)))
{
     
    //Vide la table 'nom_de_la_table'
    mysql_query("UPDATE reclam SET traitement='".$traitement."', action='".$action."',final='".$final."',motif='".$motif."',delais='".$delais."' WHERE `id`='".$ID."'") or die ("Désolé, il y a eu un problème dans la transmission des données");
    echo '<font face="tahoma" color="red">Fin d\'execution !<br>Données transmises</font>';
 
}
?>
</div>
</body>
</html>



Je recupère ma variable $id d'un formulaire précédent et si je :
- met en dur l'id, ca fonctionne
- si je fais un echo $id avant ma requete, je recupère bien ma valeur
- si je fais un var_dump, ca me donne egalement la bonne valeur de mon id
je ne comprend plus rien

si vous pouvez m'aider, je vous en serais reconnaissant.

Merci d'avance
Modifié par steph70 (12 Mar 2014 - 10:09)
à vue de nez, soucis de majuscule entre le nom de la variable que tu testes et celle de ta requête ? (est-ce que celle que tu as testé sur le var_dump est bien $ID et pas $id ?)

Sinon en débuggage :

$rq= "UPDATE reclam SET traitement='".$traitement."', action='".$action."',final='".$final."',motif='".$motif."',delais='".$delais."' WHERE `id`='".$ID."'";
echo $rq;
/*mysql_query($rq) or die ("Désolé, il y a eu un problème dans la transmission des données");*/


et tu testes la requête sous phpmyadmin (c'est ce que j'utilise pour repérer par exemple un oubli de simplequote ou une variable qui passe mal, en fait ça te permet de savoir exactement quelle requête est envoyée.

Au passage, il serait grand temps de passer de mysql_ à PDO ou mysqli_. L'extension mysql_ est dépréciée depuis php 5 et obsolète depuis la 5.5 ^^

(un petit tutoriel tout simple (et en Français) pour : passer de mysql_ à mysqli_ )
Modifié par Lothindil (12 Mar 2014 - 10:18)
Tout d'abord merci pour ta réponse

pour ta première question, relative aux majuscules, c'est moi qui en réécrivant n'ai pas fait attention

Pour le debbugage, cela revelé effectivement que mon id n'est pas repris :

UPDATE reclam SET traitement='Action corrective', action='fsfdes',final='Action réalisée satisfaisante',motif='sezer',delais='erzr' WHERE `ID`=''

alors que si je fais un echo il apparait,

c'est a rendre dingue
tu fais bien ton echo juste avant ?

au passage, c'est normal qu'il soit en commentaire quelques lignes avant ? (ça sent l'abus de débuggage, mais bon, on sait jamais^^)

<?php
 
//recup des variables
$traitement=$_POST['traitement'];
$action=$_POST['action'];
$final=$_POST['final'];
$motif=$_POST['motif'];
$delais=$_POST['delais'];
//$ID=$_POST['ID'];
oui, je fais bien l'echo juste avant et ca me donne bien la bonne valeur.

et oui, lol, le commentaire est un abus de debuggage.

Et j'ai beau chercher dans ma requete, je ne vois pas l'erreur, les autres valeurs sont bonnes mais l'essentiel refuse de passer
Bon, on va reprendre, parce que ça sent le méli-mélo de débuggage.

On va remplacer ce morceau de code :
<?php
 
//recup des variables
$traitement=$_POST['traitement'];
$action=$_POST['action'];
$final=$_POST['final'];
$motif=$_POST['motif'];
$delais=$_POST['delais'];
//$ID=$_POST['ID'];
 
 
// Fin de Recupération des variables
//---------------------------------------------------------------------------------------------------------------------
 
//Connection Mysql
 
 
    //Connexion à la base.
    mysql_connect("*****","****","****")or die("Problème avec la base de données");
    mysql_select_db("****")or die ("pas de connection");
 
//Requête
if ((!empty($traitement)) and (!empty($action)))
{
     
    //Vide la table 'nom_de_la_table'
    mysql_query("UPDATE reclam SET traitement='".$traitement."', action='".$action."',final='".$final."',motif='".$motif."',delais='".$delais."' WHERE `id`='".$ID."'") or die ("Désolé, il y a eu un problème dans la transmission des données");
    echo '<font face="tahoma" color="red">Fin d\'execution !<br>Données transmises</font>';
 
}
?>


par :

<?php
 
//recup des variables
$traitement=$_POST['traitement'];
$action=$_POST['action'];
$final=$_POST['final'];
$motif=$_POST['motif'];
$delais=$_POST['delais'];
$ID=$_POST['ID'];
 
 
// Fin de Recupération des variables
//---------------------------------------------------------------------------------------------------------------------
 
//Connection Mysql
 
 
    //Connexion à la base.
    mysql_connect("*****","****","****")or die("Problème avec la base de données");
    mysql_select_db("****")or die ("pas de connection");
 
//Requête
if ((!empty($traitement)) and (!empty($action)))
{
     
    //Vide la table 'nom_de_la_table'
  /*test 0*/
   echo "test 0 -variable dans post - :".$_POST['ID']."<br />";
   echo "test 0bis -variable assignée- :".$ID."<br />";
   /*test 1*/
   $rq="UPDATE reclam SET traitement='".$traitement."', action='".$action."',final='".$final."',motif='".$motif."',delais='".$delais."' WHERE `id`='".$ID."'";
   echo "test 1 -tel quel- :".$rq."<br />";
   /*test 2*/
   $ID=2;
 $rq="UPDATE reclam SET traitement='".$traitement."', action='".$action."',final='".$final."',motif='".$motif."',delais='".$delais."' WHERE `id`='".$ID."'";
   echo "test 2 -variable forcée- :".$rq."<br />";
  /*test 3*/
  $rq="UPDATE reclam SET traitement='".$traitement."', action='".$action."',final='".$final."',motif='".$motif."',delais='".$delais."' WHERE `id`='2'";
   echo "test 3 -id forcée dans la requête- :".$rq."<br />";


    /*mysql_query("UPDATE reclam SET traitement='".$traitement."', action='".$action."',final='".$final."',motif='".$motif."',delais='".$delais."' WHERE `id`='".$ID."'") or die ("Désolé, il y a eu un problème dans la transmission des données");
    echo '<font face="tahoma" color="red">Fin d\'execution !<br>Données transmises</font>';*/
 
}
?>



Je sais, on refait les tests déjà faits, mais le soucis est là et au moins, y a pas d'ex truc de débugage qui traîne et peuvent pourrir le test suivant ^^
Voici le resultat demandé :
test 0 -variable dans post - :
test 0bis -variable assignée- :
test 1 -tel quel- :UPDATE reclam SET traitement='Action préventive', action='bidule',final='Action réalisée satisfaisante',motif='machin',delais='15 jours 15 jours' WHERE `id`=''
test 2 -variable forcée- :UPDATE reclam SET traitement='Action préventive', action='bidule',final='Action réalisée satisfaisante',motif='machin',delais='15 jours 15 jours' WHERE `id`='2'
test 3 -id forcée dans la requête- :UPDATE reclam SET traitement='Action préventive', action='bidule',final='Action réalisée satisfaisante',motif='machin',delais='15 jours 15 jours' WHERE `id`='2'


et normalement le numéro d'id dans ce cas la devrait etre le 26

[EDIT] par contre si je met un echo $ID avant la requete, j'ai bien la valeur
Modifié par steph70 (12 Mar 2014 - 14:40)
J'ai l'impression que ma variable $ID est accéssible dans la première partie de mon script qui affiche des valeurs récupérées dans la meme table mais est incapable de rester lorsque je vais rechercher dans cette meme table sur la meme page.
Bonjour,
Je pense que c'est normal que ton $ID soit vide. Voilà comment je vois les choses (corrige moi si je me trompe):
- Tu as une première page avec un <input> qui envoie ton id.
- Lorsque tu la valides, on arrive sur la page pour laquelle tu nous as donné le code, et $_POST['ID'] est bien rempli (donc ton echo fonctionne).
- Ensuite, tu remplis tes tableaux, tu valides à nouveau tes données, et c'est là que tu appelles tes requêtes. Or, à ce moment là, tu n'as pas passé ton ID!
Il faudrait donc que tu ajoutes dans ton formulaire un truc du genre:
<input type="hidden" name="ID" id="ID" value="<?php echo $_POST['ID']; ?>"/>

Je ne sais pas si j'ai été clair, mais à mon avis l'erreur est là.
Bon courage en tout cas!
Modifié par GroquikMLV (12 Mar 2014 - 17:34)
Les grands esprits se rencontrent lol, c'st exactement a quoi je pensais ce matin en venant au boulot.

Ta solution est effectivement la bonne.

Je te/vous remercie tous pour la patience dont vous avez fait preuve envers moi et pour la qualité de vos réponses.

Merci enormement.
Amicalement