Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'insert sur un formulaire d'inscription

Notice: Trying to get property of non-object

    17 octobre 2018 à 20:36:20

    Bonjour ou bonsoir à toutes et à tous!

    J'ai un problème d'Insert dans un formulaire PHP/HTML.

    Notice: Trying to get property of non-object.

    <?php 
    
    session_start();
    
    require_once ('../admin/connection.php');
    
    /*Créer une page de connexion membre une fois le profil crée
    	et la validation de l'admin*/
    
    //Je vérifie si la page n'est pas la page d'authentificationde l'admin (mettre cette vérification après l'inscription du membre sinon redirigé sans qu'il se soit déjà inscrit).
    /*
    	header('location:../admin/connectionMembre.php');
    }*/
    
    //Tous les éléments du formulaire seront renvoyés à la bdd
    //L'élément photo sera renvoyé avec la technique $_FILES
    if(isset($_POST['id']) && !empty($_POST['id'])){
    
    		//Je crée mon dossier de destination
    		$target_dir="photoUser/";
    		//Je crée le fichier de l'image à uploader
    		//basename: retourne le nom de la composante finale d'un chemin
    		$target_file= "../".$target_dir . basename($_FILES["photo"]["name"]);
    		//Si la photo est bien uploadée, je crée une vraible avec un simple 1 en guise de check
    		$uploadOK=1;
    		//Je stocke l'image, je transforme en minuscule (car mon dossier de destination est en minuscule) avec le chemin et son extension(jpg, png...)
    		$imageFileType=strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
    
    		//Je vérifie si le dossier de l'image contient l'image actuelle ou une mauvaise image
    		if(isset($_POST['photo'])){
    			//Je récupère dans une variable les dimensions de l'image avec l'image courante et la destination temporaire où se situe l'image actuellement
    			//$check["mime"]: détecte le type de contenu de l'image
    			$check=getimagesize($_FILES["photo"]["tmp_name"]);
    			
    			if($check!==false){
    				
    				echo "le fichier est une image -".$check["mime"] .".";
    				$uploadOK=1;
    			
    			} else {
    
    				echo"Le fichier n'est pas une image.";
    				$uploadOK=0;
    			}
    		}
    
    		// Je vérifie si l'image existe
    		if(file_exists($target_file)){
    
    			echo"le fichier existe déjà";
    			$uploadOK=0;
    		}
    		//Je vérifie la taille de l'image
    		if($_FILES["photo"]["size"] > 50000000000){
    
    			echo "Votre fichier est trop gros";
    			$uploadOK=0;
    		}
    		//J'autorise certains type de formats
    		if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType !="jpeg" && $imageFileType !="gif"){
    
    			echo"Uniquement les formats JPG, JPEG, PNG & GIF sont autorisés.";
    			$uploadOK= 0;
    		}
    		//Si la variable uploadIsOK est à 0, renvoyer une erreur d'upload
    		if($uploadOK==0){
    
    			echo "Votre fichier n'a pas été uploadé";
    		//Si tout est ok, je tente un upload de l'image
    		} else {
    			//A ce moment là, créer une condition avec comme paramètre, la destination actuelle de l'image et en deuxième paramètre, le dossier de destination futur
    			if(move_uploaded_file($_FILES["photo"]["tmp_name"], $target_file)){
    				//Indiquer que le fichier a bien été uploadé
    				echo"Le fichier ".basename($_FILES["photo"]["name"]). " a bien été uploadé.";
    			} else {
    
    				echo"Il y a une erreur lors de l'upload du fichier";
    			}
    		} 
    
    		$nom=htmlentities($_POST['nom']);
    		$prenom=htmlentities($_POST['prenom']);
    		$pseudo=htmlentities($_POST['pseudo']);
    		$email=htmlentities($_POST['email']);
    		$sexe=htmlentities($_POST['sexe']);
    		$dateNaissance=htmlentities($_POST['dateNaissance']);
    		//$id=htmlentities($_POST['id']);
    		$photo=$_FILES['photo']['name'];
    		//J'utilise ici la méthode plus moder nbe de hashage de mot de passe
    		//$pass=password_hash($_POST['pass'], PASSWORD_DEFAULT);
    		$pass=htmlentities($_POST['pass']);
    		//$region=htmlentities($_POST['region']);
    		
    		//Toujours le problème de l'id du membre
    		$insertMembre="INSERT INTO 'member'('id', 'name', 'firstname', 'gender', 'nickname', 'email', 'password', 'birthdayDate', 'profilePhoto', 'research', 'banned', 'id_region') VALUES (3,name='$nom',firstname='$prenom',gender='$sexe',nickname='$pseudo',email='$email',password='$pass',birthdayDate='$dateNaissance',profilePhoto='$photo',NULL,0,NULL);";
    
    		$execInsertMembre=mysqli_query($connect,$insertMembre);
    
    	}
    
    
    ?>
    
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    	<meta charset="utf-8">
    	<title>Bienvenue nouvel(le) arrivant(e)</title>
    	<link rel="stylesheet" type="text/css" href="../vendor/bootstrap/dist/css/bootstrap.css">
    </head>
    <body>
    	
    	<header>
    	
    	<h1>Bienvenue nouvel(le) arrivant(e)!</h1>
    
    	</header>
    
    	<section>
    		
    	<form action="membre.php" method="post" enctype="multipart/form-data">
    		
    		<p>
    			<label>Votre nom :</label>
    			<input type="text" name="nom" placeholder="Votre nom" value="<?php $execInsertMembre->name; ?>" required/>
    		</p>
    
    		<p>
    			<label>Votre prénom :</label>
    			<input type="text" name="prenom" placeholder="Votre prenom" value="<?php $execInsertMembre->firstname; ?>" required/>
    		</p>
    		
    		<p>
    			<label>Votre sexe :</label>
    			<input type="radio" name="sexe" value="Homme"/>
    			Homme
    			<input type="radio" name="sexe" value="Femme"/>
    			Femme
    		</p>
    
    		<p>
    			<label>Votre pseudo :</label>
    			<input type="text" name="pseudo" placeholder="Votre pseudo" value="<?php $execInsertMembre->nickname;?>" required/>
    		</p>
    
    		<p>
    			<label>Votre email :</label>
    			<input type="email" name="email" placeholder="Votre email" value="<?php $execInsertMembre->email ?>" required/>
    		</p>
    
    		<p>
    			<label>Votre mot de passe :</label>
    			<input type="password" name="pass" placeholder="Votre mot de passe" value="<?php $execInsertMembre->password?>" required/>
    		</p>
    
    		<p>
    			<label>Votre date de naissance :</label>
    			<input type="date" name="dateNaissance" placeholder="Votre date de Naissance" value="<?php $execInsertMembre->birthdayDate?>" required/>
    		</p>
    
    		<!--Le but ici est de renvoyer l'image vers la section backOffice
    		-->
    		<p>
    			<label>Votre photo de profil :</label>
    			<!--Il y aura un input soit de type img ou soit de type file afin de renvoyer l'image
    			-->
    			<!--Il y aura un input de type submit et un renvoi vers la base de donnée
    			-->
    			<label><img src="../photoUser/<?php echo $execInsertMembre->profilePhoto;?>" width="150" height="100"/>
    			</label>
    			
    			<input type="file" name="photo"/>
    			<input type="submit" name="Envoyer">
    		</p>
    	
    	</form>
    
    	</section>
    	<script type="text/javascript" src="../vendor/jquery/dist/jquery.js"></script>
    	<script type="text/javascript" src="../vendor/bootstrap/dist/js/bootstrap.js"></script>
    </body>
    </html>



    • Partager sur Facebook
    • Partager sur Twitter
      17 octobre 2018 à 20:46:41

      Salut,

      relis les cours SQL, il ne faut pas mettre le nom des champs dans la partie drote de VALUES sur un INSERT

      pas toto=valeur

      mais valeur

      De plus, relis les doc mysqli ;)

      • Partager sur Facebook
      • Partager sur Twitter
        18 octobre 2018 à 8:55:01

        Salut Christouphe!

        Merci pour ta réponse. J'ai déjà essayé et cette requête était pour moi l'ultime solution car fidèle à la requête type dans mysql. 

        Je vais réessayer en relisant la doc.. Je reviens sur ce forum si je ne trouve pas! :)

        • Partager sur Facebook
        • Partager sur Twitter
          18 octobre 2018 à 10:25:45

          Salut !

          J'ai un cheval de bataille ces temps-ci… Je ne sais pas si le second message n'a rien relevé à ce sujet juste pour me laisser le chevaucher une nouvelle fois  ;)

          PAS DE htmlspecialchars() NI htmlentities() SUR DES DONNÉES QU'ON ENVOIE EN BASE

          Ces deux fonctions ne sont absolument pas prévues pour sécuriser des données dans ce contexte. Plus d'informations ici et .
          Donc l'utilisation de htmlentities() aux lignes 81 à 92 est plus une source de futurs (gros) ennuis qu'autre chose.

          • Partager sur Facebook
          • Partager sur Twitter
            19 octobre 2018 à 20:49:33

            Bonsoir Ymox,

            Oui! J'ai rectifié le tir depuis! Merci! Le problème ne vient pas de là! Lol!

            Mon insert via un var_dump renvoie false. Le premier problème vient donc de l'insert!

            Mon formulaire avec les champs

            <?php 
            
            require_once('../admin/connection.php');
            
            $selHobby="SELECT * FROM hobby ORDER BY name ASC;";
            
            $exeHobby=mysqli_query($connect, $selHobby);
            
            $selRegion="SELECT * FROM region ORDER BY name ASC;";
            
            $exeRegion=mysqli_query($connect, $selRegion);
            
            
            ?>
            
            <!DOCTYPE html>
            <html lang="fr">
            <head>
            	<meta charset="utf-8">
            	<title>Inscription</title>
            	<!--<meta name="viewport" content="initial-scale=1, maximum-scale=1">-->
            	<link rel="stylesheet" type="text/css" href="../vendor/bootstrap/dist/css/bootstrap.css">
            	<link rel="stylesheet" type="text/css" href="../css/register.css">
            </head>
            <body>
            
            <div class="container-fluid">
            
            <span class="border-top">
            
            	<header>
            		
            		<h1 class="display-3">Inscrivez- vous !</h1>
            
            	</header>
            
            	<section>
            		
            		<form action="confirm.php" method="post" enctype="multipart/form-data">
            
            	<div class="form-group">
            		<p>
            			<label for="inputdefault">Votre nom :</label>
            			<input class="form-control" id="inputdefault" type="text" name="nom" placeholder="Votre nom" required/>
            		</p>
            	</div>
            
            	<div class="form-group">
            		<p>
            			<label for="inputdefault">Votre prénom :</label>
            			<input class="form-control" id="inputdefault" type="text" name="prenom" placeholder="Votre prenom" required/>
            		</p>
            	</div>	
            		
            	<div class="form-group">
            		<p>
            			<label for="inputDefault">Votre sexe :</label>
            			<input type="radio" name="sexe" value="Homme"/>
            			Homme
            			<input type="radio" name="sexe" value="Femme"/>
            			Femme
            		</p>
            	</div>
            
            	<div class="form-group">
            		<p>
            			<label for="inputdefault">Votre pseudo :</label>
            			<input class="form-control" id="inputdefault"  type="text" name="pseudo" placeholder="Votre pseudo" required/>
            		</p>
            	</div>
            
            	<div class="form-group">	
            		<p>
            			<label for="inputdefault">Votre email :</label>
            			<input class="form-control" id="inputdefault"  type="email" name="email" placeholder="Votre email"  required/>
            		</p>
            	</div>
            
            	<div class="form-group">
            		<p>
            			<label for="inputdefault">Votre mot de passe :</label>
            			<input class="form-control" id="inputdefault" type="password" name="mdp" placeholder="Votre mot de passe" required/>
            		</p>
            	</div>
            
            	<div class="form-group">	
            		<p>
            			<label for="inputdefault">Votre date de naissance :</label>
            			<input type="date" name="dateNaissance" placeholder="Votre date de Naissance" required/>
            		</p>
            	</div>
            
            		<!--<p>
            			<label>Votre date de naissance :</label>
            			<input type="date" name="dateNaissance" placeholder="Votre date de Naissance" required/>
            		</p>-->
            	<div class="form-group">
            		<p>
            			<select name="region">
            
            				<?php 
            
            				while($affRegion=mysqli_fetch_object($exeRegion)){
            
            				?>
            				
            				<option value="<?php echo $affRegion->id;?>"><?php echo $affRegion->name;?></option>
            
            				<?php 
            
            				}
            
            				mysqli_free_result($exeRegion);
            
            				?>
            
            			</select>
            
            		</p>
            
            		<p>
            			<label>Votre photo de profil :</label>
            			
            			<input type="file" name="photo"/>
            		</p>
            	</div>
            		
            	<div class="form-group">
            		<fieldset>
            			
            			<legend>Hobby(ies)</legend>
            			<?php 
            
            				while ($affHobby=mysqli_fetch_object($exeHobby)) {
            					
            					?>
            					<p>
            						<label>
            							<?php echo $affHobby->name;?>
            						</label>
            						
            						<input type="checkbox" name="hobby[]" value="<?php echo $affHobby->id;?>"/>
            					</p>
            				<?php 	
            				
            				}
            
            				mysqli_free_result($exeHobby);
            
            			?>
            		</fieldset>
            	</div>
            
            		<p>
            			<input type="submit" class="btn btn-default" value="Envoyer"/>
            		</p>
            
            
            		</form>
            
            	</section>
            
            </span><!--Border-top-->
            
            </div><!-- Fin de la classe container-->
            	<script type="text/javascript" src="../vendor/jquery/dist/jquery.js"></script>
            	<script type="text/javascript" src="../vendor/bootstrap/dist/js/bootstrap.js"></script>
            </body>
            </html>
            Ma page de récupération
            <?php 
            
            require_once('../admin/connection.php');
            
            if(isset($_POST)){
            
            	$nom=mysqli_real_escape_string($connect,$_POST['nom']);
            	$prenom=mysqli_real_escape_string($connect,$_POST['prenom']);
            	$sexe=mysqli_real_escape_string($connect,$_POST['sexe']);
            	$pseudo=mysqli_real_escape_string($connect,$_POST['pseudo']);
            	$email=mysqli_real_escape_string($connect,$_POST['email']);
            	$mdp=mysqli_real_escape_string($connect,$_POST['mdp']);
            	$date=mysqli_real_escape_string($connect,$_POST['dateNaissance']);
            	$photo=mysqli_real_escape_string($connect,$_FILES['photo']['name']);
            	$hobby=mysqli_real_escape_string($connect,$_POST['hobby']);
            	$region=mysqli_real_escape_string($connect,$_POST['region']);
            
            	//J'encrypte directement le mot de passe rentré par l'utilisateur
            	$crypt1=md5($mdp);
            	$crypt2=sha1($crypt1);
            
            	//Je prépare l'insert du membre
            	$prepInsert="INSERT INTO member(name,firstname,gender,nickname,email,password,birthdayDate,profilePhoto,research,banned,id_region) VALUES ('$nom',$prenom','$sexe','$pseudo','$email','$crypt2','$date','$photo','Femme','0','$region');";
            
            	$exePrepInsert=mysqli_query($connect,$prepInsert);
            
            	$selIdMembre="SELECT id FROM member WHERE email='$email';";
            
            	$exeIdMembre=mysqli_query($connect,$selIdMembre);
            
            	$affId=mysqli_fetch_object($exeIdMembre);
            
            	mysqli_free_result($exeIdMembre);
            
            	$idMembre=$affId->id;
            
            	foreach ($_POST['hobby'] as $hobby) {
            		
            		$prepInsertHobby="INSERT INTO association1(id_membre,id_hobby) VALUES ('$idMembre,'$hobby');";
            
            		mysqli_query($connect,$prepInsertHobby);
            	}
            
            }
            
            ?>
            • Partager sur Facebook
            • Partager sur Twitter

            Problème d'insert sur un formulaire d'inscription

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown