UPDATE insertion

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 : UPDATE insertion

Re: UPDATE insertion

par AB » 27 oct. 2014, 22:37

En plus des remarques de yann18, sur le principe je ne te demandais pas où tu as placé tes contrôles ! Je te dis ce qu'il faut faire pour pouvoir contrôler ce que tu envoies à la fin du processus juste avant d'exécuter la requête. Ainsi tu sauras si le pb se situe avant (récupération des données) ou durant la requête. Alors fais-le et fais afficher ce foutu tableau que tu passe dans ta fonction "execute". C'est si compliqué ? Juste avant le $modif->execute(array...
tu fais :
print_r(array(
                  'id_region'=>regionIdByDepartement($_POST['departements']),
                  'id_departements' => $_POST['id_departements'],
                  'id_type_loisirs' => $_POST['id_type_loisirs'],
                  'photo'=>$namefile,
                  'titre' => $_POST['titre'],
                  'sous_titre' => $_POST['sous_titre'],
                  'date_debut_sortie' => $_POST['date_debut_sortie'],
                  'date_fin_sortie' => $_POST['date_fin_sortie'],
                  'description' => $_POST['description'],
                  'phone' => $_POST['phone'],
                  'email' => $_POST['email'],
                  'website' => $_POST['website'],
                  'street' => $_POST['street'],
                  'postcode' => $_POST['postcode'],
                  'city' => $_POST['city'],
                  'price' => $_POST['price']
                  )); exit;
C'est le beaba du débuggage de contrôler ce qu'on envoie aux requêtes quand y'a un pb :wink:

Re: UPDATE insertion

par yann18 » 27 oct. 2014, 22:24

Code : Tout sélectionner

'id_departements' => $_POST['id_departements'],
l'attribut name de l'élément select du formulaire se nomme departements et non id_departements.

d'autre part tu insères des dates au format non compatible avec mysql car mysql attend une date 2014-10-31 23:00 et non 31/10/2014 23:00.A aucun moment tu ne récupères les dates formatées($date_debut, $date_fin):
      
                  $modif->execute(array(
                  'id_region'=>regionIdByDepartement($_POST['departements']),
                  'id_departements' => $_POST['departements'],
                  'id_type_loisirs' => $_POST['id_type_loisirs'],
                  'photo'=>$namefile,
                  'titre' => $_POST['titre'],
                  'sous_titre' => $_POST['sous_titre'],
                  'date_debut_sortie' => $date_fin,
                  'date_fin_sortie' => $date_debut,
                  'description' => $_POST['description'],
                  'phone' => $_POST['phone'],
                  'email' => $_POST['email'],
                  'website' => $_POST['website'],
                  'street' => $_POST['street'],
                  'postcode' => $_POST['postcode'],
                  'city' => $_POST['city'],
                  'price' => $_POST['price']
                  ));
si tu avais activé l'affichage des erreurs et qu'en même temps tu gérais les exceptions PDO tu pouvais facilement te rendre compte de tes erreurs.

Tu peux valider un email, une url directement avec les filtres de validation de php au lieu d'utiliser des expressions regulières:
//pour valider un email
if(filter_var("[email protected]", FILTER_VALIDATE_EMAIL)) {
  echo "email valide";
}
else {
     echo "email non valide";
}

//pour valider une url
if(filter_var("http://www.google.fr", FILTER_VALIDATE_URL)) {
  echo "url valide";
}
else {
     echo "url non valide";
}

Re: UPDATE insertion

par yoann38 » 27 oct. 2014, 20:44

