Page 1 sur 1

Un update qui coince + des espaces dans les variables

Posté : 17 juin 2008, 12:14
par rastignac
J'engorge le forum mais j'ai besoin d'une autre explication,

je veux simplement faire un UPDATE, toutes les champs sont updatés sauf un qui reste NULL alors que je change la valeur.
Ce champ est "dated" .
Quelqu'un a pigé ?

Voici le code :
<html>
<script language="Javascript">
<!-- ce script permet de lancerune nouvelle fenêtre (popup) -->
function ouvreFenetre(page, largeur, hauteur) {
  window.open(page, "", "scrollbars=yes,menubar=no,toolbar=no,resizable=yes,width="
              + largeur + ",height=" + hauteur);

}
</script>
</head>
<body>

<?php
$connexion=mysql_Pconnect("localhost","duplex","duplex1234");
if (!mysql_select_db("duplex",$connexion)) {
exit; }

$numaf=$_POST["num-aff"];
$dated=$_POST["date1"];
$dated=mysql_real_escape_string($dated);
$datec=$_POST["date2"];
$datec=mysql_real_escape_string($datec);
$t_inv1=$_POST["t_inv1"];
$t_inv1=mysql_real_escape_string($t_inv1);
$t_inv2=$_POST["t_inv2"];
$t_inv2=mysql_real_escape_string($t_inv2);
$heured=$_POST["heured"];
$heured=mysql_real_escape_string($heured);
$heuref=$_POST["heuref"];
$heuref=mysql_real_escape_string($heuref);
$nomE=$_POST["nomE"];
$nomE=mysql_real_escape_string($nomE);
$typeE=$_POST["typeE"];
$typeE=mysql_real_escape_string($typeE);
$emetteur=$_POST["emetteur"];
$emetteur=mysql_real_escape_string($emetteur);
$recepteur=$_POST["recepteur"];
$recepteur=mysql_real_escape_string($recepteur);
$stdE=$_POST["stdE"];
$stdE=mysql_real_escape_string($stdE);
$stdR=$_POST["stdR"];
$stdR=mysql_real_escape_string($stdR);
$qualite=$_POST["qualite"];
$qualite=mysql_real_escape_string($qualite);
$inv1=$_POST["inv1"];
$inv1=mysql_real_escape_string($inv1);
$inv2=$_POST["inv2"];
$inv2=mysql_real_escape_string($inv2);
$N_com=$_POST["N_com"];
$N_com=mysql_real_escape_string($N_com);
$tel_com=$_POST["tel_com"];
$tel_com=mysql_real_escape_string($tel_com);
$obs=$_POST["obs"];
$obs=mysql_real_escape_string($obs);
$etat=$_POST["etat"];
$etat=mysql_real_escape_string($etat);
$id=$_POST["id"];
$id2=$_POST["id2"];
$id3=$_POST["id3"];
echo "ouiouioui";
echo $datec;
echo $dated;

$l1=$_POST["l1"];
$l2=$_POST["l2"];
$dated=mysql_real_escape_string($l2);
$l3=$_POST["l3"];
$l3=mysql_real_escape_string($l3);
$l4=$_POST["l4"];
$l4=mysql_real_escape_string($l4);
$l5=$_POST["l5"];
$l5=mysql_real_escape_string($l5);
$l6=$_POST["l6"];
$l6=mysql_real_escape_string($l6);
$l7=$_POST["l7"];
$l7=mysql_real_escape_string($l7);
$l8=$_POST["l8"];
$l8=mysql_real_escape_string($l8);
$l9=$_POST["l9"];
$l9=mysql_real_escape_string($l9);
$l10=$_POST["l10"];
$l10=mysql_real_escape_string($l10);
$l11=$_POST["l11"];
$l11=mysql_real_escape_string($l11);
$l12=$_POST["l12"];
$l12=mysql_real_escape_string($l12);
$l13=$_POST["l13"];
$l13=mysql_real_escape_string($l13);
$l14=$_POST["l14"];
$l14=mysql_real_escape_string($l14);
$l15=$_POST["l15"];
$l15=mysql_real_escape_string($l15);
$l16=$_POST["l16"];
$l16=mysql_real_escape_string($l16);
$l17=$_POST["l17"];
$l17=mysql_real_escape_string($l17);
$l18=$_POST["l18"];
$l18=mysql_real_escape_string($l18);
$l19=$_POST["l19"];
$l19=mysql_real_escape_string($l19);
$l20=$_POST["l20"];
$l20=mysql_real_escape_string($l20);
$l21=$_POST["l30"];
$l21=mysql_real_escape_string($l21);

resultat="UPDATE duplex SET etat='$etat',type_emission='$typeE',observations='$obs',numero_studioR='$stdR',recepteur='$recepteur',numero_studioE='$stdE',
nom_commanditaire='$N_com',tel_inv1='$t_inv1',nom_invite2='$inv2',tel_inv2='$t_inv2',qualite='$qualite',emetteur='$emetteur',numero_affaire='$numaf',nom_emission='$nomE',
nom_invite1='$inv1',date_creation='$datec',date_duplex='$dated',heure_debut='$heured',heure_fin='$heuref' WHERE  id=$id" or die ('requête invalide:'.mysql_error());
$titi=mysql_query($resultat);
?>
   <center><table border="0">
<tr><img src=logos/fip.gif align=center><img src=logos/inter.gif align=center> <img src=logos/info.gif align=center> <img src=logos/mrf.jpg align=center>
        <img src=logos/culture.gif align=center><img src=logos/mouv.gif align=center><img src=logos/musique.gif align=center>  <img src=logos/bleu.gif align=center></tr>
<tr><td colspan=20><font size=6><b>Coordination des rédactions</b></font></td></tr>

<center><font size=5><i>La modification a bien été prise en compte </i><br /><br /></font></center>
<center><br /><a href="coordinateur.php"><font size=4>Accueil des coordinateurs</font></a></center>
</table></center>



</body>
</html>
Merci d'avance ! :)

Posté : 17 juin 2008, 12:50
par ouckileou
Lis ce sujet d'abord : http://www.phpfrance.com/forums/voir_sujet-19378.php

Et utilise les balises

Posté : 17 juin 2008, 13:05
par sadeq
Voici la cause de tes souffrances:
$l2=$_POST["l2"];
$dated=mysql_real_escape_string($l2); 
Correction:
$l2=$_POST["l2"];
$l2=mysql_real_escape_string($l2); 

Posté : 17 juin 2008, 13:51
par rastignac
Complètement exact, tout marche parfaitement, sauf , sauf...
Un autre petit truc qui m'est déjà arrivé et je ne me souviens plus comme j'ai fait.

Je récupère donc des informations d'une page pour les modifier, à savoir dans cet exemple le nom d'une émission grace à la page X et ce code :

Code : Tout sélectionner

tr><td><div align="right"><font size=5>Nom de l'émission:</font></div></td><td><select name='nomE'> <?php echo "<option value=$nome>$nome"; ?> <?php $connexion=mysql_Pconnect("localhost","xx","xx"); if (!mysql_select_db("duplex",$connexion)) { exit;} $sql=mysql_query("SELECT * from emission ORDER BY nom_emission "); while ($ligne=mysql_fetch_array($sql)) { $r = $ligne["nom_emission"]; echo "<option value=\"$r\" >"; echo $r; echo'</option>'; }?>
Ensuite je peux modifier le nom de l'émission grace à une liste déroulante et après j'update avec la page Y avec ce code :

Code : Tout sélectionner

$resultat="UPDATE duplex SET etat='$etat',type_emission='$typeE',observations='$obs',numero_studioR='$stdR',recepteur='$recepteur',numero_studioE='$stdE', nom_commanditaire='$N_com',tel_inv1='$t_inv1',nom_invite2='$inv2',tel_inv2='$t_inv2',qualite='$qualite',emetteur='$emetteur',numero_affaire='$numaf',nom_emission='$nomE', nom_invite1='$inv1',date_creation='$datec',date_duplex='$dated',heure_debut='$heured',heure_fin='$heuref' WHERE id=$id" or die ('requête invalide:'.mysql_error()); $titi=mysql_query($resultat);
Problème : Dès que j'ai récupéré un nom d'émission du genre "La vie est belle", ou que je remplace par un nom style "La vie est belle" et bien quand j'aurai enregistré la modif je n'aurai plus que "La", ce qui est con.

:)

Ca doit etre tout con...

Posté : 17 juin 2008, 14:31
par Calimero

Code : Tout sélectionner

$resultat="UPDATE duplex SET etat='$etat',type_emission='$typeE',observations='$obs',numero_studioR='$stdR',recepteur='$recepteur',numero_studioE='$stdE', nom_commanditaire='$N_com',tel_inv1='$t_inv1',nom_invite2='$inv2',tel_inv2='$t_inv2',qualite='$qualite',emetteur='$emetteur',numero_affaire='$numaf',nom_emission='$nomE', nom_invite1='$inv1',date_creation='$datec',date_duplex='$dated',heure_debut='$heured',heure_fin='$heuref' WHERE id=$id" or die ('requête invalide:'.mysql_error()); $titi=mysql_query($resultat);
Problème : Dès que j'ai récupéré un nom d'émission du genre "La vie est belle", ou que je remplace par un nom style "La vie est belle" et bien quand j'aurai enregistré la modif je n'aurai plus que "La", ce qui est con.
Dans une requête SQL, il faut protéger les arguments de type texte par des apostrophes. Ca t'aurait sauté aux yeux si tu affiches cette requête SQL au lieu de l'éxécuter (ce qu'il faudrait TOUJOURS faire en cas de problème, et c'est expliqué dans le lien donné par ouckileou).

Posté : 17 juin 2008, 14:36
par rastignac
Certes, et je ne vois pas où j'ai oublié les apostrophes d'ailleurs quand j'affiche la requête, le nom est bien en entier sauf que " l' " devient " l\' "

Posté : 17 juin 2008, 15:18
par Calimero
Ca vaut aussi pour les attributs value des éléments option d'une liste déroulante... (et d'une manière générale pour tous les attributs html) :

Code : Tout sélectionner

<option value="La vie est belle">La vie est belle</option>

Posté : 17 juin 2008, 16:38
par sadeq
Il faut d'abord corriger cette erreur dans ton code de la page X:
<?php
                                                echo "<option value=$nome>$nome"; ?> 
Correction:
<?php
                                                echo "<option value=\"$nome\">$nome</option>"; ?> 
D'ailleurs, la variable $nome n'est jamais déclarée et je n'en vois pas l'utilité.

Si tu veux rappeler la dernière ligne sélectionnée, vaut mieux faire comme ça:
//nom émission précédemment posté
$nomE = stripslashes(trim($_POST["nomE"]);

while ($ligne=mysql_fetch_array($sql))
    {
          $r = stripslashes(trim($ligne["nom_emission"]));
          
         //Déterminer s'il faut mettre un "selected"  sur l'option  en cours
         $selected = ($r == $nomE)  ? " selected='selected' " : "";

         echo "<option value=\"$r\"  $selected >";
         echo $r;
         echo'</option>';
    }