Page 1 sur 1

Petite problème avec un update

Posté : 11 juin 2009, 11:50
par rafale69300
Bonjour tout le monde,

j'ai juste un petit problème au niveau de mon update avec des simple cote et des double cote sur le champ dateNaissance que j'ai mis en gras si quelqu'un peut m'aider merci d'avance.


if(isset($_POST['choix'])){
			$sql="UPDATE personnel SET [b]dateNaissance_perso = str_to_date(".$_POST['datenaiss'].","%d-%m-%Y").'  [/b]
			,code_perso='".$_POST['code']."' 
			,civil_perso='".$_POST['civil']."'
			, nom_perso='".$_POST['nom']."'
			,prenom_perso='".$_POST['prenom']."'
			,dateNaissance_perso='".$_POST['datenaiss']."'
			,adr_perso='".$_POST['adr']."'
			,cp_perso='".$_POST['cp']."'
			,ville_perso='".$_POST["ville"]."'
			,tel_perso='".$_POST["tel"]."'
			,port_perso='".$_POST["port"]."'
			,mail_perso='".$_POST["mail"]."'
			,id_service='".$_POST["service"]."'
			,id_cat='".$_POST["cat"]."'
			 WHERE id_perso='".($_POST['choix'])."'";
			

Posté : 11 juin 2009, 12:11
par stopher
Hi ,

Tu as oublié de sortit aussi str_to_date() de ta chaine qui fait ta requête ..


Note: Attention , il est fortement conseiller d'échapper les données entrantes .. utilise au moins la fonction mysq_real_escape_string() .

Voici ta requête corrigés au niveau de quotes :
if(isset($_POST['choix'])){
            $sql="UPDATE personnel SET dateNaissance_perso = ".str_to_date($_POST['datenaiss'],"%d-%m-%Y")."
            ,code_perso='".$_POST['code']."' 
            ,civil_perso='".$_POST['civil']."'
            , nom_perso='".$_POST['nom']."'
            ,prenom_perso='".$_POST['prenom']."'
            ,dateNaissance_perso='".$_POST['datenaiss']."'
            ,adr_perso='".$_POST['adr']."'
            ,cp_perso='".$_POST['cp']."'
            ,ville_perso='".$_POST["ville"]."'
            ,tel_perso='".$_POST["tel"]."'
            ,port_perso='".$_POST["port"]."'
            ,mail_perso='".$_POST["mail"]."'
            ,id_service='".$_POST["service"]."'
            ,id_cat='".$_POST["cat"]."'
             WHERE id_perso='".($_POST['choix'])."'";
Ch.

Posté : 11 juin 2009, 12:24
par rafale69300
mais enfaite j'avais bien l'intention d'utiliser my sql escape string mais dans mon formulaire je voulais mettre dans les values des input texte htmentities et trim mais avec ma données je ne sais pas comment faire je te laisse mon code situ peu regarder merci par avance.

Le but de mon formulaire est de choisir une personne dans une liste déroulante et de pouvoir modifier ces informations.
<?php include ("securite/secu_perso.php");
if(isset($res_droit)&& $res_droit[0]==0){
	echo "<br/><br/><center><H3/>Vous n'avez pas acc&egrave;s &agrave; cette page</center></h3>";?>
    <br /><center>Connectez vous en tant qu'administrateur du site <a href="./index.php?page=connexion_admin&categorie=securite">en cliquant ici</a></center>
	<?php
}else{ ?>
<html>
	<head>
    	<script language="JavaScript">


// Début de la partie spécifique à la page

// Fonction pour tester les champs vides (une ligne par champ)
// Pour autoriser un champ vide, ne pas le référencer dans la liste


	function check_vide() {
	
	vide('formulaire','civil','- Civilite');
	vide('formulaire','code','- Matricule');
	vide('formulaire','nom','- Nom');
	vide('formulaire','prenom','- Prenom');
	vide('formulaire','datenaiss','- Date de Naissance');
	vide('formulaire','adr','- Adresse');
	vide('formulaire','cp','- Code Postal');
	vide('formulaire','ville','- Ville');
	vide('formulaire','tel','- Telephone');
	vide('formulaire','mail','- Email');
	vide('formulaire','service','- Service');
	vide('formulaire','cat','- Categorie');
					
// Validation (sous conditions) du formulaire
	
	resultat('formulaire');}
	
			</script>

<style type="text/css">
<!--
.Etoile {color: #FF3333}
-->
        </style>
<style type="text/css">
<!--
.taille {font-size: x-small}
-->
</style>
<?php
function DateFrMySQL($DateMysql)
{
	list($Annee, $Mois, $Jour) = explode("-", $DateMysql);
	return ($Jour."-".$Mois."-".$Annee);
}  ?>
<p align="center"><strong>Modifier un membre du personnel de la commune :</strong></p>
<p>&nbsp;</p>
<p class="taille">Pour modifier un membre du personnel de la base de donn&eacute;e s&eacute;lectionnez le dans la liste d&eacute;roulante</p>
<p><!--Formulaire-->
	<?php
	$choix="";
			if(isset($_POST['choix'])){
				$choix = $_POST['choix'];
			}
			else{
				$choix = "";
			}
		//	echo "-------" .  $_POST['choix'];
		
			?>
<form name="formulaire" action="./index.php?page=modif_perso&categorie=personnel&choix=<?php echo $choix; ?>" method="post" id="perso">
</p><p align="center">
	<?php $requete='SELECT id_perso,civil_perso,nom_perso,prenom_perso FROM personnel order by id_perso';
		$resultat= mysql_query($requete);?>
   		<select name="choix" onChange="document.forms['perso'].submit();">
     	   <option value="0">Choisissez un membre du personnel</option>
      		<?php
		
				
				while ($donnees = mysql_fetch_array($resultat)){
				if($choix == $donnees[0]){
				echo "<option value=\"$choix\" selected=\"$donnees[0]\">$donnees[1]&nbsp;$donnees[2]&nbsp;$donnees[3]</option>"; 
				}
  				else{
					 echo "<option value=\"$donnees[0]\">$donnees[1]&nbsp;$donnees[2]&nbsp;$donnees[3]</option>";
				 }
				echo $donnees[1]." ".$donnees[2]." ".$donnees[3];
				echo'</option>';
    			}
				
			?>
  </select>  


<?php
	if(isset($_POST['choix'])){

	 	$modif="SELECT * FROM personnel WHERE id_perso='".($_POST['choix'])."'";
		$resultat=mysql_query($modif);
		$donnees = mysql_fetch_array($resultat);
		?>
        
        
<p align="center">

<table width="50%" border="0">
  <tr>
    <td colspan="2"><p>Civilit&eacute; <span class="Etoile">*</span> :</p>
  <p> 
   <select name="civil">
   	<option>
    <option value="M.">M.
    <option value="Mme.">Mme.
    <option value="Mlle.">Mlle.
   </select>
  </p>
   </td>
  </tr>
  <tr>
    <td width="45%"><p>Matricule <span class="Etoile">*</span> :</p>
  <p> 
    <!--On veut une saisi alpha-numérique de 5 caractères obligatoires-->
    <input type="text" name="code"  OnBlur="validite('formulaire','code','AN',5,5);" value="<?php echo $donnees[1];?>">
    <br>
  </p></td>
    <td width="55%"><p>Nom <span class="Etoile">*</span> : <!--On veut une saisi alpha-numérique de 50 caractères ou moins-->
    </p>
  <p>
    <input type="text" name="nom"  OnBlur="validite('formulaire','nom','AN',0,50);" value="<?php echo $donnees[3];?>">
    <br>
  </p>
 
  </td>
  </tr>
  <tr>
    <td> <p>Pr&eacute;nom <span class="Etoile">*</span> : <!--On veut une saisi alpha-numérique de 50 caractères ou moins-->
    </p>
  <p>
    <input type="text" name="prenom"  OnBlur="validite('formulaire','prenom','AN',0,50);" value="<?php echo $donnees[4];?>">
    <br>
  </p></td>
    <td><p>Date de Naissance (jj-mm-aaaa)<span class="Etoile">*</span> : 
    <!--On veut une saisi alpha-numérique entre 8 caractères et 15-->
    </p>
      <p>
    <input type="text" name="datenaiss"  OnBlur="validite('formulaire','datenaiss','D',10,10);" value="<?php echo DateFrMySQL($donnees[5]); ?>" />
    <br>
  </p></td>
  </tr>
  <tr>
    <td><p>Adresse <span class="Etoile">*</span> : <!--On veut une saisi alpha-numérique de 100 caractères ou moins-->
    </p>
  <p>
    <input type="text" name="adr"  OnBlur="validite('formulaire','adr','AN',0,100);" value="<?php echo $donnees[6];?>">
  </p></td>
    <td><p>Code Postal <span class="Etoile">*</span> :</p>
  <p> 
    <!--On veut une saisi type 'code postal français'-->
    <input type="text" name="cp"  OnBlur="validite('formulaire','cp','N',5,5);" value="<?php echo $donnees[7];?>">
    <br>
  </p></td>
  </tr>
  <tr>
    <td><p>Ville <span class="Etoile">*</span> : <!--On veut une saisi alpha-numérique de 50 caractères ou moins-->
    </p>
  <p>
    <input type="text" name="ville"  OnBlur="validite('formulaire','ville','AN',0,50);" value="<?php echo $donnees[8];?>">
    <br>
  </p></td>
    <td><p>T&eacute;l&eacute;phone <span class="Etoile">*</span> : <!--On veut une saisi alpha-numérique entre 10 et 15 caractères-->
    </p>
  <p>
    <input type="text" name="tel"  OnBlur="validite('formulaire','tel','AN',10,15);" value="<?php echo $donnees[9];?>">
    <br>
  </p></td>
  </tr>
  <tr>
    <td><p>Portable  : <!--On veut une saisi alpha-numérique entre 10 et 15 caractères-->
    </p>
  <p>
    <input type="text" name="port"  OnBlur="validite('formulaire','port','AN',10,15);" value="<?php echo $donnees[10];?>">
    <span class="Style1"></span>
    <br>
  </p></td>
    <td><p>Email <span class="Etoile">*</span> : <!--On veut une saisi type 'adresse mail' de 75 caractères ou moins-->
    </p>
  <p>
    <input type="text" name="mail"  OnBlur="validite('formulaire','mail','EMAIL',0,75);" value="<?php echo $donnees[11];?>">
    <br>
  </p></td>
  </tr>
  <tr>
    <td width="45%"><p>Service <span class="Etoile">*</span> : 
  <?php $requete='SELECT id_service,lib_service FROM services order by id_service';
			$resultat= mysql_query($requete);?>
<p>
  <select name="service">
    <option>
      <?php
	 // echo "-----" .$donnees[8];
				while ($donnees2 = mysql_fetch_array($resultat)){
				if($donnees2[0]==$donnees[12]){ 
					echo "<option value=\"$donnees2[0]\" selected=\"$donnees[11]\">$donnees2[1]</option>"; 
				}
  				else{
					 echo "<option value=\"$donnees2[0]\">$donnees2[1]</option>";
				 }
             	echo $donnees2[1];
				echo'</option>';
    			}
			?>
          </select>   </td>
    <td><p>Service <span class="Etoile">*</span> : 
  <?php $requete='SELECT id_cat,lib_cat FROM categories order by id_cat';
			$resultat= mysql_query($requete);?>
<p>
  <select name="categorie">
    <option>
      <?php
	 // echo "-----" .$donnees[8];
				while ($donnees2 = mysql_fetch_array($resultat)){
				if($donnees2[0]==$donnees[13]){ 
					echo "<option value=\"$donnees2[0]\" selected=\"$donnees[12]\">$donnees2[1]</option>"; 
				}
  				else{
					 echo "<option value=\"$donnees2[0]\">$donnees2[1]</option>";
				 }
             	echo $donnees2[1];
				echo'</option>';
    			}
			?>
          </select>   </td>
  </tr>
  </table>
  
  <p><span class="Etoile">&nbsp;Les champs suivis d'une * sont obligatoires</span></p>
&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" name="modif" value="Modifier" OnClick="check_vide();" >
 &nbsp;&nbsp;&nbsp;&nbsp;
 <input type="reset" name="annuler" value="Annuler"></form>
 <?php
  	}
	
	// on teste l'existence de nos variables. On teste également si elles ne sont pas vides 
			if(isset($_POST['code']) && isset($_POST['civil']) && isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['datenaiss']) && isset($_POST['adr']) && isset($_POST['cp']) && isset($_POST['ville']) && isset($_POST['tel']) && isset($_POST['port']) && isset($_POST['mail']) && isset($_POST['service']) && isset($_POST['cat']) && !empty($_POST['code']) && !empty($_POST['civil']) && !empty($_POST['nom']) && !empty($_POST['prenom']) && !empty($_POST['datenaiss']) && !empty($_POST['adr']) && !empty($_POST['cp']) && !empty($_POST['ville']) && !empty($_POST['tel']) && !empty($_POST['mail']) && !empty($_POST['service']) && !empty($_POST['cat'])){
			
			if(isset($_POST['choix'])){ 
            $sql="UPDATE personnel SET dateNaissance_perso = ".str_to_date($_POST['datenaiss'],"%d-%m-%Y")." 
            ,code_perso='".$_POST['code']."'  
            ,civil_perso='".$_POST['civil']."' 
            , nom_perso='".$_POST['nom']."' 
            ,prenom_perso='".$_POST['prenom']."' 
            ,adr_perso='".$_POST['adr']."' 
            ,cp_perso='".$_POST['cp']."' 
            ,ville_perso='".$_POST["ville"]."' 
            ,tel_perso='".$_POST["tel"]."' 
            ,port_perso='".$_POST["port"]."' 
            ,mail_perso='".$_POST["mail"]."' 
            ,id_service='".$_POST["service"]."' 
            ,id_cat='".$_POST["cat"]."' 
             WHERE id_perso='".($_POST['choix'])."'"; 
		$data= mysql_query($sql);
		echo"<script>location.replace('./index.php?page=accueil_admin&categorie=securite');</script>";
		
		 
}

}	
	}
?>
  
   </body></html>

Posté : 11 juin 2009, 14:06
par rafale69300
enfaite ta requete corrigé que tu m'as données ne fonctionne pas car str_to_date tu l'a prise pour une fonction php alors que c'est du sql donc voila pourquoi cela ne marche pas.
merci d'avance pour m'aider !

Posté : 11 juin 2009, 14:26
par stopher
Ha .. oui effectivement , je n'ai pas fait attention .. autant pour moi ..

La voici modifiée:
if(isset($_POST['choix'])){
            $sql="UPDATE personnel SET dateNaissance_perso = STR_TO_DATE('".$_POST['datenaiss']."',GET_FORMAT(DATE, 'EUR'))
            ,code_perso='".$_POST['code']."' 
            ,civil_perso='".$_POST['civil']."'
            , nom_perso='".$_POST['nom']."'
            ,prenom_perso='".$_POST['prenom']."'
            ,dateNaissance_perso='".$_POST['datenaiss']."'
            ,adr_perso='".$_POST['adr']."'
            ,cp_perso='".$_POST['cp']."'
            ,ville_perso='".$_POST["ville"]."'
            ,tel_perso='".$_POST["tel"]."'
            ,port_perso='".$_POST["port"]."'
            ,mail_perso='".$_POST["mail"]."'
            ,id_service='".$_POST["service"]."'
            ,id_cat='".$_POST["cat"]."'
             WHERE id_perso='".($_POST['choix'])."'";
Tiens nous au courant .

Ch.

Posté : 11 juin 2009, 15:07
par rafale69300
Merci pour votre aide elle marche.

Posté : 11 juin 2009, 15:11
par albat
Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)

Posté : 11 juin 2009, 16:01
par AB
pour htmlhentities :
echo '<option value="'.htmlentities($choix).'" selected="'.htmlentities($donnees[0]).'">'.htmlentities($donnees[1]).'&nbsp;'.htmlentities($donnees[2]).'&nbsp;'.htmlentities($donnees[3]).'</option>';


et plus loin...
<input type="text" name="code"  OnBlur="validite('formulaire','code','AN',5,5);" value="<?php echo htmlentities($donnees[1]);?>">
La fontion trim() s'applique plutôt habituellement à l'insertion des données dans ta bdd.

Et comme ton tableau $_POST de récupération des données est uni dimensionnel tu peux appliquer cette fonction à chacun des éléments du tableau avec array_map, et de même pour la fonction mysql_real_escape_string(), ex :
if(isset($_POST['choix'])){

            $_POST = array_map('trim',$_POST);
            $_POST = array_map('mysql_real_escape_string',$_POST);

            $sql="UPDATE personnel SET 

             dateNaissance_perso = STR_TO_DATE('".$_POST['datenaiss']."',GET_FORMAT(DATE, 'EUR'))
            ,code_perso='".$_POST['code']."' 
            ,civil_perso='".$_POST['civil']."'
            , nom_perso='".$_POST['nom']."'
            ,prenom_perso='".$_POST['prenom']."'
            ,adr_perso='".$_POST['adr']."'
            ,cp_perso='".$_POST['cp']."'
            ,ville_perso='".$_POST["ville"]."'
            ,tel_perso='".$_POST["tel"]."'
            ,port_perso='".$_POST["port"]."'
            ,mail_perso='".$_POST["mail"]."'
            ,id_service='".$_POST["service"]."'
            ,id_cat='".$_POST["cat"]."'
             WHERE id_perso='".($_POST['choix'])."'";  
Attention il y avait une faute dans ta précédente requête, puisque tu renseignais 2 fois le champ 'dateNaissance_perso'

Concernant le champ "dateNaissance_perso" je ne crois pas que cela soit une bonne idée de le formater à l'insertion dans la table de ta bdd. Tu risque d'avoir ensuite des pb si tu fais des tris sur les dates. Il serait peut-être judicieux de l'insérer au format DATE standard, puis de formater cette date uniquement pour l'affichage.

Enfin je vois que tu refuses l'autorisation d'accès en testant la présence d'une variable
if(isset($res_droit)&& $res_droit[0]==0){
    echo "<br/><br/><center><H3/>Vous n'avez pas acc&egrave;s &agrave; cette page</center></h3>";?>
Pour plus de sécurité on teste habituellement par défaut en testant l'absence d'une variable