Je me suis peut etre mal exprimé ce que je voulais dire en fait,
c'est que j'ai placé les Print_r juste avt la soumission comme ça:
// .... blabla
              'street' => $_POST['street'],
                  'postcode' => $_POST['postcode'],
                  'city' => $_POST['city'],
                  'price' => $_POST['price']
                  ));
				  
				
			
                    
                  echo '<div class="container"><div class="col-md-6 col-md-offset-2 col-sm-8 col-sm-offset-2">
    <div class="alert alert-success okay" role="alert"> <i class="fa fa-smile-o"></i>
 Votre annonce à bien était modifiée et sera analyser dans les 24H00</div></div></div>';

}else{//le tableau ne contient
echo '<div class="container"><div class="col-md-6 col-md-offset-2 col-sm-8 col-sm-offset-2">
    <div class="alert alert-danger okay" role="alert">Renseignez les champs  vides</div></div></div>';
}
  	  Print_r ($_FILES) ;
       Print_r($_POST['date_fin_sortie']);
       Print_r($_POST['date_debut_sortie']) ;
      Print_r($_POST['departements']) ;
	  Print_r($_POST['titre']) ;
 
}//fin de la soumission du formulaire
  
                    
            ?>
              
Et après avoir validé en ressort: ( ce qui correspond a ce que j'avais saisie )
Array ( [photo] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) ) 31/10/2014 22:0029/10/2014 23:0067

Re: UPDATE insertion

par AB » 27 oct. 2014, 20:26

C'est juste avant l'insertion en bdd qu'il faut contrôler tes données puisque c'est là qu'il y a un pb. Fais afficher le tableau que tu passe à execute !

Re: UPDATE insertion

par yoann38 » 27 oct. 2014, 20:12

Actuellement lors des print apres l'envoi du formulaire je recois les données suivante qui sont bonnes:
( [photo] => Array ( [name] => 1599393_303280549860641_1209441043662790691_o.jpg [type] => image/jpeg [tmp_name] => /home/temporaire/upload/phpPg95mF [error] => 0 [size] => 314330 ) )
31/10/2014 23:00
28/10/2014 23:00
67

En faisant un petit echi just avant de soumettre le form j'ai les bonnes info saisie.
Je ne vois pas ou est le pbm.

Re: UPDATE insertion

par AB » 27 oct. 2014, 19:57

Si pas d'erreur bdd et que tes autres champs sont enregistrés alors c'est que tes valeurs sont nulles ? Fais afficher les variables juste avant l'insertion, c'est à dire le tableau que tu passe dans ton "execute".

Sinon tu ferais mieux de passer par le mode exception et des blocs try/cath.
Et au passage on utilise plus $bdd->exec('SET NAMES utf8'); pour configurer mysql mais PDO::MYSQL_ATTR_INIT_COMMAND. Et à partir de php 5.3.6 on peut passer le charset dans la connexion :
$bdd = new PDO('mysql:host='.$hostname.';dbname='.$database.';charset=utf8', $username, $password, $pdo_options);

Re: UPDATE insertion

par yoann38 » 27 oct. 2014, 19:26

j'ai déjà quelque chose comme ça :)
$bdd = new PDO('mysql:host=*****;dbname=*****', '*****', '*****') or die(print_r($bdd->errorInfo()));
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$bdd->exec('SET NAMES utf8');

Ca m'aide pas trop dans mon pbm ...

Re: UPDATE insertion

par AB » 27 oct. 2014, 19:10

Salut,

Fais afficher les erreurs dans ta connexion bdd avec un truc du genre

Code : Tout sélectionner

$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
après tu y verras plus clair dans les messages de retour de pdo

UPDATE insertion

par yoann38 » 27 oct. 2014, 18:33

Salut, j'ai un soucis avec un UPDATE un peu long.
J'ai un pbm avec l'insertion en bdd de certains champs.
Les dates et le numéro de departement, le reste pas de pbm.

Le code:
<?php
              
$erreurs = array();
  

