Erreur auto incrementation

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 : Erreur auto incrementation

Re: Erreur auto incrementation

par imikado » 30 juil. 2013, 10:19

Oubliez pas de passer en [RESOLU] :)

Re: Erreur auto incrementation

par georgetta89 » 30 juil. 2013, 10:04

C'est Ok merci beaucoup, cela faisait un bon moment que j'essayais de trouver une solution merci beaucoup

Re: Erreur auto incrementation

par imikado » 29 juil. 2013, 19:18

oui, il faut ajouter 1 au max récupéré: c'est le maximum en base de donnée, ou sinon faire la requete max apres l'insertion ;)

Re: Erreur auto incrementation

par georgetta89 » 29 juil. 2013, 18:26

En fait il y a juste un petit souci c'est qu'il y a décalage entre le numéro du devis envoyé dans le mail et celui qui apparait dans la base de donnée il y a un décalage de 1, c'est-à-dire, le numéro 1 (par mail) est le numéro 2 (dans la BDD)

Re: Erreur auto incrementation

par georgetta89 » 29 juil. 2013, 18:15

Ca y'est c'est OK tout fonctionne, j'ai supprimé cette partie "(CONVERT(INTEGER)," tout fonctionne à merveille merci beaucoup :wink:

Re: Erreur auto incrementation

par imikado » 29 juil. 2013, 18:14

Essayons

$result = mysql_query('SELECT MAX(CONVERT(INTEGER),numero_devis)) AS total FROM demande_devis');
if($result){
 $row = mysql_fetch_assoc($result)
 $num_devis = $row['total'];
}else{
 var_dump($result);
 var_dump(mysql_error() );
}

je pense qu'il y a un probleme avec le type INTEGER, essayer avec INT

Re: Erreur auto incrementation

par georgetta89 » 29 juil. 2013, 18:07

Un message attention s'affiche :
"Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /homez.52/etrecand/www/tracts.php on line 23
Your message has been sent, thank you"

Re: Erreur auto incrementation

par imikado » 29 juil. 2013, 17:55

mysql_query retourne un un recordset

il faudrait plutot faire:
$result = mysql_query('SELECT MAX(CONVERT(INTEGER),numero_devis)) AS total FROM demande_devis');
$row = mysql_fetch_assoc($result)
$num_devis = $row['total'];

Re: Erreur auto incrementation

par georgetta89 » 29 juil. 2013, 17:50

Effectivement il avait une double incrémentation qui posait problème, en revanche lors de l'envoi du mail en face de "Num_devis :" il n'y a plus rien


<?php 
if(isset($_POST) && isset($_POST['format_tracts']) && isset($_POST['papier']) && isset($_POST['quantite']) && isset($_POST['delai']) && isset($_POST['name']) && isset($_POST['ville']) && isset($_POST['email']) && isset($_POST['tel'])){
	extract($_POST);
	if(!empty($format_tracts) && !empty($papier) && !empty($quantite) && !empty($name) && !empty($ville) && !empty($email) && !empty($tel)){
	
			# Connexion à la MySQL
			mysql_connect("mysql51-53.perso", "etrecandidat", "mdCTGVFy");
			# Sélection de la base 'etrecandidat'
			mysql_select_db("etrecandidat");
			
			# Récupération du plus grand numéro de devis 
			$num_devis = mysql_query("SELECT MAX(CONVERT(INTEGER),numero_devis)) AS total FROM demande_devis");   
			
			# Insertion des éléments dans la" table
			$variable = mysql_query("INSERT INTO demande_devis (format_tracts,papier,quantite,delai,name,ville,email,tel) VALUES ('$format_tracts','$papier','$quantite','$delai','$name','$ville','$email','$tel')") or die (mysql_error());
			mysql_close();
			# Création du corp de l'email
			$destinataire="[email protected]"; 
			
			$sujet="Demande de devis";
			
   			$msg="Nouvelle demande de devis
			Num_devis : $num_devis
			Nom du candidat : $name
			Ville : $ville
			Email : $email
			Tél. : $tel
			Format : $format_tracts
			Papier : $papier
			Quantite : $quantite
			Délai : $delai
			Prix : $prix";
			
			$entete="From: $email";
			
			# Envoi de l'email
			mail($destinataire,$sujet,$msg,$entete);
			

			
			echo "Your message has been sent, thank you";
			

          } 
     } 
	 
	 else{
	
		echo "you have not filled in all fields";
		
		}
	 
	 
?>

Re: Erreur auto incrementation

par imikado » 29 juil. 2013, 17:22

Si le champ est déjà incremental, il ne faut pas essayer de le forcer, mais laisser faire mysql, non ?
INSERT INTO demande_devis (format_tracts,papier,quantite,delai,name,ville,email,tel) VALUES ('$format_tracts','$papier','$quantite','$delai','$name','$ville','$email','$tel')") 

Re: Erreur auto incrementation

par georgetta89 » 29 juil. 2013, 17:00

J'ai toujours la même erreur ! L'incrémentation ne fonctionne pas, voici une capture d'ecran du tableau de bord phpmyadmin il a peut-être un souci a ce niveau que je ne vois pas
http://etrecandidat.fr/Capture.png

Re: Erreur auto incrementation

par imikado » 29 juil. 2013, 16:49

SELECT MAX(CONVERT(INTEGER),monchamp)) as total 
note: a adapter, si c'est mysql c'est peut etre INT à la place d'INTEGER

Re: Erreur auto incrementation

par Georgetta899 » 29 juil. 2013, 16:44

Merci pour votre réponse, comment fait on pour faire une conversion en nombre entier ?

Re: Erreur auto incrementation

par imikado » 29 juil. 2013, 16:40

Essayez d'afficher votre code d'insertion pour vérifier que le nouvel id est bien différent de celui présent en base de donnée ;)

note : vous pouvez également faire une conversion en entier lors de l'appel au max (dans le cas où il ferait un max en chaine de caractère)
Cas qui m'était déjà arrivé ;)

Erreur auto incrementation

par Georgetta899 » 29 juil. 2013, 16:20

Bonjour, voici mon souci j'ai créé un formulaire pour effectuer des commande je souhaite attribuer un numéro de devis a chaque envoi de formulaire seulement lorsque je fait des essais au bout du deuxième envoi j'ai un message d'erreur du type "Duplicate entry '1' for key 'PRIMARY'"
Voici le code je ne comprend pas d'où vient l'erreur
<?php 
if(isset($_POST) && isset($_POST['format_tracts']) && isset($_POST['papier']) && isset($_POST['quantite']) && isset($_POST['delai']) && isset($_POST['name']) && isset($_POST['ville']) && isset($_POST['email']) && isset($_POST['tel'])){
	extract($_POST);
	if(!empty($format_tracts) && !empty($papier) && !empty($quantite) && !empty($name) && !empty($ville) && !empty($email) && !empty($tel)){
	
			# Connexion à la MySQL
			mysql_connect("mysql51-53.perso", "***", "***");
			# Sélection de la base 'etrecandidat'
			mysql_select_db("etrecandidat");
			
			# Récupération du plus grand numéro de devis 
			$num_devis = mysql_query("SELECT MAX(numero_devis) AS numero_devis WHERE demande_devis");
			# Incrémentation du numéro de devis
			$num_devis = ($num_devis + 1 );
			# Insertion des éléments dans la" table
			$variable = mysql_query("INSERT INTO demande_devis (numero_devis,format_tracts,papier,quantite,delai,name,ville,email,tel) VALUES ('$num_devis','$format_tracts','$papier','$quantite','$delai','$name','$ville','$email','$tel')") or die (mysql_error());
			mysql_close();
			# Création du corp de l'email
			$destinataire="[email protected]"; 
			
			$sujet="Demande de devis";
			
   			$msg="Nouvelle demande de devis
			Num_devis : $num_devis
			Nom du candidat : $name
			Ville : $ville
			Email : $email
			Tél. : $tel
			Format : $format_tracts
			Papier : $papier
			Quantite : $quantite
			Délai : $delai
			Prix : $prix";
			
			$entete="From: $email";
			
			# Envoi de l'email
			mail($destinataire,$sujet,$msg,$entete);
			

			
			echo "Your message has been sent, thank you";
			

          } 
     } 
	 
	 else{
	
		echo "you have not filled in all fields";
		
		}
	 
	 
?>