Enregistrement de données formulaire dans mysql

Résolu
Dbl35 Messages postés 71 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 11 juillet 2015 - Modifié par jordane45 le 1/10/2014 à 20:23
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 23 déc. 2014 à 16:21
Bonjour,
Je cale sur cela depuis 2 semaines :

J'ai un formulaire et n'arrive pas à enregistrer des données dans mysql.
Le code suivant fait que j'enregistre éternellement en Bd et mon echo var_dump() est toujours NULL
<div class="cfg-element-container">
<label class="cfg-label" id="cfg-element-35-7-label" ><span class="cfg-label-value">Nom Prénom</span><span class="cfg-required">*</span></label>
 <div class="cfg-element-set" id="cfg-element-35-7-set" >
  <div class="cfg-element-content">
  <input type="text" class="cfg-type-text cfg-form-value " name="cfg-element-35-7" id="cfg-element-35-7"  />

Le PHP

<?php
if (isset($_POST["cfg-element-35-7"]) && !empty($_POST["cfg-element-35-7"]))
{$nomtobase=$_POST["cfg-element-35-7"];}
else
{$nomtobase="empty";}

 // à partir de là on ne travaille plus qu'avec $nomtobase
if ($nomtobase==='empty') { print "champ 'cfg-element-35-7' non soumis via formulaire";exit;}

// traitement base
        $db=mysql_connect("mabase.eu.mysql", "mabase_eu", "*****");// ok
        mysql_select_db("mabase_eu.mysql", $db);// ok
//$sql="INSERT INTO matable (nomprenom) VALUES ('$nomtobase')";
         $sql="INSERT INTO confid (nomprenom) VALUES('".$nomtobase."')";
        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());   // insertion table
        echo var_dump($nomtobase);//affiche NULL 
        mysql_close();
        ?>
</div>
</div>
<div class="cfg-clear"></div>


Après le submit du formulaire, je reçois bien un mail du contact avec les coordonnées du contact, je ne sais pas comment récupérer le name cfg-element-35-7 dans l'input pour l'entrer dans la bd.

J'imagine que lorsque je valide le formulaire les coordonnées sont enregistrées temporairement et que donc mon php active l'enregistrement en bd avant le submit, >> champs vide >> recopie d'un champ vide

Mon champ dans ma bd est toujours empty


Je suis sous php 5.3 et php.ini est à Off

Merci de m'aider, je débute .. j'ai vraiment besoin d'un coup de pouce

EDIT : Ajout des balises de code.(jordane)
A voir également:

26 réponses

Dbl35 Messages postés 71 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 11 juillet 2015 1
24 oct. 2014 à 14:03
Bonjour Jordane,

J'ai tenté ce que tu m'indiques, tu as raison : "NO Values" est bien enregistré dans ma bd ..

Concernant la gestion de mes propres variables ( modifs JS e tPhp ) : même résultat.


J'envisage peut être d'autres solutions telles que celle-ci :
- récupérer toutes les données du "form_value_array" pour les entrer (toutes) dans la bd, cela ne me dérangerai pas outre mesure. Je reconfigurerai alors le formulaire en terme de données "require".

Avec ce code dans mon php (sans toucher au JS puisque toutes données se retrouvent envoyées ici), je charge en bd en une seule fois, toutes les variables (8), mais toujours en "no values" .

Pourtant je teste uniquement sur une variable $nomprenom.. ?

<code>if(isset($_POST['form_value_array']) && $_POST['form_value_array'])
{
	foreach($_POST['form_value_array'] as $value)
	{
// traitement en bd
$contactform_obj->mergePost($value);
$nomprenom = isset($_POST['cfg-element-35-7'])?$_POST['cfg-element-35-7']:'NO values = pas de valeur nomprenom';
$DSN_string='mysql:host=**********.eu.mysql;dbname=************_eu';
$USER_string='*************_eu';
$PWD_string='***************';
try {
$PDOInstance = new PDO($DSN_string, $USER_string, $PWD_string);
$PDOInstance->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 
}
catch (PDOException $e){print 'PDO_err : '.$e->getMessage();}
// entree data
$result=$PDOInstance->query("INSERT INTO matable (nomprenom) VALUES ('$nomprenom')");
	}
}
</code>

Comment je peux extraire tout les contenus ?
Peut être que c'est parce que je teste sur une seule variable ?
Je recommence à être dépassé..

Ps ; j'ai remis le js en état d'origine sans les modifs que tu m'indiquais.


Je vois un autre code du php, je ne sais pas si je suis au bon endroit.
merci beaucoup
dan
0
Dbl35 Messages postés 71 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 11 juillet 2015 1
24 oct. 2014 à 17:05
(re)

Merci pour ton aide, CA MARCHE !!!!


Il suffisait de placer la ligne js avant le delette :
<code> var TaVar = $("#cfg-element-35-7").val();
		jQuery.post('cfg-contactform-35/inc/form-validation.php',
				{ 
				'captcha_img':captcha_img,
				'captcha_input':captcha_input,
				'form_value_array':form_value_array,
				'taVariable':TaVar,
				'deleteuploadedfile':deleteuploadedfile_value
				},
</code>

et le php pour qui pourrait en avoir besoin :

<code>$nomprenom = isset($_POST['taVariable'])?$_POST['taVariable']:'pas de valeur nomprenom';
$DSN_string='mysql:host=***.eu.mysql;dbname=***_eu';
$USER_string='***_eu'; 
$PWD_string='***';
try {
$PDOInstance = new PDO($DSN_string, $USER_string, $PWD_string);
$PDOInstance->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 
}
catch (PDOException $e){print 'PDO_err : '.$e->getMessage();}
$result=$PDOInstance->query("INSERT INTO latable (nomprenom) VALUES ('$nomprenom')")
</code>

Juste un tout petit souçi, tant que le formulaire n'est pas validé, exemple il manque une information, j'enregistre dés que je submit, donc x fois "submit" = x fois enregistrements bd..

Mille remerciements Jordane, décidément, il n'y en jamais pour très longtemps avec ton aide.
Très certainement à bientôt, j'ai pas fini..
Bien sincèrement
Dan
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
24 oct. 2014 à 17:09
Juste un tout petit souçi, tant que le formulaire n'est pas validé, exemple il manque une information, j'enregistre dés que je submit, donc x fois "submit" = x fois enregistrements bd..


Il te faut, en Javascript, tester avant de lancer le "submit" vérifier si tous tes champs sont complétés....
Ainsi tu évites les multiples enregistrements.
Tu peux aussi, dans ton code PHP, vérifier si ton enregistrement existe déjà.. et dans ce cas faire un UPDATE au lieu d'un INSERT.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
24 oct. 2014 à 17:09
N'oubllies pas;..

Si la question est résolue..
Merci de ne pas oublier de clôturer le sujet
(en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

Cordialement,
Jordane
0
Dbl35 Messages postés 71 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 11 juillet 2015 1
24 oct. 2014 à 19:43
Bonsoir Jordane,
Je ne vais clore aujourd'hui, je vais d'abord mettre en oeuvre l'update.

Par contre j'ai aussi un checkbox :
Dans la Div
<div class="cfg-option-content cfg-element-35-39-option-content" >
<input type="checkbox" class="cfg-form-value" name="cfg-element-35-39" id="cfg-element-35-39-0" value="A" />
<input type="checkbox" class="cfg-form-value" name="cfg-element-35-39" id="cfg-element-35-39-1" value="B" />
...



Dans le .js, je ne vois pas ou est le résultat pou l'incorporer dans mes codes script.
Autrement je passerai par des if empty ==> if empty ==> if empty etc.. pour chaque choix "A", "B", ..
Si je trouve pas avant lundi, si tu le veux bien, je te recontacterai.

Par contre, je te confirme, dans :
<code>var TaVar = $("#cfg-element-35-7").val();
jQuery.post('cfg-contactform-35/inc/form-validation.php',
				{ 
				'captcha_img':captcha_img,
				'captcha_input':captcha_input,
				'form_value_array':form_value_array,
				'deleteuploadedfile':deleteuploadedfile_value,
                                'taVariable':TaVar
				},
</code>
si je place <code> 'taVariable':TaVar" aprés  'deleteuploadedfile':deleteuploadedfile_value,
</code>
ça ne fonctionne pas, je ne sais pas pourquoi, mais du moment que ça marche, à mon niveau c'est amplement satisfaisant.
Merci
Bon WE
dan
0
Dbl35 Messages postés 71 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 11 juillet 2015 1
2 déc. 2014 à 14:45
Ok, ça marche , merci Jordane
Je passe le sujet en résolu
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dbl35 Messages postés 71 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 11 juillet 2015 1
23 déc. 2014 à 16:11
Bonjour Jordane,

j'ai oublié de passer le sujet en résolu, je le fais de ce pas..

J'en profite pour te présenter mes voeux 2015, réussite toujours, santé bien sûr, et sans oublier l'accomplissement personnel.

Dernier MERCI 2014 pour ton aide*, mais je pense encore avoir besoin de tes expertises.. en 2015.
Bien cordialement
Dan

* Faut pas sourire.. c'est pas pour ça que je te présente mes voeux, je suis "vieille France et c'est sincère
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
23 déc. 2014 à 16:21

Faut pas sourire.. c'est pas pour ça que je te présente mes voeux, je suis "vieille France et c'est sincère

Je souri c'est vrai.. mais c'est parce que ça me fait plaisir...

Dan, Je te souhaites également de passer de bonnes faites de fin d'année et que ton année 2015 t'apporte bonheur, santé et réussite (surtout en programmation ^^ ).
@++
0
Dbl35 Messages postés 71 Date d'inscription mardi 19 novembre 2013 Statut Membre Dernière intervention 11 juillet 2015 1
17 oct. 2014 à 13:10
Merci de "ré" inrevenir.

Je "colle" le fichier form-validation ci dessous.
Mais, et tu me corrigeras si mon raisonnement n'est pas bien:
- lorsque le formulaire est rempli par un utilisateur et que les informations/champs sont validées par le captcha , je reçois un mail.
- Dans ce mail se trouve précisément les infos que je veux entrer dans ma bd.
- Donc, à ce stade d'envoi du mail ( function getEmail...), je suppose que toutes les données ont été traitées et validées préalablement.
==> si je positionne un require_once de connectionbd et qu'ensuite j'y enregistre les données du mail cela devrait être réglé si j'arrive à "isoler" chaque variable du formulaire..

Ce serait peut être plus facile de laisser "l'envoi du formulaire" se faire, et de capter les infos à ce moment là sans s'embêter dans les formvalidation et autres..

Le submit dans ma div formulaire situé par le(la?) captcha
<code><div class="cfg-element-container">
	<div class="cfg-element-set" id="cfg-element-35-32-set" >
		<div class="cfg-element-content">
		<input type="submit" <gras>class="cfg-submit " name="cfg-element-35-32" id="cfg-element-35-32</gras>" value="Envoi du message"   />
		</div>
	</div>
</div>
<div class="cfg-loading"> </div>
</code>


Le fichier formvalidation.php
<code><?php
session_start();

// appel fichiers
require_once('../inc/contactform.config.php');
// $cfg['form_validationmessage'] = 'Merci de votre message, nous vous recontactons sous 24 h'; / $cfg['form_errormessage_captcha'] = 'Le code de sécurité n\'est pas correct'; / $cfg['form_errormessage_emptyfield'] = 'Ce champ n\'est pas rempli'; + etc ...............

require_once('../class/class.contactform.php');
// 	function contactForm($cfg) + function sendMail($param) + function sendMailReceipt($value) + function mergePost($value) + function isEmail($email) + function quote_smart($value) + function getMailHeaders($mailheaders_options)

$contactform_obj = new contactForm($cfg);

$json_error = '';

$post_required_element = array('cfg-element-35-11','cfg-element-35-7','cfg-element-35-41','cfg-element-35-4','cfg-element-35-13','cfg-element-35-39','cfg-element-35-40');

$post_required_email = array('cfg-element-35-37');

if($_SESSION['captcha_img_string']['43f35df2cf9178944d9dc53a5117e79e218cd9f5'] != $_POST['captcha_input']){$json_error .= '{"element_id":"cfg-element-35-15", "errormessage": "'.addcslashes($contactform_obj->cfg['form_errormessage_captcha'], '"').'", "elementlabel_id": "cfg-element-35-15-label"},';}
?>
<?php
/**
 * required files and elements are written in saveform.php
 * $post_required_element = array...
 * $post_required_email = array...
 * $json_error = '';
 * json error message for invalid captcha (captcha_img_string)
 */
//************************************* delete the files the user uploaded and then deleted **********************************

if(isset($_POST['deleteuploadedfile']) && $_POST['deleteuploadedfile'])
{
	foreach($_POST['deleteuploadedfile'] as $value)
	{
		
		if(in_array($value, $_SESSION['uploaded_files']))
		{
			@unlink('../upload/'.$contactform_obj->quote_smart($value));
		}
	}
}

if(isset($_POST['form_value_array']) && $_POST['form_value_array'])
{
	foreach($_POST['form_value_array'] as $value)
	{
		$contactform_obj->mergePost($value);

	}
}

//  **************************************** print_r($post_element_ids);print_r($contactform_obj->merge_post); ???? fusionne des tableaux ??

if(isset($post_required_element) && $post_required_element && isset($contactform_obj->merge_post) && $contactform_obj->merge_post)
{
	foreach($post_required_element as $value)
	{
		foreach($contactform_obj->merge_post as $vvalue)
		{
			if($vvalue['element_id'] == $value)
			{
				if(!$vvalue['element_value'])
				{	//echo $value;
					$json_error .= '{"element_id":"'.$value.'",  "errormessage": "'.addcslashes($contactform_obj->cfg['form_errormessage_emptyfield'], '"').'", "elementlabel_id": "'.$vvalue['elementlabel_id'].'"},';
					
				}
				break;
			}
		}
		
	}
}

if(isset($post_required_email) && $post_required_email)
{
	foreach($post_required_email as $value)
	{
		foreach($contactform_obj->merge_post as $vvalue)
		{
			if($vvalue['element_id'] == $value)
			{
				$param['reply_emailaddress'] = $vvalue['element_value'];

				if(!$contactform_obj->isEmail($vvalue['element_value']))
				{
					$json_error .= '{"element_id":"'.$value.'", "errormessage": "'.addcslashes($contactform_obj->cfg['form_errormessage_invalidemailaddress'], '"').'", "elementlabel_id": "'.$vvalue['elementlabel_id'].'"},';
	
				}
				break;
			}
		}
		
	}
}

// ********************************************* FORMATTING JSON RESPONSE AND SENDING MAIL
if($json_error)
{
	$json_response = '{'
							.'"status":"nok",'
							.'"message":['.substr($json_error,0,-1).']'
							.'}';
} else{
	if(isset($contactform_obj->merge_post) && $contactform_obj->merge_post)
	{
		//print_r($_POST);
		$param['reply_emailaddress'] = (isset($param['reply_emailaddress']) && $param['reply_emailaddress'])?$param['reply_emailaddress']:'';
		
		$contactform_obj->sendMail($param);
		
		if($contactform_obj->cfg['usernotification_inputid'])
		{
			foreach($contactform_obj->merge_post as $vvalue)
			{
				if($vvalue['element_id'] == $contactform_obj->cfg['usernotification_inputid'])
				{
					$receipt_cfg['email_address'] = $vvalue['element_value'];
					break;
				}
			}
	
			$contactform_obj->sendMailReceipt($receipt_cfg);
			
		}
		$redirect_url = $contactform_obj->cfg['form_redirecturl'] ? $contactform_obj->cfg['form_redirecturl'] : '';

		$json_response = '{'
								.'"status":"ok",'
								.'"message":"'.addcslashes($contactform_obj->cfg['form_validationmessage'], '"').'",'
								.'"redirect_url":"'.addcslashes($redirect_url, '"').'"'
								.'}';
	}
	// no input field values ($contactform_obj->merge_post is empty)
	// if there is a captcha field, the error message is still displayed with $json_response
	else
	{
		$json_response = '{'
								.'"status":"nok",'
								.'"message":""'
								.'}';
	}
}
echo $json_response;
?>
</code>


Et pour argumenter mon raisonnement le fichier class.contactform.php ( (qui est en require_once dans le formvalidation), que je pense comme valide pour intégrer ma connexion /entrées bd ( sous réserve d'isoler les variables pour les positionner dans la table de la bd??? )

Voila ..voila..
Dan
-1
Rejoignez-nous