if (isset($_GET['id_annonce'])) {
  $idAnn = $_GET['id_annonce'];
} elseif  (isset($_POST['id_annonce'])) {
  $idAnn = $_POST['id_annonce'];
} else {
  $idAnn = 0;
}
 
 
 if(!empty($_POST)) {//soumission du formulaire
   //Verification titre
  if(empty($_POST['titre']))
  {
   $erreurs['titre'] = 'Renseigner un nom de sortie';
  }
 
    //Verification du champ email( on vérifie si le champ n'est pas vide )
  if(!preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$_POST['email'])){
	$erreurs['email'] = "Veuillez verifier la saisie de votre e-mail";
	}
	

	//Verification du  telephone
	  if(empty($_POST['phone']))
	  {
		$erreurs['phone'] = 'Renseigner un telephone';
	  }

  //Verification du champ email( on vérifie si le champ n'est pas vide )
  if(!preg_match("#^0[1-68]([-. ]?[0-9]{2}){4}$#",$_POST['phone'])){
	$erreurs['phone'] = "Veuillez verifier la saisie de votre téléphone";
	}



	//Verification de l'adresse url
	  if(empty($_POST['website']))
	  {
		$erreurs['website'] = 'Veuillez renseigner une adresse url';
	  }

  //Verification de la saise de l'adressee url
  if(!preg_match("#^http://[w-]+[w.-]+.[a-zA-Z]{2,6}#i",$_POST['website'])){
	$erreurs['website'] = "Veuillez verifier la saisie de votre adresse url";
	}

  
   //Verification description
  if(empty($_POST['email']))
  {
    $erreurs['email'] = 'verifier';
  }
 
   //Verification code postal
  if(empty($_POST['postcode']))
  {
    $erreurs['postcode'] = 'Renseigner un code postal';
  }
 
   //Verification sous-titre
  if(empty($_POST['sous_titre']))
  {
    $erreurs['sous_titre'] = 'Votre sortie en quelques mots';
  }
 
 
   //Verification description
  if(empty($_POST['description']) )
  {
    $erreurs['description'] = 'Le detail de votre sortie';
  }


  
  /////////
  
  
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
  

// Upload des fichier
$namefile = '';
		if(!empty($_FILES)) {	
	
			if(!empty($_FILES['photo']['tmp_name'])) {
								
				$path = 'img/annonce/';									
				$namefile = filename($_FILES['photo']['name'], $_POST['titre']);
		
				$return = upload($_FILES['photo'], $namefile, $path, array('image/jpg', 'image/jpeg', 'image/pjpeg', 'image/bmp', 'image/png', 'image/gif'));
				echo  $return[0];
				$erreur = $return[1];
				
				if($erreur <= 1) {
									
					echo imageparfaite(600, 600, $path.$namefile, $path.'600/'.$namefile, 1);
					echo imageparfaite(300, 300, $path.$namefile, $path.'300/'.$namefile, 1);
					
				} else {
					
					echo $erreur;
					
				}
				
				// Faire un message du genre annonce envoyé avec succes
										
			}	
			
		}

//le tableau d'erreurs est vide alors on insère les données

if( empty( $erreurs)  ){
	
		$_POST['jour_semaine'] = array(); // Puisque ca a disparu ...
		

//conversion de la date debut du format fr(jj:mm:aaaa hh:mm:ss) en format us(aaaa-mm-jj hh:mm:ss)
$date_debut = date_create_from_format('d/m/Y H:i', $_POST['date_debut_sortie']);
$date_debut = date_format($date_debut, 'Y-m-d H:i:s');

//conversion de la date fin du format fr(jj:mm:aaaa hh:mm:ss) en format us(aaaa-mm-jj hh:mm:ss)
$date_fin = date_create_from_format('d/m/Y H:i', $_POST['date_debut_sortie']);
$date_fin = date_format($date_fin, 'Y-m-d H:i:s');

                              
              
                 $sql = "SELECT * FROM `loisirs` WHERE `id_loisirs` =".$idAnn;
                 $req = $bdd->query($sql);
                   
  
  
          
                 $modif = $bdd->prepare("UPDATE loisirs SET id_region = :id_region, id_departements = :id_departements, id_type_loisirs = :id_type_loisirs, photo = :photo,  titre = :titre, sous_titre = :sous_titre,  date_debut_sortie = :date_debut_sortie, date_fin_sortie = :date_fin_sortie, description = :description, phone = :phone,  email = :email, website = :website, street = :street, postcode = :postcode, city = :city, price = :price WHERE id_loisirs =".$idAnn);
                   
                   
                  $modif->execute(array(
                  'id_region'=>regionIdByDepartement($_POST['departements']),
                  'id_departements' => $_POST['id_departements'],
                  'id_type_loisirs' => $_POST['id_type_loisirs'],
                  'photo'=>$namefile,
                  'titre' => $_POST['titre'],
                  'sous_titre' => $_POST['sous_titre'],
                  'date_debut_sortie' => $_POST['date_debut_sortie'],
                  'date_fin_sortie' => $_POST['date_fin_sortie'],
                  'description' => $_POST['description'],
                  'phone' => $_POST['phone'],
                  'email' => $_POST['email'],
                  'website' => $_POST['website'],
                  'street' => $_POST['street'],
                  'postcode' => $_POST['postcode'],
                  'city' => $_POST['city'],
                  'price' => $_POST['price']
                  ));
                    
                  echo '<div class="container"><div class="col-md-6 col-md-offset-2 col-sm-8 col-sm-offset-2">
    <div class="alert alert-success okay" role="alert"> <i class="fa fa-smile-o"></i>
 Votre annonce à bien était modifiée et sera analyser dans les 24H00</div></div></div>';

         
}else{//le tableau ne contient
echo '<div class="container"><div class="col-md-6 col-md-offset-2 col-sm-8 col-sm-offset-2">
    <div class="alert alert-danger okay" role="alert">Renseignez les champs  vides</div></div></div>';
}
  
}//fin de la soumission du formulaire
  
                    
            ?>
Et coté formulaire:
<form class="ins_con"  action="modifier_annonce.php" method="post" enctype="multipart/form-data" onSubmit="return(VerifForm(this))">
        <input type="hidden" name="id_annonce" value="<?php echo $idAnn; ?>">
     
        <center><h4>Modifier ma sortie</h4></center>
         <br>
        <label for="departement">Departement </label>
        <select class="form-control" name="departements" id="departement">
        <option value="">Département dans lequel votre évenement se déroulera</option>
        <?php $departement = !empty($_POST['departement']) ? $_POST['departement'] : NULL; echo aRegionDepartement($departement); ?>
        </select>
        <br>
         
        <!-- bla bla -->
     
     <label>Sortie</label>
     <select class="form-control" name="type_loisirs" id="age">
        <option value="">Le type d'évenement</option>
        <?php foreach($aLoisirs as $k => $v) {
            $selected = !empty($_POST['type_loisirs']) && ($_POST['type_loisirs'] == $k) ? ' selected="selected"' : NULL;
            echo '<option value="'.$k.'"'.$selected.'>'.$v.'</option>'."\n";
        } ?>
        </select>
        <br>
      
             
     <!-- titre de la sortie -->
     <label>titre :</label>
     <input class="form-control" id="titre" type="text" name="titre" value="<?php if(isset($_POST['titre'])) echo $_POST['titre'];?>" />
     <?php if(isset($erreurs['titre'])) echo '<div class="alert alert-danger" role="alert">' .$erreurs['titre'].'</div>';?>
     <br>
   
   
   
      <!-- titre de la sortie -->
     <label>email :</label>
     <input class="form-control" type="text" name="email"  value="<?php if(isset($_POST['email'])) echo $_POST['email'];?>" />
     <?php if(isset($erreurs['email'])) echo '<div class="alert alert-danger" role="alert">' .$erreurs['email'].'</div>';?>
     <br>
       
       <!-- Ville de la sortie -->
      <label>Rue</label>
      <input class="form-control" type="text" name="street" value="<?php if(isset($_POST['street'])) echo $_POST['street'];?>" />
      <?php if(isset($erreurs['street'])) echo '<div class="alert alert-danger" role="alert">' .$erreurs['street'].'</div>';?>
      <br>
       
      <!-- Code postal de la sortie -->
      <label>Code postal *</label>
      <input class="form-control" type="text" name="postcode" id="postcode" value="<?php if(isset($_POST['postcode'])) echo $_POST['postcode'];?>" />
      <div class="error"><?php if(isset($erreurs['postcode'])) echo $erreurs['postcode'];?></div>
        
      <script>
    $(document).ready(function(){
        $( "#postcode" ).autocomplete({
            source: "autocomplet.php",
            dataType: "json",
            minLength: 1,
            select: function( event, ui ) {
                $('#city').val(ui.item.ville);
            }
         });
    });
    </script>
    <br>
       
      <!-- Ville de la sortie -->
      <label>Ville *</label>
      <input class="form-control" type="text" name="city" id="city" value="<?php if(isset($_POST['city'])) echo $_POST['city'];?>" readonly placeholder="Indiquez votre code postal avant !" />
      <?php if(isset($erreurs['city'])) echo '<div class="alert alert-danger" role="alert">' .$erreurs['city'].'</div>';?>
        <br>
          
       <!-- Sous-titre de la sortie -->
      <label>Sous titre*</label>
      <input class="form-control" type="text" name="sous_titre" value="<?php if(isset($_POST['sous_titre'])) echo $_POST['sous_titre'];?>" />
        <br>
          
      <!-- Sous-titre de la sortie -->
      <label>website</label>
      <input class="form-control" type="text" name="website" value="<?php if(isset($_POST['website'])) echo $_POST['website'];?>" />
      <?php if(isset($erreurs['website'])) echo '<div class="alert alert-danger" role="alert">' .$erreurs['website'].'</div>';?>
      <br>
       
      <!-- Sous-titre de la sortie -->
      <label>Prix</label>
      <input class="form-control" type="text" id="price" name="price" value="<?php if(isset($_POST['price'])) echo $_POST['price'];?>" />
      <br>
      
       
       <!-- Description de la sortie -->
       <label>Detail de votre sortie</label>
       <input class="form-control" type="text" name="description" value="<?php if(isset($_POST['description'])) echo $_POST['description'];?>" />
       <?php if(isset($erreurs['description'])) echo '<div class="alert alert-danger" role="alert">' .$erreurs['description'].'</div>';?>
        <br>
         
         
      <label>Date de début</label>
      <input class="form-control" id="date_debut_sortie"  name="date_debut_sortie" type="text" value="<?php echo !empty($_POST['date_debut_sortie']) ? $_POST['date_debut_sortie'] : NULL; ?>" />
      <br>
      
      <label>Date de fin</label>
      <input class="form-control" id="date_fin_sortie" name="date_fin_sortie" type="text" value="<?php echo !empty($_POST['date_fin_sortie']) ? $_POST['date_fin_sortie'] : NULL; ?>" />
<script type="text/javascript">// <![CDATA[
$(document).ready(function(){
 $('#date_debut_sortie').datetimepicker({
   format:'d/m/Y H:i',
   onShow:function( ct ){
     this.setOptions({
       maxDate:$('#date_fin_sortie').val()?$('#date_fin_sortie').val():false
     })
   },
   timepicker:true
 });
 $('#date_fin_sortie').datetimepicker({
   format:'d/m/Y H:i',
   onShow:function( ct ){
     this.setOptions({
       minDate:$('#date_debut_sortie').val()?$('#date_debut_sortie').val():false
     })
   },
   timepicker:true
 });
});
// ]]></script>
<br>
  
          <label>Télephone</label>
      <input class="form-control" type="text" name="phone" value="<?php if(isset($_POST['phone'])) echo $_POST['phone'];?>" />
       <?php if(isset($erreurs['phone'])) echo '<div class="alert alert-danger" role="alert">' .$erreurs['phone'].'</div>';?>
          <br> 
          
          
          
          <label>Photo</label>
      <input name="photo" type="file"/>
        
       
         
   <br>
    <input class="btn-u" type="submit" value="ENVOYER">
    </form>
J'affiche mes "problèmes avec print"
<?php Print_r($_FILES) ?>
       <?php Print_r($_POST['date_fin_sortie']) ?>
       <?php Print_r($_POST['date_debut_sortie']) ?>
       <?php Print_r($_POST['departements']) ?>
Mais résultats sont bon mais ne s'insere pas en bdd.
Je recois bien avec le PRINT par exemple:
Array ( [photo] => Array ( [name] => 1599393_303280549860641_1209441043662790691_o.jpg [type] => image/jpeg [tmp_name] => /home/temporaire/upload/phpjfMe3j [error] => 0 [size] => 314330 ) )
30/10/2014 17:00
29/10/2014 17:00
38‏