Un update qui coince + des espaces dans les variables

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 : Un update qui coince + des espaces dans les variables

par sadeq » 17 juin 2008, 16:38

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>';
    }

par Calimero » 17 juin 2008, 15:18

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>

par rastignac » 17 juin 2008, 14:36

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\' "

par Calimero » 17 juin 2008, 14:31

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).

par rastignac » 17 juin 2008, 13:51

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...

par sadeq » 17 juin 2008, 13:05

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); 

par ouckileou » 17 juin 2008, 12:50

Lis ce sujet d'abord : http://www.phpfrance.com/forums/voir_sujet-19378.php

Et utilise les balises

Un update qui coince + des espaces dans les variables

par rastignac » 17 juin 2008, 12:14

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 ! :)