Page 1 sur 1

Enregistrement qui ne passe pas

Posté : 08 août 2019, 15:29
par Zaqen
Bonjour,

J'ai un soucis sur une requête simple de creation d'une fiche crée via un petit formulaire.
Ma requete ne passe pas, j'ai 3 champ qui ne retiennent pas les valeurs. le premier j'ai la valeur 1 et les deux autres rien.
(ville, nummandataire, et numcandidat)

Notice: Undefined index: nummandataire in /var/www/WebMaquettes/Mandatfinanciers/carnet-add.php on line 112 Notice: Undefined index: numcandidat in /var/www/WebMaquettes/Mandatfinanciers/carnet-add.php on line 113

cette ligne s'affiche à la validation du formulaire...elle correspondent à mes deux nouveaux champs nummandataire et numcandidat.

function insere_carnet(&$frm)
{
Global $connex;

		$sql = "
		INSERT INTO carnet (
		        `iduser`
		        , `carnetclef`
                        , `genre`
		        , `nom`
		        , `prenom`
		        , `adresse1`
		        , `adresse2`	
		        , `codepostal`	
		        , `ville`
                        , `nummandataire`
                        , `numcandidat`
		        , `tel`	
		        , `portable`	
		        , `email`	
		) VALUES (
		        '".$_SESSION['iduser']."'
		        ,'".recup_clef()."'
                        ,'".$frm['genre']."'
		        ,'".$frm['nom']."'
		        ,'".$frm['prenom']."'
		        ,'".$frm['adresse1']."'
		        ,'".$frm['adresse2']."'
		        ,'".$frm['codepostal']."'
		        ,'".$frm['ville']."'
                        ,'".$frm['nummandataire']."'
                        ,'".$frm['numcandidat']."'
		        ,'".$frm['tel']."'
		        ,'".$frm['portable']."'
		        ,'".$frm['email']."'
		 )";
dans le log mysql j'ai ça

190808 15:27:16  3610 Connect   root@PREF33-S-WEBDEV on MANDATFINANCIERS
                 3610 Query     SET NAMES 'utf8'
                 3610 Query     SELECT 1 FROM carnet WHERE email='[email protected]' AND iduser='1'
                 3610 Query     INSERT INTO carnet (
                        `iduser`
                        , `carnetclef`
                        , `genre`
                        , `nom`
                        , `prenom`
                        , `adresse1`
                        , `adresse2`
                        , `codepostal`
                        , `ville`
                        , `nummandataire`
                        , `numcandidat`
                        , `tel`
                        , `portable`
                        , `email`
                ) VALUES (
                        '1'
                        ,'eo1m2si6q2lbem0trvwb'
                        ,'Monsieur'
                        ,'Nouveauté'
                        ,'Elisée'
                        ,'Pas loi d ici'
                        ,'Pas loin de la'
                        ,'33562'
                        ,'1'
                        ,''
                        ,''
                        ,'0557848586'
                        ,'0630110977'
                        ,'[email protected]'
                 )
                 3610 Query     INSERT INTO carnet_details (
                `idcarnet`
                , `idrubrique`
                , `observation`
        ) VALUES (
                '1502'
                ,'-1'
                ,''
         )
Mon soucis c'est que mon formulaire de mise à jour fonctionne très bien.

Si vous avez une idée

Re: Enregistrement qui ne passe pas

Posté : 08 août 2019, 15:33
par or 1
c'est le code qui met une valeur dans $frm qu'il faudrait pour comprendre pourquoi il n'y a pas l'entrée nummandataire.

Re: Enregistrement qui ne passe pas

Posté : 08 août 2019, 15:38
par Zaqen
Oui il faudrait comprendre pourquoi... C'est le but de ma démarche d'obtenir un peu d'aide LOL

Re: Enregistrement qui ne passe pas

Posté : 08 août 2019, 16:07
par Ryle
Salutations !

Ce que veut dire Or1, c'est que tu as ce message d'erreur parce que au moment où tu fais appel à ta fonction, le tableau que tu passes en paramètres ne contient pas les indexes "nummandataire" et "numcandidat ". C'est donc en regardant comment est alimentée cette variable au moment tu appelles insere_carnet() que tu découvriras pourquoi ces indexes n'existent pas.

C'est peut être une erreur de frappe, une majuscule ou il n'en faut pas... ou simplement le fait qu'à aucun moment tu n'as défini de valeur pour ces indexes :)

Re: Enregistrement qui ne passe pas

Posté : 08 août 2019, 16:11
par Zaqen
Je sèche justement, alors voilà le formulaire complet (sauf fichiers includés)
<?php $menu="carnet";
require_once "include/config.inc.php";
?>
<?php require_once "head.inc.php"; ?>
<?php
if (sizeof($_POST) > 0) 
{
      $frm = $_POST;

       $message_erreur = valide_form($frm, $erreurs);

        if (empty($message_erreur)) 
		{
               $id_site=insere_carnet($frm);

				require_once ("include/fct_upload.inc.php");
			
				if (isset($_FILES['fichier'])||!empty($_FILES['fichier'])) $fichier = $_FILES['fichier'];
				if ( $fichier && $fichier != "none")
				{		
					$rep=upload($destDir,$fichier);
					if ($rep[0]== TRUE)
					{
						$fichier=rename_fichier($frm['prenom'],$rep[1]);
					
						$sql = "UPDATE carnet SET photo='".$fichier."' WHERE id='".$id_site."' ";
						assert ('mysqli_query($connex, $sql)');
						$qid = mysqli_query($connex,$sql);
						if (!$qid)     die('Requ�te invalide : ' . mysqli_error($connex));
					}
				}
				    
			   afficher_enregistrement_succes();
				mysqli_close($connex);
			   include("footer.inc.php");
			   exit;
        }
}


function valide_form(&$frm, &$erreurs) 
{
Global $connex;
 
    $erreurs = array();
    $msg = array();
/**
	if ($_SESSION['textCaptcha'] != $frm['textCaptcha']) 
	{
		$erreurs['textCaptcha'] = true;
		$msg['textCaptcha'] = "Erreur de saisie";
	}
        **/
		if (empty($frm['prenom']) ) 
	{
			$erreurs['prenom'] = true;
			$msg['prenom'] = "Il manque le prénom";
	}

	$email=htmlentities($_POST['email'], ENT_QUOTES,'UTF-8');

	if (empty($email)) 
	{
		$erreurs['email'] = true;
		$msg['email'] = "Absence d'email";
	}
	elseif (!preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-_.]?[[:alnum:]])*.([a-z]{2,4})$`',$email)) 
	{
		$erreurs['email'] = true;
		$msg['email'] = " Mauvais format d'Email";
	}
	elseif  ((mysqli_num_rows(mysqli_query($connex,"SELECT 1 FROM carnet WHERE email='".$frm['email']."' AND iduser='".$_SESSION['iduser']."'")) > 0))
	{
		$erreurs['email'] = true;
		$msg['email'] = "L'email existe déjà";
	} 
	
    return $msg;
}

function insere_carnet(&$frm)
{
Global $connex;

		$sql = "
		INSERT INTO carnet (
		        `iduser`
		        , `carnetclef`
                        , `genre`
		        , `nom`
		        , `prenom`
		        , `adresse1`
		        , `adresse2`	
		        , `codepostal`	
		        , `ville`
		        , `tel`	
		        , `portable`	
		        , `email`	
		) VALUES (
		        '".$_SESSION['iduser']."'
		        ,'".recup_clef()."'
                        ,'".$frm['genre']."'
		        ,'".$frm['nom']."'
		        ,'".$frm['prenom']."'
		        ,'".$frm['adresse1']."'
		        ,'".$frm['adresse2']."'
		        ,'".$frm['codepostal']."'
		        ,'".$frm['ville']."'
		        ,'".$frm['tel']."'
		        ,'".$frm['portable']."'
		        ,'".$frm['email']."'
		 )";

		$qid = mysqli_query($connex,$sql);
		if (!$qid)     die('Requète invalide : ' . mysqli_error($connex));

 		$id_carnet = mysqli_insert_id($connex);

        $sql = "
        INSERT INTO carnet_details (
                `idcarnet`
                , `idrubrique`	
                , `observation`	
       	) VALUES (
                '".$id_carnet."'
                ,'".$frm['idrubrique']."'
                ,'".htmlentities($frm['observation'])."'
         )";
		$qid = mysqli_query($connex,$sql);
		if (!$qid)     die('Requ�te invalide : ' . mysqli_error($connex));


         return $id_carnet;     

}

function afficher_enregistrement_succes()
{
	echo "<h1><center>";
	echo "Enregistrement ajouté avec succès";
	echo "</center></h1>";
}



      
?>
<html><body>
Ajouter un contact dans le carnet : 
<form enctype="multipart/form-data" name="fcoord" method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">

<table width="500" border="0" cellspacing="2" cellpadding="2">
 <tr><td align=right>
   Civilité :
 </td><td> 
 	<?php
 	echo "<select name=\"genre\">";
  	echo ligne_selected(" ","-1",$frm['genre']);
 	echo ligne_selected("Monsieur","Monsieur",$frm['genre']);
 	echo ligne_selected("Madame","Madame",$frm['genre']);
 	echo ligne_selected("Mademoiselle","Mademoiselle",$frm['genre']);
	echo "</select>";
 	?>
 </td></tr>
  <tr> 
    <td align=right>Nom : </td>
    <td><input name="nom" type="text" value="<?php if (isset($frm['nom'])) echo stripslashes($frm['nom']); ?>"></td>
  </tr>
  <tr> 
    <td align=right>Prenom : </td>
    <td><input name="prenom" type="text" value="<?php if (isset($frm['prenom'])) echo stripslashes($frm['prenom']) ?>">
        * <?php if (isset($erreurs['prenom'])) echo $message_erreur['prenom'] ?></td>
  </tr>
  <tr> 
    <td align=right>Adresse : </td>
    <td><input name="adresse1" type="text"  value="<?php if (isset($frm['adresse1'])) echo stripslashes($frm['adresse1']); ?>"></td>
  </tr>
  <tr> 
    <td align=right>&nbsp; </td>
    <td><input name="adresse2" type="text" value="<?php if (isset($frm['adresse2'])) echo stripslashes($frm['adresse2']); ?>"></td>
  </tr>
  <tr> 
    <td align=right>Code postal : </td>
    <td><input name="codepostal" type="text" size="5" maxlength="5" value="<?php if (isset($frm['codepostal']))  echo stripslashes($frm['codepostal']); ?>"></td>
  </tr>
  <tr> 
    <td align=right>Ville : </td>
    <td><input name="ville" type="text" size="30" maxlength="30" value="<?php if (isset($frm['ville'])) echo stripslashes($frm['ville']); ?>"></td>
  </tr>
 <tr> 
    <td align=right>Email : </td>
    <td><input name="email" type="text" value="<?php if (isset($frm['email'])) echo stripslashes($frm['email']); ?>">
       * <?php if (isset($erreurs['email'])) echo $message_erreur['email'] ?></td>
  </tr>
  <tr> 
    <td align=right>T&eacute;l&eacute;phone : </td>
    <td><input name="tel" type="text" value="<?php if (isset($frm['tel'])) echo stripslashes($frm['tel']); ?>"></td>
  </tr>
  <tr> 
    <td align=right>Portable : </td>
    <td><input name="portable" type="text" value="<?php if (isset($frm['portable'])) echo stripslashes($frm['portable']); ?>"></td>
  </tr>
  <tr> 
    <td align=right>Photo : </td>
    <td> 
    <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $taille_max; ?>" >
<input name="fichier" type="file" >
</td>
  </tr>
  <tr> 
    <td colspan=2><br /><hr><br /></td>
  </tr> 
  <tr> 
    <td align=right>Rubrique : </td>
    <td> 
   
    
	<?php
	
	$sql="SELECT id,iduser,nom FROM rubrique WHERE iduser='".$_SESSION['iduser']."' ORDER BY nom";
	assert ('mysqli_query($connex,$sql)');
	$rubrique=mysqli_query($connex,$sql);
	if (!$rubrique)     die('Requ�te invalide : ' . mysqli_error($connex));
	if (mysqli_num_rows($rubrique)!=0)
	{
		echo "<select name=\"idrubrique\">";
		echo ligne_selected(" ","-1","");
		while( $list=mysqli_fetch_object( $rubrique) )       
		{
		 	echo ligne_selected($list->nom,$list->id,'');
		}
		echo "</select>";
	}   
	mysqli_free_result($rubrique);
	mysqli_close($connex);
	?>
    </td>
  </tr>
 <tr> 
    <td align=right>Observation : </td>
    <td><textarea name="observation" cols="40" rows="3"><?php if (isset($frm['observation'])) echo stripslashes($frm['observation']); ?></textarea></td>
  </tr>
   <tr> 
    <td colspan=2><br /><hr><br /></td>
  </tr> 
   
 
  <tr> 
    <td colspan="2" align=center>
        <input type="submit" name="action" value="Confirmer">
        <input type="submit" name="action" value="Annuler">
      </td>
  </tr>
</table></form>
</body></html>
<?php require ("footer.inc.php"); ?>

J'ai juste besoin de rajouter deux champs supplémentaires, comme je l'évoquais plus haut... pour moi deux simples entrées dans ma fonction insere_carnet et deux entrées dans la partie "ajouter un contact dans le carnet"

mais ça ne fonctionne pas.... les deux colonnes nummandataire et numcandidat sont bien présente dans ma table.

Re: Enregistrement qui ne passe pas

Posté : 08 août 2019, 20:35
par Ryle
Alors...

Tu fais appel à la fonction insere_carnet() ligne 14 en lui passant en paramètre la variable $frm que tu as défini plus tôt comme étant égale à $_POST, soit le tableau des champs de ton formulaire envoyés lorsque celui-ci est soumit.

Cependant ton formulaire demande plein d'informations sur le contact, mais tu n'as aucun champ nommé "nummandataire" ou "numcandidat" que l'utilisateur pourrait remplir et soumettre. Tu ne peux donc pas les recevoir via $_POST et donc pas les utiliser dans ta requête (d'où le message de php qui t'indique que les indexes n'existent pas).

Si tu ajoutes des champs en base, il faut effectivement les ajouter dans ta requête pour les enregistrer, mais il faut aussi les ajouter dans ton formulaire pour que l'utilisateur puisse les renseigner et te les envoyer ;)

Re: Enregistrement qui ne passe pas

Posté : 09 août 2019, 08:43
par Zaqen
Bonjour,

Oui oui, en fait je t'ai soumis le mauvais fichier (quand tu regardes les bonnes entrées du premier post, j'avais mis le bon) sauf la partie formulaire ou effectivement
elle n'y est pas.

Je viens de valider un champ (nummandataire), il semble que j'avais oublié (en copiant/collant) la ligne concernant le champs ville, la partie input name
  
<tr> 
    <td align=right>Ville : </td>
    <td><input name="ville" type="text" size="30" maxlength="30" value="<?php if (isset($frm['ville'])) echo stripslashes($frm['ville']); ?>"></td>
  </tr>
 <tr>
      <tr> 
    <td align=right>Numéro Mandataire : </td>
    <td><input name="ville" type="text" size="30" maxlength="30" value="<?php if (isset($frm['nummandataire'])) echo stripslashes($frm['nummandataire']); ?>"></td>
  </tr>
 <tr>
au lieu de :
      <tr> 
    <td align=right>Numéro Mandataire : </td>
    <td><input name="ville" type="text" size="30" maxlength="30" value="<?php if (isset($frm['nummandataire'])) echo stripslashes($frm['nummandataire']); ?>"></td>
  </tr>
 <tr>
J'essai sur un autre champs

Re: Enregistrement qui ne passe pas

Posté : 09 août 2019, 09:54
par Ryle
Il faut également que tu penses à modifier le nom du champ :
<td><input name="ville" type="text" ... 
en
<td><input name="nummandataire" type="text" ... 
C'est lui qui va créer l'index qui te manque dans la variable $_POST et donc dans ta variable $frm

En fait, $_POST est un tableau qui reprend chacun des champs de ton formulaire en créant des couples clé/valeur avec le nom du champ et la valeur renseignée par l'utilisateur :)

Re: Enregistrement qui ne passe pas

Posté : 09 août 2019, 10:45
par Zaqen
Oui c'est bien ça ;-)
Merci beaucoup Ryle