Partage

Aucune insertion ne se réalise dans la base

21 juin 2018 à 19:55:22

Bonsoir à tous, 

Je me tourne aujourd'hui vers vous car je rencontre actuellement un petit problème d'insertion dans ma base de données SQL via la commande PHP (INSERT INTO avec les paramètres) et cela n’insère malheureusement rien dans la base de données, elle reste aussi vide qu'auparavant :).

J'ai par ailleurs déjà essayé de rentrer la commande dans l'onglet SQL de la BDD et celle-ci ne me renvoi aucune erreur et cela fonctionne parfaitement. 

Je vous joint ci-contre la capture d'écran de la base de données et le code PHP de la page qui doit insérer les valeurs dans la base de données : 

Capture d'écran de la BDD :  

Ligne de code de la page PHP (index.php) : 

<?php
$email = $pass = $pseudo = "";
$emailError = $passError = $pseudoError = $pass2Error = "";
$isSuccess = false;
		function verifyInput($var){
			$var = trim($var);
			$var = stripslashes($var);
			$var = htmlspecialchars($var);
			return $var;
		}
		function isEmail($var){
			return filter_var($var, FILTER_VALIDATE_EMAIL);
		}
	if ($_SERVER["REQUEST_METHOD"] == "POST"){
			$email = verifyInput($_POST['email']);
			$pseudo = verifyInput($_POST['pseudo']);
			$pass = verifyInput($_POST['pass']);
			$pass2 = verifyInput($_POST['pass2']);
			$isSuccess = true;
	if(!isEmail($email)){
		$emailError = "L'email que vous avez rentrer n'est pas au bon format ou vous n'avez pas rentré d'email";
		$isSuccess = false;
	}
		if(empty($pseudo)){
		$pseudoError = "Veuillez vérifier que vous avez bien rentrer un pseudo";
		$isSuccess = false;
	}
		if(empty($pass)){
		$passError = "Veuillez vérifier que vous avez bien rentrer un mot de passe";
		$isSuccess = false;
	}
		if(empty($pass2)){
		$pass2Error = "Veuillez vérifier que vous avez bien retapé votre mot de passe";
		$isSuccess = false;
	}
		else{
try 
{
	$bdd = new PDO('mysql:host=localhost;dbname=*********', '*******', '*********');
}
catch (exception $e)
{
	die('Erreur: ' .$e->getMessage());
}
	$hash = md5($_POST['pass']);
	$score = 0;
	$reponse = $bdd->query("INSERT INTO membres(email, pass, pseudo, score) VALUES ('$email', '$hash', '$pseudo', '$score')");
	header('Location: accueil.php');
}
	}
?>
<! DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="device=device-width, initial-scale=1">
		<link rel="stylesheet" href="style4.css" />
		<title>Inscription</title>
	</head>
	
	<body>
	<div class="container">
	<div class="row">
	<h1 class="m12">Bienvenue sur la page pour vous inscire sur le site internet</h1>
	<p>Votre inscription sur le site dès votre arrivée, vous permettra ainsi de sauvegarder votre score et de l'afficher dans votre profil. Dans le futur, bien d'autres fonctionnalitées liés à votre compte apparaîtront sur le site...</p>
	<form action ="index.php" method="post" role="form" id="inscription-form">
	<div class="row">
		<div class="col-md-6">
		<label for="email">Email :</label>
		<input type="text" name="email" id="email" placeholder="Votre e-mail" class="form-control"/> </br>
		<p class="comments"><?php echo $emailError; ?></p> 
		</div>
		
		<div class="col-md-6">
		<label for="username">Nom d'utilisateur :</label>
		<input type="text" name="pseudo" id="pseudo" placeholder="Votre pseudo" class="form-control" /> </br>
		<p class="comments"><?php echo $pseudoError; ?></p> 
		</div>
		
		<div class="col-md-6">
		<label for="pass">Mot de passe :</label>
		<input type="password" name="pass" id="pass" placeholder="Mot de passe" class="form-control" /> </br>
		<p class="comments"><?php echo $passError; ?></p> 
		</div>
		
		<div class="col-md-6">
		<label for="repeat_pass">Rétaper votre mot de passe:</label>
		<input type="password" name="pass2" id="pass" placeholder="Retaper votre mot de passe" class="form-control"/> </br>
		<p class="comments"><?php echo $pass2Error; ?></p> 
		</div>
		
		<br />
		<input type="submit" class="button" value="Valider" />
		Si vous vous êtes déjà inscrit, veuillez cliquer <a href="connexion.php" class="connexion">ici</a>
	
		</div>
		</div>
		</div>
		</form>
	</body>
	</html>

