Impossible de joindre les info à ma bdd

Eléphanteau du PHP | 33 Messages

15 nov. 2021, 16:01

Bonjours

Cela fait 3 jours que je suis bloqué, je suis entrain de créer un forum et je souhaiterais que lorsqu'on rentre des données pour s'inscrire qu'elles soient inscrite dans ma bdd mais en l'occurence je n'y arrive pas.
Je ne sais pas trop comment faire car j'ai même contacter le développeur qui a fait la vidéo et même lui ne me répond plus lol.
pourriez-vous m'aider ?

code Database

<?php

// Pour lier la base de données au code et permet d'afficher une erreur à l'écran si ça bug

try{

$bdd = new PDO('mysql:host=localhost;dbname=Forum;charset=utf8;', 'root', 'root');
}catch(Exception $e){
die('Une erreur a été trouvée : ' . $e->getMessage());
}

SignupAction

<!-- Vérification et les requêtes -->
<?php

require('actions/database.php');

if(isset($_POST['validate'])){

if(!empty($_POST['pseudo']) AND !empty($_POST['lastname']) AND !empty($_POST['firstname']) AND !empty($_POST['Password'])){

// Bloque l'accès à du code HTML ou autre et crypte les mdp
echo("CHAMPS COMPLÉTÉS");
$user_pseudo = htmlspecialchars($_POST['pseudo']);
echo($user_pseudo);
$user_lastname = htmlspecialchars($_POST['lastname']);
echo($user_lastname);
$user_firstname = htmlspecialchars($_POST['firstname']);
echo($user_firstname);
$user_password = password_hash($_POST['mdp'], PASSWORD_DEFAULT);
echo($user_Password);

// permet de récupérer les informations de l'utilisateur.
$checkIfUserAlreadyExists = $bdd->prepare('SELECT pseudo FROM users WHERE pseudo = ?');
$checkIfUserAlreadyExists->excute(array($user_pseudo, $user_firstname, $user_pseudo));
// pour savoir si l'utilisateur existe déjà et sinon pour l'insérer dans la base de données

if($checkIfUserAlreadyExists->rowCount() == 0){
echo("OK");
$insertUserOnWebsite = $bdd->prepare('INSERT INTO users(pseudo, lastname, firstname, mdp)VALUES(?, ?, ?, ?)');
$insertUserOnWebsite->execute(array($user_pseudo, $user_lastname, $user_firstname, $user_password));



}else{
$errorMsg = "l'utilisateur existe déjà sur le site";
}

}else{
$errorMsg = "Veuillez compléter la fiche d'inscription...";
}

}
?>

head
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Lien join (CSS) -->
peut pas joindre à cause du site.
<!-- Lien join (CSS) -->
peut pas joindre à cause du site.
<title>Document</title>
</head>

Voici mon code, si quelqu'un pourrait m'aider je le remercie d'avance :)

ynx
Mammouth du PHP | 586 Messages

15 nov. 2021, 17:12

Bonjour,

Si ce n'est pas déjà le cas, en développement, pense à activer l'affichage des erreurs PHP et à activer le rapport d'erreur de PDO.
tutoriels/page-blanche-script-php-comme ... 73178.html
https://www.php.net/manual/fr/pdo.error-handling.php

Sans regarder en détail le code, il semble avant tout que tu as une erreur de syntaxe sur l'appel de la fonction execute pour le statement $checkIfUserAlreadyExists (excute au lieu de execute).

Autre remarque : la fonction rowCount() ne garantie pas de retourner le nombre de ligne pour une requête SELECT. Voir l'exemple #2 de la documentation de rowCount() pour une solution alternative.
https://www.php.net/manual/fr/pdostatement.rowcount.php

Au passage, la fonction htmlspecialchars() n'est pas utilisée au bon moment, celle-ci devrait idéalement être utilisée lors de l'affichage des données dans du html et pas lors de l'insertion des données en bdd.

Eléphanteau du PHP | 33 Messages

15 nov. 2021, 17:37

Je dois être à l'ouest mais rien que déjà pour pouvoir faire une recherche dans un fichier ? genre on fait ça ou ? pour pouvoir afficher l'erreur sur la page ?

Eléphanteau du PHP | 33 Messages

15 nov. 2021, 17:48

La moitié des bouts de code je sais même pas ou les placer, je suis con ou quoi ? j'ai beau les placer à un endroit ma page reste blanche mais avec le code que j'ai transmis les case pour insérer ses informations fonctionnement mais les info ne sont juste pas reliés à la bdd y pas un autre code que pour ça ?

Eléphanteau du PHP | 33 Messages

15 nov. 2021, 18:01

Signup.php

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
<!-- inclus les fichiers nécessaires -->
<?php require ('actions/signupAction.php'); ?>
<!DOCTYPE html>

<html lang="en">
<?php include 'includes/head.php'; ?>

<body>
<br></br>
<!-- permet de créer les champs et d'afficher le message d'erreur -->
<form class ="container" method="POST">

<?php if(isset($errorMsg)){ echo '<p>'.$errorMsg.'</p>'; } ?>
<div class="mb-3">
<label for="exampleInputEmail1" class="form-label">Pseudo</label>
<input type="text" class="form-control" name="pseudo">
</div>
<div class="mb-3">
<label for="exampleInputEmail1" class="form-label">Nom</label>
<input type="text" class="form-control" name="lastname">
</div>
<div class="mb-3">
<label for="exampleInputEmail1" class="form-label">Prénom</label>
<input type="text" class="form-control" name="firstname">
</div>
<div class="mb-3">
<label for="exampleInputPassword1" class="form-label">mdp</label>
<input type="password" class="form-control" name="Password">
</div>
<button type="submit" class="btn btn-primary" name="validate">S'inscrire</button>
</form>
</body>
</html>

database.php

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
// Pour lier la base de données au code et permet d'afficher une erreur à l'écran si ça bug

$users = 'mysql:dbname=Forum;host=10.0.9.110';
$user_pseudo = 'googleguy';
$user_password = 'googleguy';

/*
L'utilisation des blocs try/catch autour du constructeur est toujours valide
même si nous définissons le ERRMODE à WARNING sachant que PDO::__construct
va toujours lancer une exception PDOException si la connexion échoue.
*/
try {
$users = new PDO($user_pseudo, $user_firstname, $user_password, $user_lastname array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
} catch (PDOException $e) {
echo 'Échec de la connexion : ' . $e->getMessage();
exit;
}

// Ceci fera que PDO lancera une erreur de niveau E_WARNING au lieu d'une exception (lorsque la table n'existe pas)
$users->query("SELECT wrongcolumn FROM wrongtable");
?>

J'ai mis là car le signup.php est mon fichier ini mais rien ne change même avec ''ce code pour afficher les erreurs''

Eléphanteau du PHP | 33 Messages

15 nov. 2021, 18:01

.
Modifié en dernier par Merydian le 15 nov. 2021, 18:09, modifié 1 fois.

ynx
Mammouth du PHP | 586 Messages

15 nov. 2021, 18:22

Dans le fichier signup.php, tu as oublié de fermer la balise PHP après avoir ajouter les instructions pour afficher les erreurs. Le commentaire html avant le doctype n'est pas non plus idéal, utilise plutôt un commentaire php ici :
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

// inclus les fichiers nécessaires
require ('actions/signupAction.php'); ?>
<!DOCTYPE html>
[...]
Pour le fichier database.php, il ne faut pas recopier tel quel l'exemple de la documentation, il faut adapter ton code avec l'exemple proposé. Commence par reprendre ton fichier database.php initial afin que la connexion à la bdd fonctionne.

As tu corrigé l'erreur sur l'appel de la fonction execute() sur le statement $checkIfUserAlreadyExists ?

As tu essayé d'exécuter tes requêtes sql directement en base de données (via PhpMyAdmin ou un autre client sql) afin de vérifier que celles-ci fonctionnent correctement ?

Eléphanteau du PHP | 33 Messages

15 nov. 2021, 18:42

Alors, j'ai fermé la balise comme tu me l'as dit.
Oui j'ai corrigé l'erreur de la fonction execute()
Mais maintenant j'en suis ici.
et j'ai télécharger les extensions nécessaires pour avoir les erreurs.
Dans mon fichier ''Database.php'' le ''array'' après le $user_name est une erreur.
Dans mon fichier ''head.php'' c'est le ''display_errors = On'' qui est une erreur.
Et pour le coup non j'ai pas essayé d'exécuter mes requêtes directement en base de données haha car je ne sais pas comment faire ^^'

DataBase.php

<?php

// Pour lier la base de données au code et permet d'afficher une erreur à l'écran si ça bug

$users = 'mysql:dbname=Forum;host=10.0.9.110';
$user_pseudo = 'googleguy';
$user_password = 'googleguy';

/*
L'utilisation des blocs try/catch autour du constructeur est toujours valide
même si nous définissons le ERRMODE à WARNING sachant que PDO::__construct
va toujours lancer une exception PDOException si la connexion échoue.
*/
try {
$users = new PDO($user_pseudo, $user_firstname, $user_password, $user_lastname array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
} catch (PDOException $e) {
echo 'Échec de la connexion : ' . $e->getMessage();
exit;
}

// Ceci fera que PDO lancera une erreur de niveau E_WARNING au lieu d'une exception (lorsque la table n'existe pas)
$users->query("SELECT wrongcolumn FROM wrongtable");
?>

head.php

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
error_reporting = E_ALL
display_errors = On
?>

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Lien join (CSS) -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@ ... ap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<!-- Lien join (CSS) -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@ ... dle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<title>Document</title>
</head>

signupAction.php

<!-- Vérification et les requêtes -->
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

?>
<?php

require('actions/database.php');

if(isset($_POST['validate'])){

if(!empty($_POST['pseudo']) AND !empty($_POST['lastname']) AND !empty($_POST['firstname']) AND !empty($_POST['Password'])){

// Bloque l'accès à du code HTML ou autre et crypte les mdp
echo("CHAMPS COMPLÉTÉS");
$user_pseudo = htmlspecialchars($_POST['pseudo']);
echo($user_pseudo);
$user_lastname = htmlspecialchars($_POST['lastname']);
echo($user_lastname);
$user_firstname = htmlspecialchars($_POST['firstname']);
echo($user_firstname);
$user_password = password_hash($_POST['mdp'], PASSWORD_DEFAULT);
echo($user_Password);

// permet de récupérer les informations de l'utilisateur.
$checkIfUserAlreadyExists = $bdd->prepare('SELECT pseudo FROM users WHERE pseudo = ?');
$checkIfUserAlreadyExists->excute(array($user_pseudo, $user_firstname, $user_pseudo));
// pour savoir si l'utilisateur existe déjà et sinon pour l'insérer dans la base de données

if($checkIfUserAlreadyExists->rowCount() == 0){
echo("OK");
$insertUserOnWebsite = $bdd->prepare('INSERT INTO users(pseudo, lastname, firstname, mdp)VALUES(?, ?, ?, ?)');
$insertUserOnWebsite->excute(array($user_pseudo, $user_lastname, $user_firstname, $user_password));



}else{
$errorMsg = "l'utilisateur existe déjà sur le site";
}

}else{
$errorMsg = "Veuillez compléter la fiche d'inscription...";
}

}
?>

signup.php

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
?>


<!-- inclus les fichiers nécessaires -->
<?php require ('actions/signupAction.php'); ?>
<!DOCTYPE html>

<html lang="en">
<?php include 'includes/head.php'; ?>

<body>
<br></br>
<!-- permet de créer les champs et d'afficher le message d'erreur -->
<form class ="container" method="POST">

<?php if(isset($errorMsg)){ echo '<p>'.$errorMsg.'</p>'; } ?>
<div class="mb-3">
<label for="exampleInputEmail1" class="form-label">Pseudo</label>
<input type="text" class="form-control" name="pseudo">
</div>
<div class="mb-3">
<label for="exampleInputEmail1" class="form-label">Nom</label>
<input type="text" class="form-control" name="lastname">
</div>
<div class="mb-3">
<label for="exampleInputEmail1" class="form-label">Prénom</label>
<input type="text" class="form-control" name="firstname">
</div>
<div class="mb-3">
<label for="exampleInputPassword1" class="form-label">mdp</label>
<input type="password" class="form-control" name="Password">
</div>
<button type="submit" class="btn btn-primary" name="validate">S'inscrire</button>
</form>
</body>
</html>

Eléphanteau du PHP | 33 Messages

16 nov. 2021, 10:32

y a moyen de me dire comment mettre des screens dans le chat afin que ce soit plus lisible pour vous ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

16 nov. 2021, 12:41

Oui tu les upload quelque part (https://imgur.com/upload par exemple)
Puis tu peux les intégrer avec les balises

Code : Tout sélectionner

[img]https://url_de_ton_image[/img]

De la même façon pour mettre en forme ton code HTML ou PHP sur le forum tu peux utiliser les balises CODE ou PHP

Code : Tout sélectionner

[php]<?php ... [/php]
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 33 Messages

16 nov. 2021, 13:10

signup.php
<?php
error_reporting(E_ALL); 
ini_set("display_errors", 1);
?>


<!-- inclus les fichiers nécessaires -->
<?php require ('actions/signupAction.php'); ?>
<!DOCTYPE html>

<html lang="en">
<?php include 'includes/head.php'; ?>

<body>
<br></br>
<!-- permet de créer les champs et d'afficher le message d'erreur -->
<form class ="container" method="POST">
      
      <?php if(isset($errorMsg)){ echo '<p>'.$errorMsg.'</p>'; } ?>
      <div class="mb-3">
            <label for="exampleInputEmail1" class="form-label">Pseudo</label>
            <input type="text" class="form-control" name="pseudo"> 
       </div>
      <div class="mb-3">
            <label for="exampleInputEmail1" class="form-label">Nom</label>
            <input type="text" class="form-control" name="lastname"> 
      </div>
      <div class="mb-3">
            <label for="exampleInputEmail1" class="form-label">Prénom</label>
            <input type="text" class="form-control" name="firstname">
      </div>
      <div class="mb-3">
            <label for="exampleInputPassword1" class="form-label">mdp</label>
            <input type="password" class="form-control" name="Password"> 
      </div>
      <button type="submit" class="btn btn-primary" name="validate">S'inscrire</button>
   </form>
</body>
</html>
head.php
<?php
error_reporting(E_ALL); 
ini_set("display_errors", 1);

?>

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- Lien join (CSS) -->
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
    <!-- Lien join (CSS) -->
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
    <title>Document</title>
</head>

signupaction.php
<!-- Vérification et les requêtes -->
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

?>
<?php

require('actions/database.php');

if(isset($_POST['validate'])){

if(!empty($_POST['pseudo']) AND !empty($_POST['lastname']) AND !empty($_POST['firstname']) AND !empty($_POST['Password'])){

// Bloque l'accès à du code HTML ou autre et crypte les mdp
echo("CHAMPS COMPLÉTÉS");
$user_pseudo = htmlspecialchars($_POST['pseudo']);
echo($user_pseudo);
$user_lastname = htmlspecialchars($_POST['lastname']);
echo($user_lastname);
$user_firstname = htmlspecialchars($_POST['firstname']);
echo($user_firstname);
$user_password = password_hash($_POST['mdp'], PASSWORD_DEFAULT);
echo($user_Password);

// permet de récupérer les informations de l'utilisateur.
$checkIfUserAlreadyExists = $bdd->prepare('SELECT pseudo FROM users WHERE pseudo = ?');
$checkIfUserAlreadyExists->excute(array($user_pseudo, $user_firstname, $user_pseudo));
// pour savoir si l'utilisateur existe déjà et sinon pour l'insérer dans la base de données

if($checkIfUserAlreadyExists->rowCount() == 0){
echo("OK");
$insertUserOnWebsite = $bdd->prepare('INSERT INTO users(pseudo, lastname, firstname, mdp)VALUES(?, ?, ?, ?)');
$insertUserOnWebsite->excute(array($user_pseudo, $user_lastname, $user_firstname, $user_password));



}else{
$errorMsg = "l'utilisateur existe déjà sur le site";
}

}else{
$errorMsg = "Veuillez compléter la fiche d'inscription...";
}

}
?> 


database.php
<?php

// Pour lier la base de données au code et permet d'afficher une erreur à l'écran si ça bug

/*
    L'utilisation des blocs try/catch autour du constructeur est toujours valide
    même si nous définissons le ERRMODE à WARNING sachant que PDO::__construct
    va toujours lancer une exception PDOException si la connexion échoue.
*/
try {
    $users = new PDO($user_pseudo, $user_firstname, $user_password, $user_lastname, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
} catch (PDOException $e) {
    echo 'Échec de la connexion : ' . $e->getMessage();
    exit;
}

// Ceci fera que PDO lancera une erreur de niveau E_WARNING au lieu d'une exception (lorsque la table n'existe pas)
$users->query("SELECT wrongcolumn FROM wrongtable");
?>
Modifié en dernier par Merydian le 16 nov. 2021, 15:39, modifié 6 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

16 nov. 2021, 13:16

Et si tu utilisais les balises IMG comme indiqué ?
Si c'est pour faire des captures d'écran de code, il est préférable de mettre ton code dans des balises PHP...
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 33 Messages

16 nov. 2021, 14:12

Voilà tout est bon haha