Bonjour,

1) J'ai obtenu un message d'erreur là où devrait s'afficher mon formulaire.

Parse error: syntax error, unexpected ')', expecting ']' in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Voilà ma page contact.php :

<?php

include '../config/database.php';
include '../config/paths.php';

// Récupération de toutes les expériences.
$query =
'
    INSERT INTO contact 
                (LastName, FirstName, Entreprise, City, Zipcode, Email, Message, CreationTimestamp)
    VALUES (?, ?, ?, ?, ?, ?, ?, NOW())
';
$resultSet = $pdo->prepare($query);
$resultSet->execute([$_POST['lastName'], [$_POST['firstName'], [$_POST['entreprise'], [$_POST['city'], [$_POST['zipcode'], [$_POST['email'], [$_POST['message']]);

// Sélection et affichage du template PHTML.
$template = '../views/contact/contact';
include '../views/layout.phtml';

et ma page contact.phtml :

<section>
    <form class="generic-form" action="<?= ?>">
        <fieldset>
                <legend><i class="fa fa-book"></i> Informations </legend>
                    <ul>
                        <li>
                            <label>Nom :</label>
                            <input type="text" id="lastName" name="lastName" placeholder="Nom">
                        </li>
                        <li>
                            <label>Prénom :</label>
                            <input type="text" id="firstName" name="firstName" placeholder="Prénom">
                        </li>
                        <li>
                            <label>Entreprise :</label>
                            <input type="text" id="entreprise" name="entreprise" placeholder="Entreprise">
                        </li>
                        <li>
                            <label>Ville :</label>
                            <input type="text" id="city" name="city" placeholder="Ville">
                        </li>
                        <li>
                            <label>Code postal :</label>
                            <input type="text"
                            id="zipcode" name="zipcode" maxlength="5" placeholder="Code postal">
                        </li>
                        <li>
                            <label>E-mail :</label>
                            <input type="text" id="email" name="email" type="text" placeholder="E-mail">
                        </li>
                    </ul>
                </legend>
                <legend><i class="fa fa-book"></i> Message </legend>
                    <ul>
                        <li>
                            <input type="text" id="message" name ="message" placeholder="Message">
                        </li>
                    </ul>
                </legend>

                    <ul>
                <li>
                    <input class="button button-primary" type="submit" value="Envoyer">
                    <a class="button button-cancel small" href="<?= HOME_SRC ?>/index.php">Annuler</a>
                </li>
            </ul>
    </form>
</section>

2) J'essaie d'afficher mon contenu SQL mais rien ne s'affiche là où il devrait être, même pas un message d'erreur et il y a bien du cotenu dans ma base de données SQL.

Voici ma page career.php :

<?php

include '../config/database.php';
include '../config/paths.php';

// Récupération de toutes les expériences.
$query =
'
    SELECT  Id,
            Work,
            StartDate,
            EndDate,
            Time,
            Place,
            Description
    FROM career
    WHERE career.Id = ?
    ORDER BY career.Id DESC
';
$resultSet = $pdo->prepare($query);
// $resultSet->execute([$_GET['id']]);
$careers = $resultSet->fetchAll();

// Sélection et affichage du template PHTML.
$template = '../views/career/career';
include '../views/layout.phtml';

et voilà ma page career.phtml:

<h2>Ut documentorum ut ulla rata.</h2>
    <h3>Celebritateque Tyros adclinis Libano magnis pulchris amoenitate decorata pares Sidon.</h3>
    <h3>EXPERIENCES :</h3>
        <section class='careers'>
            <?php foreach($careers as $career): ?>
                <h4><?= htmlspecialchars($career['StartDate']) ?> - <?= htmlspecialchars($career['EndDate']) ?> / <?= htmlspecialchars($career['Work']) ?> / <?= htmlspecialchars($career['Place']) ?></h4>
                <p><?= htmlspecialchars($career['Description']) ?></p>
            <?php endforeach; ?>
        </section>

Merci d'avance pour votre réponse.

10 réponses


Bonsoir.
Ton problème se situe dans la méthode execute, tu ouvres des crochets en indiquant les variables qui contiennent les valeurs alors que ce qui est une grosse erreur.
Il te faut donc remplacer :

$resultSet->execute([$_POST['lastName'], [$_POST['firstName'], [$_POST['entreprise'], [$_POST['city'], [$_POST['zipcode'], [$_POST['email'], [$_POST['message']]);

Par :

$resultSet->execute([$_POST['lastName'], $_POST['firstName'], $_POST['entreprise'], $_POST['city'], $_POST['zipcode'], $_POST['email'], $_POST['message']]);

Merci, je viens d'effectuer les modifications mais j'obtiens de nouveaux messages d'erreur :

Notice: Undefined index: lastName in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Notice: Undefined index: firstName in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Notice: Undefined index: entreprise in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Notice: Undefined index: city in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Notice: Undefined index: zipcode in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Notice: Undefined index: email in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Notice: Undefined index: message in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'LastName' cannot be null' in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php:14 Stack trace: #0 /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php(14): PDOStatement->execute(Array) #1 {main} thrown in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Bonjour,
Il n'y a pas la method POST sur ton form....

<form class="generic-form" action="<?= ?>" method="post">

La method POST a été ajoutée et l'action a été complétée, action="<?= PHP_SRC ?>/contact.php". Les messages d'erreur restent pourtant les mêmes.

tu traites le formulaire sur career.php mais tu envoit a contact.php. c'est sur que ca va pas marcher...

Non, c'est bien ça. C'est contact.php qui gère le formulaire et non career.php, qui lui récupère des éléments de ma base de donnée SQL et qui n'a rien à voir avec le formulaire.

Mon problème avec career.php est qu'il ne veut pas afficher ou récupérer mon contenu SQL, rien ne s'affiche là où il devrait être, même pas un message d'erreur et il y a bien du contenu dans ma base de données SQL.

Pour commencer, le traitement de ton formulaire est totalement inexistant, tu devrais vérifier le format et l'existence des valeurs des données postées.
D'où par exemple l'erreur :

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'LastName' cannot be null'

C'est contact.php qui gère le formulaire et non career.php, qui lui récupère des éléments de ma base de donnée SQL et qui n'a rien à voir avec le formulaire.

Dans ce cas, pourquoi nous montrer le code d'un fichier qui n'a rien avoir avec ton formulaire et par conséquent avec l'erreur qui t'es retourné ?

Ensuite, dans ton fichier career.php, sur cette page, la ligne qui permet de faire l'exécution de la requête avec le paramêtre $_GET['id'] est commenté, alors que ce paramêtre est indispensable pour récupérer le résultat de la requête SQL.
De plus que je ne comprends pas l'intérêt d'ordonner les résultats via un champ qui a exactement la même valeur pour tous les enregistrements qui sont retournés.

Mon problème avec career.php est qu'il ne veut pas afficher ou récupérer mon contenu SQL, rien ne s'affiche là où il devrait être, même pas un message d'erreur et il y a bien du contenu dans ma base de données SQL.

Étant donné que l'exécution de la requête n'est pas effectuée vu que celle-ci est commenté, c'est tout à fait normal.
Je te conseillerais donc vivement, de bien faire des vérifications, autant pour les données postées via un formulaire, que pour les paramêtres passées par l'URL, car sinon, en plus de risquer des détériorations de tes données, tu tomberas indubitablement et continuellement sur des erreurs PHP.

Je ne comprend pas pourquoi vous me parler de mes fichiers career pour mon problème de formulaire (fichiers contact), j'ai bien expliqué mes problèmes en les postant. Soit 1) problème de formulaire avec mon erreur, contact.php, contact.phtml et 2) problème d'affichage avec career.php et career.phtml.

1)Comment ça le traitement de mon formulaire est inexistant ? Ce que je ne comprends pas c'est qu'on me dit "Undifined index: lastName" :


Notice: Undefined index: lastName in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Notice: Undefined index: firstName in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Notice: Undefined index: entreprise in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Notice: Undefined index: city in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Notice: Undefined index: zipcode in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Notice: Undefined index: email in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Notice: Undefined index: message in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'LastName' cannot be null' in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php:14 Stack trace: #0 /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php(14): PDOStatement->execute(Array) #1 {main} thrown in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/contact.php on line 14

Pourtant je les ai bien défini, j'ai attribué des valeurs, le contenu de mes fichiers et de ma table "contact" est aussi basé sur un exercice que j'ai déjà fait mais lui marche. J'ai alors comparé ce que j'ai dans l'exercice avec ce que j'ai fait là et tout est bien similaire dans l'ensemble.

2)C'est vrai, j'avais oublié de décommenter la requête avec le paramêtre $_GET['id'] après avoir fait certains tests. Je l'ai donc décommentée et j'ai obtenu cette erreur :


Notice: Undefined index: id in /Applications/XAMPP/xamppfiles/htdocs/valentin_site_modif/application/php/career.php on line 21

Cette erreur est donc sur la ligne que j'ai décommentée. Je ne vois pas pourquoi on me dit qu'Id n'est pas défini alors que mes données dans la table career, on bien un Id différent.

Comment ça le traitement de mon formulaire est inexistant ?

Tu ne fais aucune vérification sur les champs de ton formulaire, ni s'ils sont vide ou non, ni s'ils ont le type de format attendu, tu ne fais qu'insérer les valeurs dans la base de données.
Il te faut faire quelque chose comme par exemple :

if (!empty($_POST)) {
    if (!isset($_POST['lastName'], $_POST['firstName'], $_POST['entreprise'], $_POST['city'], $_POST['zipcode'], $_POST['email'], $_POST['message'])) {
        // Indiquer de remplir tous les champs
    } else {
        // Effectuer des vérifications supplémentaires et faire l'insertion en base de données si tout est bon
    }
}

Ou alors, faire les vérifications étape par étape :

if (!empty($_POST)) {
    if (empty($_POST['lastName'])) {
        // Indiquer qu'il faut renseigner le champ
    } else if(empty($_POST['firstName'])) {
        // Indiquer qu'il faut renseigner le champ
    } else if(empty($_POST['entreprise'])) {
        // Indiquer qu'il faut renseigner le champ
    } else if(empty($_POST['city'])) {
        // Indiquer qu'il faut renseigner le champ
    } else if(empty($_POST['zipcode'])) {
        // Indiquer qu'il faut renseigner le champ
    } else if(empty($_POST['email'])) {
        // Indiquer qu'il faut renseigner le champ
    } else if(empty($_POST['message'])) {
        // Indiquer qu'il faut renseigner le champ
    } else {
        // Tous les champs sont renseignés, faire des vérifications supplémentaires concernant les formats de champs spécifiques
        if (strlen($_POST['zipcode']) !== 5) {
            // La valeur du champ ne comporte pas 5 caractères
        } else if(!is_numeric($_POST['zipcode'])) {
            // La valeur du champ n'est pas numérique
        } else {
            // Toutes les vérifications sont correctes, insertion en base de données
        }
    }
}

Je ne vois pas pourquoi on me dit qu'Id n'est pas défini alors que mes données dans la table career, on bien un Id différent.

Le message d'erreur n'a aucun rapport avec ta base de données, $_GET est la variable globale concernant les paramêtres passées en GET dans l'url, soit par exemple localhost:8080/career.php?id=12, dans ce cas là le paramêtre id est bien passée par l'url en GET, mais il te faut quand même vérifier que sa valeur ne soit pas vide, car par exemple localhost:8080/career.php?id= ou localhost:8080/career.php?id, le paramêtre id est bien passé en GET dans l'url, mais il n'a aucune valeur.