Si ça ne sert à rien que j'écrive du code (vu que tu n'en tiens pas compte)... dis-le moi...
Si ça ne sert à rien que j'écrive du code (vu que tu n'en tiens pas compte)... dis-le moi...
Bonjour Jreaux, toutes mes excuses pour ce retour tardif - j'ai eu un week-end plutôt chargé et je crois que nos messages se sont croisés lorsque j'échangeais avec Sabotage mais grand merci pour ton intérêt à mes problématiques de code.
J'ai testé ta suggestion de code, merci pour cela, mais malheureusement, je n'obtiens guère mieux que ce que j'avais vendredi ... Je reste sur la page traitement.php après avoir renseigné le formulaire de la page article.php ...
Je commence à me sentir un peu comme un boulet ...
Pour rappel en espérant que tu ne sois pas découragé pour m'aider - voici le code de me page article.php :
et voici celui de ma page de traitement sensée incrémenter ma base de données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 <?php session_start(); ?> <meta charset="utf-8"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>Derniers articles du blog</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link href="vue/blog/style.css" rel="stylesheet" type="text/css" /> </head> <body> <fieldset> <form action="../../modele/blog/traitement.php" method="POST"> <?php include_once('../../modele/connexion_sql.php'); $champcategorie='<select name="id_categorie">' ; $champcategorie.='<option value="'.'">'.'< Choisissez votre catégorie >'.'</option>'; $reponse = $bdd->query("SELECT * FROM categorie"); while ($donnees = $reponse->fetch()) { //la concatenation des champs se fait ici $champcategorie.='<option value="'.$donnees['id_categorie'].'">'.$donnees['id_categorie'].' - '.$donnees['nom'].'</option>'; } $champcategorie .= '</select>'; echo $champcategorie; ?> </p> <p><label> pseudo : </label> <input type="text" name="pseudo" value="<?php if(isset($_SESSION['pseudo'])) echo $_SESSION['pseudo']; ?>" placeholder="Votre pseudo ici" /><p> <p><label> Titre de votre article : </label> <input type="text" name="titre_article" id="titre_article"></textarea></p> <p><label> Texte de votre article </label> <textarea name="texte_article" id="texte_article">un texte par defaut ...</textarea></p> <p> <input type="submit"/></p> </form> </fieldset> <p>Derniers articles du blog :</p> <?php include_once('../../controleur/blog/article.php'); foreach($billets as $billet) { ?> <div class="news"> <h3> <?php echo $billet['titre_article']; ?> <em>le <?php echo $billet['date_redaction_fr']; ?></em> </h3> <p> <?php echo $billet['texte_article']; ?> <br /> </p> </div> <?php } ?> </body> </html>
Je me posait la question de savoir s'il ne vaudrait mieux pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 <?php session_start(); ?> <meta charset="utf-8"> <?php include_once('../connexion_sql.php'); $valid_form = 0; $err_msg = ''; if ( isset($_POST['article_id'], $_POST['id_categorie'], $_POST['pseudo'], $_POST['titre_article'], $_POST['texte_article']) ) // TOUS les champs sont remplis { // ------------------- // 1/ récupération des données du formulaire $id_categorie = trim($_POST['id_categorie']); $article_id = trim($_POST['article_id']); $pseudo = trim($_POST['pseudo']); $titre_article = trim($_POST['titre_article']); $texte_article = trim($_POST['texte_article']); // ------------------- // 2/ Gestion des erreurs if(empty($_POST['id_categorie'])){ $valid_form = 2; $err_msg .= 'erreur :..........<br>'; } if($valid_form != 2){ $valid_form = 1; } // ------------------- // 3/ Si pas d'erreur : insertion en base de données if($valid_form == 1){ // --------------- $sql = "INSERT INTO categorie_article (id_categorie, pseudo, titre_article, texte_article, date_redaction) VALUES (?, ?, ?, ?, NOW())"; $requete = $bdd->prepare($sql); $requete->execute(array( $_POST['id_categorie'], $_POST['pseudo'], $_POST['titre_article'], $_POST['texte_article'] )); } // --------------- // redirection header('Location: ../../vue/blog/article.php'); } ?>
- ajouter une colonne qui ne soit pas liée comme PRIMARY KEY à la table 'categorie' dans ma table 'categorie_article' et qui fasse le lien avec la table 'categorie'. Quelque chose comme 'nom_categorie' et qui permettrait ce lien entre les deux tables : 'categorie_article.nom_categorie' = 'categorie.nom' ...?
- modifier le statut de ma colonne id_categorie et lui enlever son statut PRIMARY KEY (ce qui irait à l'encoontre de mon énoncé d'exercice ...)
Je serai intéressé d'avoir ton avis sur ces points ...
Encore grand merci pour ton aide
Erratum : à toutes fins utiles et pour rappel voici mon fichier SOURCE pour la création des tables :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 CREATE DATABASE p2p_blog CHARACTER SET 'utf8'; USE p2p_blog; CREATE TABLE Categorie ( id INT UNSIGNED AUTO_INCREMENT, nom VARCHAR(150) NOT NULL, description VARCHAR(150), date_creation DATE, PRIMARY KEY(id) ); CREATE TABLE Categorie_article ( categorie_id INT UNSIGNED, article_id INT UNSIGNED, pseudo VARCHAR(150) NOT NULL, titre_article VARCHAR(150) NOT NULL, texte_article TEXT NOT NULL, date_redaction DATE, PRIMARY KEY (categorie_id, article_id) ); CREATE TABLE Utilisateurs ( id INT UNSIGNED AUTO_INCREMENT, pseudo VARCHAR(150) NOT NULL, email VARCHAR(150) NOT NULL, password VARCHAR(150) NOT NULL, date_inscription DATE, Articles_ecrits VARCHAR(150), PRIMARY KEY(id) ); CREATE TABLE Commentaires_article ( id INT UNSIGNED AUTO_INCREMENT, article_id INT UNSIGNED, texte_article TEXT NOT NULL, date_creation DATE, PRIMARY KEY(id) );
Alors :
Dans ton fichier SQL dans la table categorie tu as une colonne 'id', est-ce bien cela que tu as mis ou alors c'est 'id_categorie'?
Je vais partir du principe que c'est 'id' puisque c'est dans ton fichier source.
En partant de ce constat ton formulaire doit-être ceci :
Naturellement tu rectifieras au besoin.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?php include_once('../../modele/connexion_sql.php'); $champcategorie='<select name="id_categorie">' ; $champcategorie.='<option value="'.'">'.'< Choisissez votre catégorie >'.'</option>'; $reponse = $bdd->query("SELECT * FROM categorie"); while ($donnees = $reponse->fetch()) { //la concatenation des champs se fait ici $champcategorie.='<option value="'.$donnees['id'].'">'.$donnees['id'].' - '.$donnees['nom'].'</option>'; } $champcategorie .= '</select>'; echo $champcategorie; ?>
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde
Mes Articles/Critiques :
Merise - Guide pratique
PHPExcel
PostgreSQL : Administration et exploitation d'une base de données
PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle
Bonjour MaitrePylos,
la confusion vient de moi. Dans un échange précédant avec Jreaux j'ai modifié cette partie de la table dans ma base de données sur php myadmin.
Elle s'appelle bien id_categorie dans ma table 'categorie'. Je n'avais pas mis à jour mon fichier SOURCE ... que voici donc actualisé
Y vois-tu quelque chose qui cloche ? ou alors faut-il modifier quelque chose dans les colonne de la table 'categorie' (ajouter une colonne 'id' ...?).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 CREATE DATABASE p2p_blog CHARACTER SET 'utf8'; USE p2p_blog; CREATE TABLE Categorie ( id_categorie INT UNSIGNED AUTO_INCREMENT, nom VARCHAR(150) NOT NULL, description VARCHAR(150), date_creation DATE, PRIMARY KEY(id_categorie) ); CREATE TABLE Categorie_article ( categorie_id INT UNSIGNED, article_id INT UNSIGNED, pseudo VARCHAR(150) NOT NULL, titre_article VARCHAR(150) NOT NULL, texte_article TEXT NOT NULL, date_redaction DATE, PRIMARY KEY (categorie_id, article_id) ); CREATE TABLE Utilisateurs ( id INT UNSIGNED AUTO_INCREMENT, pseudo VARCHAR(150) NOT NULL, email VARCHAR(150) NOT NULL, password VARCHAR(150) NOT NULL, date_inscription DATE, Articles_ecrits VARCHAR(150), PRIMARY KEY(id) ); CREATE TABLE Commentaires_article ( id INT UNSIGNED AUTO_INCREMENT, article_id INT UNSIGNED, texte_article TEXT NOT NULL, date_creation DATE, PRIMARY KEY(id) );
PAr avance merci pour ton point de vue.
Hum ok,
La table categorie_article est mal construite.
- il manque un id primaire
- dans ton formulaire tu inverses les noms.
Donc pour moi, il faudrait changer ta table comme ceci pour être correcte
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 CREATE TABLE Categorie_article ( id_categorie_article INT AUTOINCREMENT categorie_id INT UNSIGNED, article_id INT UNSIGNED, pseudo VARCHAR(150) NOT NULL, titre_article VARCHAR(150) NOT NULL, texte_article TEXT NOT NULL, date_redaction DATE, PRIMARY KEY (id_categorie_article) );
dans ton insert:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 $sql = "INSERT INTO categorie_article (categorie_id, pseudo, titre_article, texte_article, date_redaction) VALUES (?, ?, ?, ?, NOW())"; $requete = $bdd->prepare($sql); $requete->execute(array( $_POST['id_categorie'], $_POST['pseudo'], $_POST['titre_article'], $_POST['texte_article'] )); }
Là cela devrais fonctionner
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde
Mes Articles/Critiques :
Merise - Guide pratique
PHPExcel
PostgreSQL : Administration et exploitation d'une base de données
PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle
@mrc_AO
Inutile de citer un message complet pour y répondre !
Tu m'obliges à modifier tous tes messages !!
my bad ...
Ok désolé Jreau, j'apprends également à me servir de cet excellent forum
Aussi, merci pour tes interventions précédentes qui m'ont particulièrement aidé.
MaitrePylos,
ça y est, enfin ça marche !!!
merci pour ton intervention et encore merci à Jreau qui m'a également bien aidé.
Voici pour simple feedback et aussi parce que j'ai une question sur la théorie de mon exercice :
voici les tables que l'on m'a donné dans mon intitulé :
J'ai modifié la table 'Categorie_article' initialement donnée comme suit et ai supprimé un envoi de donnée de mon formulaire - ($_POST['id_categorie']) qui ne renvoyait rien - pour pouvoir l'incrémenter avec ma page article.php via traitement.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE TABLE Categorie ( id INT UNSIGNED AUTO_INCREMENT, nom VARCHAR(150) NOT NULL, PRIMARY KEY(id) ); CREATE TABLE Categorie_article ( categorie_id INT UNSIGNED, article_id INT UNSIGNED, PRIMARY KEY (categorie_id, article_id) );
Ma question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE TABLE Categorie_article ( id_categorie_article INT AUTO_INCREMENT, categorie_id INT UNSIGNED, article_id INT UNSIGNED, pseudo VARCHAR(150) NOT NULL, titre_article VARCHAR(150) NOT NULL, texte_article TEXT NOT NULL, date_redaction DATE, PRIMARY KEY (id_categorie_article) );
aurait-il été possible de faire fonctionner la même table 'Categorie_article' en ayant les deux PRIMARY KEY (categorie_id, article_id)) que j'avais initialement ?
Si oui, j'imagine qu'il m'aurait fallu créer une table annexe, dans laquelle j'aurai enregistré mes articles, mes pseudos, mes titres, qui aurait figuré une colonne 'id' auto incrémentée et qui aurait fait appel via un alias et par procédé de jointure aux deux tables de l'énoncé ?
Non ?
Merci encore et encore pour vos aides et si vous avez un avis sur cette question il m'intéresse.
Oui, il aurait simplement fallut gérer une autoincrémentation de la colonne article_id.
Comme ça la concatenation de categorie_id et article_is seront unique alors pas de soucis.
Sans incrémentation , il aurait juste fallut une sous requête.
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 insert into categorie_article(categorie_id,article_id) SELECT $_POST[categorie_id],MAX(article_id)+1 FROM categorie_article.
A vérifier
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde
Mes Articles/Critiques :
Merise - Guide pratique
PHPExcel
PostgreSQL : Administration et exploitation d'une base de données
PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle
All good MaitrePylos,
merci pour tout. Je vais essayer de ce pas et ne manquerait pas de te/vous tenir au courant.
Bonne journée à la "dream team".
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager