8768 sujets

Développement web côté serveur, CMS

Bjr,
Je ne comprends pas pourquoi une ligne vide est ajoutée de temps à autres dans une table
avec ce script :
$sql1 = "INSERT INTO mr_intervenants(type,titre_int,nom_int,prenom_int,email_int,adresse1_int,adresse2_int, ville_id_int, mobile_int,observations_int,securite_sociale_int,ne_le_int,ville_naiss_int) 
			  						 VALUES('type','$titre_int','$nom_int','$prenom_int','$email_int', '$adresse1_int','$adresse2_int','$ville_id_int','$mobile_int','$observations_int','$securite_sociale_int','$ne_le_int','$ville_naiss_int')";
						// on envoie la requête
						$res1 = $conn->query($sql1);

Merci de vos lumières.
Modifié par maxireussite (22 Feb 2017 - 18:00)
Peut-être que l'une des variables n'est pas renseignée et en amont elle est sans doute initialisée par défaut comme ceci (ou quelque chose d'approchant) :
$maVariable = '';

Difficile d'en dire plus en l'état...
Modifié par Olivier C (22 Feb 2017 - 08:28)
Bonjour.

Pour ma part, j'avoue que je ne comprends pas votre requête : les valeurs variables sont, en principe, insérées avec des requêtes préparées.

Quand je mets une chaîne de caractères entres guillemets simples, c'est la valeur littérale que je veux rentrer dans la base de données...

Smiley sweatdrop
Administrateur
Il faudrait voir le reste du script. Y a-t-il une vérification en amont de ce qu'il y a dans les variables avant de déclencher la requête ?
Bon, ben je vous mets toute la page alors :


<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
 
require_once('../../../koneksyon/konfig.php');
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Préciser les matières</title>
</head>
<?php 
$req10 = "SELECT matiere_id, matiere FROM mr_matieres  WHERE matiere NOT LIKE 'Frais d%' ORDER BY matiere ASC" or die("Pb avec la requette ".mysqli_error());
$req_matiere1 = $conn->query($req10 );
$req_matiere2 = $conn->query($req10 );
$req_matiere3 = $conn->query($req10 );
$req_matiere4 = $conn->query($req10 );

$req14 = "SELECT niveau_id, niveau FROM mr_niveaux ORDER BY niveau_id ASC" or die("Pb avec la requette ".mysqli_error());
$req_niveau1 = $conn->query($req14);
$req_niveau2 = $conn->query($req14);
$req_niveau3 = $conn->query($req14);
$req_niveau4 = $conn->query($req14);

$req18 = "SELECT ville_id, ville, cp FROM mr_villes ORDER BY ville ASC" or die("Pb avec la requette ".mysqli_error());
$req_ville1 = $conn->query($req18 );
$req_ville2 = $conn->query($req18 );
$req_ville3 = $conn->query($req18 );
$req_ville4 = $conn->query($req18 );
$req_ville5 = $conn->query($req18 );
?>

<body>
	<?php 
			$type=(isset($_POST['type'])) ? $_POST['type'] : '';
			$titre_int=(isset($_POST['titre_int'])) ? $_POST['titre_int'] : '';
			$nom_int=(isset($_POST['nom_int'])) ? $_POST['nom_int'] : '';
			$prenom_int=(isset($_POST['prenom_int'])) ? $_POST['prenom_int'] : '';
			$email_int=(isset($_POST['email_int'])) ? $_POST['email_int'] : '';
			$adresse1_int=(isset($_POST['adresse1_int'])) ? $_POST['adresse1_int'] : '';
			$adresse2_int=(isset($_POST['adresse2_int'])) ? $_POST['adresse2_int'] : '';
			$ville_id_int=(isset($_POST['ville_id_int'])) ? $_POST['ville_id_int'] : '';
			$mobile_int=(isset($_POST['mobile_int'])) ? $_POST['mobile_int'] : '';
			$securite_sociale_int=(isset($_POST['securite_sociale_int'])) ? $_POST['securite_sociale_int'] : '';
			$ne_le_int=(isset($_POST['ne_le_int'])) ? $_POST['ne_le_int'] : '';
			$ville_naiss_int=(isset($_POST['ville_naiss_int'])) ? $_POST['ville_naiss_int'] : '';

                    				
			$sql ="SELECT intervenant_id FROM mr_intervenants WHERE email_int='$email_int'";
			// on envoie la requête
			$res = $conn->query($sql) or die();
		     
		  	// on compte le nombre de résultats
		    $num_rows = mysqli_num_rows($res);	      	
		   
		  if($num_rows != 0)  
	
		      	
		   { 	//existe déjà, on affiche un message d'erreur
			    echo '<font color="red">Attention, cette adresse : <b>'.$email_int.'</b> existe déjà dans notre base !</font><br />';
			    echo '<br />Proposez une autre adresse mail en cliquant sur retour.';
			    echo"<html><br /><BR><a href=\"javascript:window.history.go(-1)\">Retour</a></html>";
		   }
		   
   else
   
		   {
				                    				
				$sql1 = "INSERT INTO mr_intervenants(type,titre_int,nom_int,prenom_int,email_int,adresse1_int,adresse2_int,ville_id_int,mobile_int,securite_sociale_int,ne_le_int,ville_naiss_int) 
			  						 VALUES('$type','$titre_int','$nom_int','$prenom_int','$email_int','$adresse1_int','$adresse2_int','$ville_id_int','$mobile_int','$securite_sociale_int','$ne_le_int','$ville_naiss_int')";
						// on envoie la requête
						$res1 = $conn->query($sql1);
						
				echo '<font color="green">Votre adresse mail est validée. Vous pouvez poursuivre votre candidature ci-dessous.</font></p>';
				
				// on récupère l'id_site qui vient d'être généré
	    		$intervenant_id = $conn->insert_id;
	    		
?>	
				<div id="hg3wgXDZ" class="span9 tw-para ">
								<h2>Préciser les matières, niveaux et villes 
								d'intervention</h2>
								<div class="pobj obj-before">
									<form action="nouvelintervenantadd2FIN.php" method="post" onsubmit="return validateForm_hg3wgXDZ( this );">
										<label for="intervenant_id"></label>
										<input id="intervenant_id" name="intervenant_id" type="hidden" value = "<?php echo($intervenant_id); ?>">
										<label class="required" for="matiere1">
										<table style="width: 29%">
											<tr>
												<td class="text-right" style="height: 28px; width: 85px">
										<label class="required" for="matiere1">
												matiere1</label></td>
												<td style="width: 177px; height: 28px">
												<select name="matiere1"  required="" style="width: 200px">
				      <option selected="" value="0">Choisissez une matière</option>
				
				<?php 
				while ($valeur = mysqli_fetch_array($req_matiere1))
				{ 
				echo "<option value=\"". $valeur['matiere_id'] ."\" cli_name=\"". $valeur['matiere'] ."\">&nbsp; ". $valeur['matiere'] ."</option>n"; 
				} 
				?> 
				</select></td>
												<td style="height: 28px; width: 8px">
												</td>
												<td style="height: 28px">
										<label class="required" for="matiere1">
												<select name="niveau1"  required="" style="width: 146px">
				      <option selected="" value="0">Choisissez le niveau</option>
				
				<?php 
				while ($valeur = mysqli_fetch_array($req_niveau1))
				{ 
				echo "<option value=\"". $valeur['niveau_id'] ."\" cli_name=\"". $valeur['niveau'] ."\">&nbsp; ". $valeur['niveau'] ."</option>n"; 
				} 
				?> 
				</select></label></td>
											</tr>
											<tr>
												<td class="text-right" style="width: 85px"><label for="matiere2">
												matiere2</label></td>
												<td style="width: 177px">
										<label class="required" for="matiere1">
												<select name="matiere2"  required="" style="width: 200px">
				      <option selected="" value="0">Choisissez une 2ème matière</option>
				
				<?php 
				while ($valeur = mysqli_fetch_array($req_matiere2))
				{ 
				echo "<option value=\"". $valeur['matiere_id'] ."\" cli_name=\"". $valeur['matiere'] ."\">&nbsp; ". $valeur['matiere'] ."</option>n"; 
				} 
				?> 
				</select></label></td>
												<td style="width: 8px">&nbsp;</td>
												<td>
										<label class="required" for="matiere1">
												<select name="niveau2"  required="" style="width: 146px">
				      <option selected="" value="0">Choisissez le niveau</option>
				
				<?php 
				while ($valeur = mysqli_fetch_array($req_niveau2))
				{ 
				echo "<option value=\"". $valeur['niveau_id'] ."\" cli_name=\"". $valeur['niveau'] ."\">&nbsp; ". $valeur['niveau'] ."</option>n"; 
				} 
				?> 
				</select></label></td>
											</tr>
											<tr>
												<td class="text-right" style="width: 85px">
										<label class="required" for="matiere1">
												<label for="matiere2">
												matiere3</label></label></td>
												<td style="width: 177px">
										<label class="required" for="matiere1">
												<select name="matiere3"  required="" style="width: 200px">
				      <option selected="" value="0">Choisissez une 3ème matière</option>
				
				<?php 
				while ($valeur = mysqli_fetch_array($req_matiere3))
				{ 
				echo "<option value=\"". $valeur['matiere_id'] ."\" cli_name=\"". $valeur['matiere'] ."\">&nbsp; ". $valeur['matiere'] ."</option>n"; 
				} 
				?> 
				</select></label></td>
												<td style="width: 8px">&nbsp;</td>
												<td>
										<label class="required" for="matiere1">
												<select name="niveau3"  required="" style="width: 146px">
				      <option selected="" value="0">Choisissez le niveau</option>
				
				<?php 
				while ($valeur = mysqli_fetch_array($req_niveau3))
				{ 
				echo "<option value=\"". $valeur['niveau_id'] ."\" cli_name=\"". $valeur['niveau'] ."\">&nbsp; ". $valeur['niveau'] ."</option>n"; 
				} 
				?> 
				</select></label></td>
											</tr>
											<tr>
												<td class="text-right" style="width: 85px">
										<label class="required" for="matiere1">
												<label for="matiere2">
												matiere4</label></label></td>
												<td style="width: 177px">
										<label class="required" for="matiere1">
												<select name="matiere4"  required="" style="width: 200px">
				      <option selected="" value="0">Choisissez une 4ème matière</option>
				
				<?php 
				while ($valeur = mysqli_fetch_array($req_matiere4))
				{ 
				echo "<option value=\"". $valeur['matiere_id'] ."\" cli_name=\"". $valeur['matiere'] ."\">&nbsp; ". $valeur['matiere'] ."</option>n"; 
				} 
				?> 
				</select></label></td>
												<td style="width: 8px">&nbsp;</td>
												<td>
										<label class="required" for="matiere1">
												<select name="niveau4"  required="" style="width: 146px">
				      <option selected="" value="0">Choisissez le niveau</option>
				
				<?php 
				while ($valeur = mysqli_fetch_array($req_niveau4))
				{ 
				echo "<option value=\"". $valeur['niveau_id'] ."\" cli_name=\"". $valeur['niveau'] ."\">&nbsp; ". $valeur['niveau'] ."</option>n"; 
				} 
				?> 
				</select></label></td>
											</tr>
											<tr>
												<td class="text-right" style="width: 85px"><label class="required" for="villedispo1">
												villedispo1</label></td>
												<td style="width: 177px">
												<select name="ville_id_vdispo1"  style="width: 200px">
				      <option selected="" value="0">1ère ville d'intervention</option>
				
				<?php 
				while ($valeur = mysqli_fetch_array($req_ville1))
				{ 
				echo "<option value=\"". $valeur['ville_id'] ."\" cli_name=\"". $valeur['ville'] ."\">". $valeur['cp'] ." &nbsp; ". $valeur['ville'] ."</option>n"; 
				} 
				?> 
				</select></td>
															<td style="width: 8px">
															&nbsp;</td>
												<td>&nbsp;</td>
											</tr>
											<tr>
												<td class="text-right" style="width: 85px"><label for="villedispo2">
												villedispo2</label></td>
												<td style="width: 177px">
												<select name="ville_id_vdispo2"  style="width: 200px">
				      <option selected="" value="0">2ème ville d'intervention</option>
				
				<?php 
				while ($valeur = mysqli_fetch_array($req_ville2))
				{ 
				echo "<option value=\"". $valeur['ville_id'] ."\" cli_name=\"". $valeur['ville'] ."\">". $valeur['cp'] ." &nbsp; ". $valeur['ville'] ."</option>n"; 
				} 
				?> 
				</select></td>
												<td style="width: 8px">&nbsp;</td>
												<td>&nbsp;</td>
											</tr>
											<tr>
												<td class="text-right" style="width: 85px"><label for="villedispo3">
												villedispo3</label></td>
												<td style="width: 177px">
												<select name="ville_id_vdispo3"  style="width: 200px">
				      <option selected="" value="0">3ème ville d'intervention</option>
				
				<?php 
				while ($valeur = mysqli_fetch_array($req_ville3))
				{ 
				echo "<option value=\"". $valeur['ville_id'] ."\" cli_name=\"". $valeur['ville'] ."\">". $valeur['cp'] ." &nbsp; ". $valeur['ville'] ."</option>n"; 
				} 
				?> 
				</select></td>
												<td style="width: 8px">&nbsp;</td>
												<td>&nbsp;</td>
											</tr>
											<tr>
												<td class="text-right" style="width: 85px"><label for="villedispo4">
												villedispo4</label></td>
												<td style="width: 177px">
												<select name="ville_id_vdispo4"  style="width: 200px">
				      <option selected="" value="0">4ème ville d'intervention</option>
				
				<?php 
				while ($valeur = mysqli_fetch_array($req_ville4))
				{ 
				echo "<option value=\"". $valeur['ville_id'] ."\" cli_name=\"". $valeur['ville'] ."\">". $valeur['cp'] ." &nbsp; ". $valeur['ville'] ."</option>n"; 
				} 
				?> 
				</select></td>
												<td style="width: 8px">&nbsp;</td>
												<td>&nbsp;</td>
											</tr>
											<tr>
												<td class="text-right" style="width: 85px"><label for="villedispo5">
												villedispo5</label></td>
												<td style="width: 177px">
												<select name="ville_id_vdispo5"  style="width: 200px">
				      <option selected="" value="0">5ème ville d'intervention</option>
				
				<?php 
				while ($valeur = mysqli_fetch_array($req_ville5))
				{ 
				echo "<option value=\"". $valeur['ville_id'] ."\" cli_name=\"". $valeur['ville'] ."\">". $valeur['cp'] ." &nbsp; ". $valeur['ville'] ."</option>n"; 
				} 
				?> 
				</select></td>
												<td style="width: 8px">&nbsp;</td>
												<td>&nbsp;</td>
											</tr>
										</table>
										</label><label for="observations">
										Observations</label><textarea id="observations" class="input-medium" name="observations_int" rows="4" value="" style="width: 295px"></textarea><div class="form-actions" style="background-color: transparent; padding-left: 0; margin-left: 0; padding-bottom: 0">
											<button class="btn btn-primary" type="submit">
											Envoyer</button></div>
									</form>
								</div>
							</div>
<?php     		
	     	}         				
?>
Salut,

Je vois que tu gères des n° de sécurité social, données sensibles ...

Fait gaf à la sécurité de ton code, c'est de la donnée médicale ... C'est considéré comme des n° de CB. Je crois que c'est réglementé, renseigne toi. Smiley cligne
Modifié par Tintin75 (22 Feb 2017 - 19:51)
Et du coup c'est bien ce que je disait plus haut, avec une condition mais ça revient au même.

Prenons l'une des variables :
$type=(isset($_POST['type'])) ? $_POST['type'] : '';

Donc, si la variable n'est pas renseignée par l'utilisateur le champ est tout de même créé avec une valeur nulle.
Meilleure solution
Concernant le champs sécu, il n'est pas accessible au visiteur qui s'inscrit, mais en interne. Car nous gérons des salariés.
Pour tes champs non obligatoires, il faut que tu fasses un filtre si champ indiqué tu affiches sinon, tu n'affiches pas.

Je l'ai fait la semaine dernière pour mon site, ça fonctionne bien, et ça t'évite de gérer un tas de ligne ou tu n'as pas de champs à traiter.

Pour le n° de sécu, le stockage de n° de santé est soumis à réglementation. Si tu n'as pas de problème, c'est cool, mais si tu te fais hacker ta bdd, bonjours les ennuis et ça fini à mon avis au tribunal. Renseigne toi, avant de lancer dans l'aventure ...
Bonjour,

d'un point de vu légal le NIR (Numéro de sécurité Social) ne doit être utiliser que dans des cas très précis et avec autorisation de la CNIL. https://www.cnil.fr/sites/default/files/typo/document/20090910-NE-NIR%20FORMALITES%20PREALABLES-VD.pdf

Ceci sera d'autant plus vrai, à partir de mai 2018 avec le nouveau règlement européen http://eur-lex.europa.eu/legal-content/FR/TXT/?uri=OJ:L:2016:119:TOC qui sera applicable directement dans la loi française sans devoir passer devant le parlement français.

Autres informations, ce règlement va encore plus loin sur la protection des données dites à caractères personnel que la loi informatique et liberté. Au sens de la loi française,

Art. 2 de la loi "Informatique et libertés"
" Constitue une donnée à caractère personnel toute information relative à une personne physique identifiée ou qui peut être identifiée, directement ou indirectement, par référence à un numéro d’identification ou à un ou plusieurs éléments qui lui sont propres. Pour déterminer si une personne est identifiable, il convient de considérer l’ensemble des moyens en vue de permettre son identification dont dispose ou auxquels peut avoir accès le responsable du traitement ou toute autre personne ".http://www.cil.cnrs.fr/CIL/spip.php?rubrique299
Par exemple, aujourd'hui une adresse IP est considéré comme une données à caractère personnel. Smiley biggol

Donc, je dirais attention à vos BDD, et à vos log sur vos serveur Smiley cligne

Bonne journée,
kustolovic a écrit :
C'est surtout que ce code est une passoire très vulnérable qui pose problème.


J'en conviens, mais c'est bon aussi de savoir à quoi on s'expose quand on fait ce type de code sans réfléchir à l'aspect sécurité et aux conséquences que ceci peut avoir par la suite en cas de soucis.

Pour accentuer sur le coté vulnérabilité, le futur règlement européen mais l'accent sur le fait que les aspects de sécurisation des données doit être pris en compte dès le début et par défaut.

Donc si on fait une requête SQL comme ici, on contrôle à minima les entrées utilisateurs en passant notamment par requêtes préparées, contrôle du type de données attendu, etc...
Actuellement, sans requête préparé (qui évite les injections) je peux te casser ta base de donnée...