je tiens par ailleurs aussi à vous préciser que l'insertion se réalisait parfaitement avant que j'intègre la variable score à insérée dans la BDD. 

Si quelqu'un aurait une solution pour résoudre mon problème ? 

Merci d'avance. 

Cordialement.

Quentin

-
Edité par AbcAbc6 21 juin 2018 à 20:44:21

Vous êtes demandeur·se d'emploi ?
Sans diplôme post-bac ?

Devenez Développeur·se web junior

Je postule
Formation
courte
Financée
à 100%
21 juin 2018 à 20:01:58

avant de continuer à lire, déjà, vaut mieux enlever ton mot de passe (ici, pas dans le code of course xD)  ^^ à tout de suite (si je sais t'aider ^^)

-
Edité par Caroline B. 21 juin 2018 à 20:02:35

Google répond à tout, PHP Manual sait (presque) tout, StackOverflow envisage tout !
Staff 21 juin 2018 à 20:05:52

Bonjour,

Mauvais titre

Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

Pour modifier votre titre, éditez le premier message de votre sujet.

(titre originel : Problème entre PHP et MYSQL)

ÉDIT : MySql n'est pas un titre acceptable, j'ai modifier le titre avec ton sous titre => "Aucune insertion ne se réalise dans la base".  


J'ai modifier votre message en supprimant les identifiants et mot de passe, il n'est pas prudent de les donner sur un forum public.

Activer les erreurs PDO ce sera déjà cela;

-
Edité par AbcAbc6 21 juin 2018 à 20:46:44

21 juin 2018 à 20:12:32

https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/ecrire-des-donnees-2

$rq = $bdd->prepare('
	INSERT INTO membres (email, pass, pseudo, score)
	VALUES(:email, :hash, :pseudo, :score)
');

$rq->execute([
	':email'  => $email,
	':hash'   => $hash,
	':pseudo' => $pseudo,
	':score'  => $score
]);


Bonus :p 

http://php.net/manual/fr/faq.passwords.php

-
Edité par Caroline B. 21 juin 2018 à 20:56:27

Google répond à tout, PHP Manual sait (presque) tout, StackOverflow envisage tout !
21 juin 2018 à 20:29:15

Bonjour,

Il faut activer les erreurs PDO. (voir ma signature)

21 juin 2018 à 20:36:20

Caroline B. a écrit:

https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/ecrire-des-donnees-2

$rq = $bdd->prepare('
	INSERT INTO membres (email, pass, pseudo, score)
	VALUES(:email, :hash, :pseudo, :score)
');

$rq->execute([
	':email'  => $email,
	':hash'   => $hash,
	':pseudo' => $pseudo,
	':score'  => $score
]);

Ca fonctionne sur phpmyadmin quand tu entres ta requête car tu n'utilises pas la bonne fonction pour l'exécuter dans ton code. (exec pour modifier la db et query pour les SELECT)


Bonus :p 

http://php.net/manual/fr/faq.passwords.php

-
Edité par Caroline B. il y a 4 minutes

Oui mais si c'est vraiment un problème où il me manque la fonction pour exécuter, normalement il ne devrait pas pouvoir insérer les précédentes valeurs (email, mot de passe hashe et pseudo) alors qu'il les insérer très bien sans exécution ? 

Merci.

Quentin 

21 juin 2018 à 20:58:23

Effectivement je viens d'essayer, ça fonctionne donc j'ai enlevé cette partie de mon commentaire, sorry ^^ mais du coup je ne comprends pas pourquoi ça ne fonctionne pas... as-tu activé les erreurs PDO comme conseillé par philodick ? ça dit quoi ?
Google répond à tout, PHP Manual sait (presque) tout, StackOverflow envisage tout !
21 juin 2018 à 21:06:38

Caroline B. a écrit:

Effectivement je viens d'essayer, ça fonctionne donc j'ai enlevé cette partie de mon commentaire, sorry ^^ mais du coup je ne comprends pas pourquoi ça ne fonctionne pas... as-tu activé les erreurs PDO comme conseillé par philodick ? ça dit quoi ?

Désolé d'avoir solicité ce sujet pour rien, j'ai trouvé la solution, je n'avais pas envoyé le fichier en ligne sachant que je testais l'insertion avec les site en ligne. Ce problème est donc résolu. Cependant, je me permets de vous demander votre aide sur un autre problème, j'ai des bordures rouges qui apparaissent en permanence comme sur la photo ci-contre dans ma page web : 

Alors que ces bordures sont d'après mon code CSS et PHP censé s'affichée d'une couleur différente selon la réponse de l'utilisateur. Je vous mets donc ci-contre les lignes de codes des pages PHP et CSS : 

Code de la page PHP : 

<?php
	require_once 'config1.php';
	$reussite = $echec = "";
	$reponse = $bdd->query('SELECT * FROM automobile WHERE id="1"');
?>
<?php
		$reponse = $bdd->query('SELECT * FROM automobile WHERE id="1"');
		while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC))
{
	$question = htmlspecialchars($donnees['question']);
if ($_SERVER["REQUEST_METHOD"] == "POST"){
	if (!empty($_POST['reponse'])){
	$score = 0;
	$bonne_reponse = $donnees['reponse'];
	$reponses = $_POST['reponse'];
	$savoir = $donnees['connaissance'];
			if($reponses == $bonne_reponse){
                $reussite = "Félicitations, vous avez trouvé la bonne réponse.";
                echo "<section>";
				$newscore = $score + 1;
                echo '<p class="resultat">'."Votre score actuel est de $newscore".'</p>';
                echo "</section>";
				$bdd->query('INSERT INTO membres (score) VALUES ('$newscore') WHERE pseudo = $_SESSION['pseudo']');
	}
		else{
			$echec = "Dommage, vous n'avez pas trouvé la bonne reponse. Celle_ci est '$bonne_reponse'";
		}
		}	
	}		
		}
$reponse->closeCursor();
?>

Le code de la page CSS : 

a {
text-decoration : none;
border : green inset 4px;
color : white;
background-color : green;
}
body {
text-align : center;
}
.question{
border : blue inset 10px;
border-radius : 15px;
color : white;
background-color : #00BFFF;
margin : 10px;
}
.img {
margin : 40px;
}
.valider {
color : black;
border-radius : 3px;
background-color : #F7FF3C;
margin : 10px;
font-size : 20px;
}
.reponse {
border-radius : 5px;
font-size : 15px;
}
.timer {
border-radius : 15px;
color : white;
background-color : #3AF24B;
}
.reusite{
	border: 3px green inset;
	border-radius: 4px;
	background-color: green;
	color: white;
}
.echec{
	border: 3px red outset;
	border-radius: 4px;
	color: white;
	background-color: red;
}

Et le code HTML de la même page que la page PHP : 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="device=device-width, initial-scale=1">
		<link rel="stylesheet" href="style2.css" />
		<title>Quiz Automobile</title>
	</head>
	<body>
	<div class="container">
	<div class="row">
	<div class="position">
	<div class="timer">
	<?php require_once 'minuteur.php'; ?>
	</div>
	<form action="question.php" method="post">
	<div class="question">
	<?php echo '<p>'.$question.'</p>'; ?>
	</div>
	<div class="img">
	<img src="alfa_romeo.jpg" />
	</div>
	<input type="text" name="reponse" placeholder="Votre réponse..." class="reponse" /> </br>
	<input type="submit" value="Valider" name="valider" class="valider" />
	</div>
	<a href="2.php" class="suivant">Prochaine question</a>
	</form>
	<article>
	<div class="reussite">
	<p class="reussite"><?php echo $reussite; ?> </p>
	</article>
	<article>
	<div class="echec">
	<p class="échec"><?php echo $echec; ?> </p>
	</article>
	</form>
	</div>
	</div>
	</body>
	</html>

Je pense que c'est tout bête pour que les bordures ne s'affichent pas en permanence mais là, je ne vois vraiment pas, je ne pense pas que ce soit aussi bête que mon problème d'insertion précédent :). 

Merci d'avance. 

Quentin


-
Edité par QuentinGiraud5 21 juin 2018 à 21:08:24

Aucune insertion ne se réalise dans la base

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown