Premièrement, je souhaite m'excuser si un topic existe déjà à ce sujet mais je n'arrive pas a bien formuler ma recherche...
J'ai un projet avec le lycée pour lequel je dois faire un site en HTML. Je débute à peine et j'ai reussi à faire quelque blocs, seulement j'aimerais pouvoir en ajouter depuis le site internet. Je m'exprime très mal mais j'espère que les images parleront d'elles même, en clair je souhaiterais faire apparître un groupe 6 :
J'avais l'habitude de tester mes pages HTML en les lançant depuis mon dossier sur Chrome seulement les pages test de PHP que j'ai essayé ne fonctionnent pas, ma donnée ne s'affiche sur la page cible. Je me demandais si ça pouvait venir du fait que les pages ne soient pas hébergées, bien qu'elles se trouvent dans le même dossier sur mon disque dur ?
Pour faire court, en plus d'être un langage, PHP est un logiciel qui interprète le langage éponyme. Si tu n'as pas ce logiciel sur ta machine, le code n'est pas exécuté.
Il te faut donc installer une suite de logiciel tel que
WAMP (Apache ; MySQL ; PHP) pour Windows
MAMP pour Mac
XAMPP pour Linux
Je te conseille fortement de suivre le cours PHP/MySQL d'OC pour en savoir plus. D'autant plus que si tu aimes apprendre, ça pourrait te plaire.
PS : J'ai pris la liberté de te tutoyer, tu peux en faire autant. Etant donné que nous sommes une communauté, je te conseille de prendre cette habitude ici, ça fait plus amical.
J'y arrive vraiment pas... Ça fait une semaine que je cherche (surement mal) et je trouve vraiment pas la solution à mon problème. J'ai installé WAMP et je suis arrivé à quelque chose pour ajouter une case mais j'ai toujours des problèmes. En fait ma case est déjà crée avant même que je n'appuie sur valider donc je pense que je n'utilise pas la bonne méthode (je m'explique par un screen :
Moi, je souhaiterais pouvoir ajouter autant de cases que je souhaite (et les supprimer/modifier) mais sans que cela ne se voye au préalable (contour rouge sur le screen)...
Ton erreur te dis que lorsque tu ne postes pas ton formulaire, l'index "prenom" n'est pas défini.
Du coup, si on suit cette logique, tu dois faire en sorte que si $_POST['prenom'] est défini, tu l'affiches sinon tu ne fais rien. #messagecachépastrèscaché
Merci beaucoup pour votre aide, j'ai reussi mais seulement en envoyant le bloc sur une autre page. En l'envoyant sur la même page, je n'y arrive pas ça m'affiche toujours un rectangle (sans l'erreur cependant). Voici mon code, si la seule solution est de l'envoyer sur une autre page je m'en débrouillerais mais si vous avez une idée de solution, je suis preneur !
Le $_POST['prenom'] est le résultat de l'envoi du formulaire et contiendra la valeur du champ input du même nom. Du coup, ça serait plus $prenom = $_POST['prenom']. $_POST['prenom'] == $prenom va tester une égalité.
De plus, il y a une fermeture de balise </div> en trop par rapport au code que je vois. Autre chose, tu peux faire:
Le $_POST['prenom'] est le résultat de l'envoi du formulaire et contiendra la valeur du champ input du même nom. Du coup, ça serait plus $prenom = $_POST['prenom']. $_POST['prenom'] == $prenom va tester une égalité.
J'ai pas tout à fait compris je crois
Voici le screen, en clair, il m'affiche que les propriétés CSS
Et par supprimer j'entends pouvoir ajouter et supprimer autant de blocs que je veux (cf: mon tout premier screen avec les boutons ajouter/modifier groupe)
En gros, en validant le formulaire, la variable $_POST['prenom'] sera créée. Si dans le formulaire, j'ai écris "Marcel", $_POST['prenom'] vaudra "Marcel". En faisant $prenom = $_POST['prenom'] alors $prenom vaudrat "Marcel" aussi.
Pour interagir en temps réel et manipuler ta page HTML, je pense que JavaScript te sera plus utile que PHP.
Finalement, après nombreuses péripéties, j'ai réussi à faire afficher durablement dans le temps un texte que j'écris dans un formulaire (je m'explique :
Cependant, j'ai toujours pour projet de vouloir ajouter autant de groupes que je le souhaite mais je ne vois pas comment, en appuyant sur "OK" je puisse avoir une nouvelle ligne qui se crée (Ex : une ligne groupe 6, une ligne groupe 7, etc...) Tout en sachant que a tout moment, je voudrais pouvoir supprimer la ligne groupe 6...
Premièrement, merci de m'avoir poussé à chercher, en effet j'ai trouvé ma solution en utilisant le PDO et tout fonctionne . Cependant, comme il faut toujours qu'il y ait un problème ( ), lorsque j'applique les styles CSS que j'avais fait précemment, cela me regroupe tout sur un seul "bloc" or, je voudrais un "bloc" par nom, mais il me semble que ce soit impossible... Je viens quand même ici avec un léger espoir que tu ais une idée, voici mon code :
- un <br> = retour à la ligne dans un paragraphe <p>
- Il faut spécifier l'encodage dans ton DSN ( ton instance de connexion) sinon tu auras un souci d'affichage. Et ce quelque soit l'interclassement de ta table, enfin c'est un conseil...
Pour tes blocs de groupe, je te propose de modifier l'endroit où tu fais ta boucle. Plutôt que de le faire autour d'un <li> pourquoi ne pas la faire autour d'un bloc de groupe ?
- un <br> = retour à la ligne dans un paragraphe <p>
- Il faut spécifier l'encodage dans ton DSN ( ton instance de connexion) sinon tu auras un souci d'affichage. Et ce quelque soit l'interclassement de ta table, enfin c'est un conseil...
Pour tes blocs de groupe, je te propose de modifier l'endroit où tu fais ta boucle. Plutôt que de le faire autour d'un <li> pourquoi ne pas la faire autour d'un bloc de groupe ?
- Edité par PulsarFox il y a 19 minutes
C'est en grande partie grâce à toi et je t'en remercie beaucoup !
Je ne vois pas ce que tu veux dire par autour d'un bloc de groupe
<?php
$objetPdo = new PDO('mysql:host=localhost;dbname=projet;charset=utf8','root','');
$pdoStat = $objetPdo->prepare('INSERT INTO Nom_groupes VALUES (NULL, :groupe)');
$groupe = !empty($_POST['groupe']) ? $_POST['groupe'] : NULL;
$pdoStat->bindValue(':groupe', $groupe, PDO::PARAM_STR);
$pdoStat->execute();
?>
<?php
$objetPdo = new PDO('mysql:host=localhost;dbname=projet;charset=utf8','root','');
$pdoStat = $objetPdo->prepare('SELECT * FROM Nom_groupes ORDER BY id ASC');
$executeIsOk = $pdoStat->execute();
$groupes = $pdoStat->fetchAll();
?>
<?php foreach ($groupes as $groupe): ?>
<li id="groupes"><div id="g1"> <?= $groupe['groupes'] ?>
<a href="form_modification.php?numGroupe=<?= $groupe['id'] ?>">Modifier</a>
<a href="supprimer.php?numGroupe=<?= $groupe['id'] ?>">Supprimer</a>
<br><br><a href="ajoutercomposant.php?numGroupe=<?= $groupe['id'] ?>">Ajouter composant</a>
<?php endforeach; ?>
<div id="texte-g1">
<?php
$objetPdo = new PDO('mysql:host=localhost;dbname=projet;charset=utf8','root','');
$pdoStat = $objetPdo->prepare('SELECT * FROM test ORDER BY id ASC');
$executeIsOk = $pdoStat->execute();
$noms = $pdoStat->fetchAll();
?>
<?php foreach ($noms as $nom): ?>
<li id="groupes"><div id="g1"> <?= $nom['nom'] ?>
<a href="form_modification.php?numGroupe=<?= $nom['id'] ?>">Modifier</a>
<a href="supprimer.php?numGroupe=<?= $nom['id'] ?>">Supprimer</a>
<br><br><a href="ajoutercomposant.php?numGroupe=<?= $nom['id'] ?>">Ajouter composant</a>
<?php endforeach; ?>
</div>
</div></li>
Je me doute très fortement que ça doit être une erreur de mise en page, un peu comme les balises <li> que tu m'avais fait modifier mais je ne trouve pas d'où ça peut venir...
P.S : (Désolé pour la longeur du post mais j'ai peur de mal me faire comprendre )
Si je comprends bien, tu aimerais que la liste des composants s'affichent dans le groupe correspondant ? Si c'est le cas, il faut que tu places le foreach() de tes composants+ la requête SQL concernée à l'intérieur du foreach() de tes groupes.
Tu devrais arriver à une autre problématique juste après, je te penses capable de pouvoir surmonter ça avec quelques recherches mais si t'as besoin d'être aiguillé, je suis pas loin.
Par contre, fait gaffes, un id="" doit être unique en HTML sinon c'est une classe.
Oui, en effet j'y suis même arrivé tout seul avant même que tu ne me répondes
Mais comme tu me l'as prédis un problème se pose Ça m'affiche toute la liste dans chaque groupe, ce qui est logique mais là n'est pas le réel problème (enfin je crois )
J'ai lu les cours portant sur la jointure de table pour associer ma table des composants avec celle des groupes seulement, dans l'exemple du cours (celui-ci: https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/les-jointures-entre-tables), ils ne prennent pas en compte d'avoir un composant pour deux groupes (ex : le groupe 1 ET le 3 ont une arduino) dans l'exemple du cours, ça donnerait que 2 personnes ont Super Mario Bros...
Je continue toujours à y réfléchir mais en attendant ta réponse, je vais chercher comment assigner à mon bouton valider de la page ajoutercomposant le fait d'ajouter dans ma table avec les composants, l'iD de la table avec les groupes, en utilisant surement les "numGroupe" et $groupe['id'] (car si j'ai bien compris le cours, c'est bien ça que je dois faire )
Merci encore de toute ton aide, je sais pas trop comment te remercier car c'est sur que je n'aurais jamais été si proche de mon but sans toi!
Malheureusement, tu n'as pas de moyen de récupérer un groupe et tous ses composants en une seule requête SQL. Du moins pas en PHP + SQL classique. Si tu continues dans cette voie, ce sera qu'une question de temps.
Par exemple pour un composant d'Arduino ... :
id : 5
nom : Leonardo
groupe : Arduino
... je te recommande d'utiliser une condition SQL dans la requête situé dans le foreach() des groupes, qui ciblerai tous les composants de ce groupe. Si tu galères, hésite pas.
Je le fais avec plaisir, pas besoin de me remercier. Le simple fait de voir que tu progresses, ça me va.
Je comprends pas trop.. Il faudrait que je crée une autre ligne dans ma table que j'appellerais nom et où je stockerais des noms type "Leonardo" ou c'était juste un exemple par rapport au cours ?
Et pour mon bouton Valider je vois pas non plus quelle action lui assigner au final, là je sèche je crois
Je connais pas vraiment ta structure SQL mais en gros ta table test, qui à l'air de contenir tes composants, ressemble à ça si je dis pas de bétises :
id | nom | groupe
Pour ton bouton valider, tu devrais faire une requête d'insertion du composant. Dans ton action="" du form, il suffit de ne rien mettre voire même de zapper cet attribut pour effectuer un POST (d'envoyer les informations de ton formulaire) sur la même page. Et pour le traitement, effectuer une simple condition sur la variable $_POST du style :
<?php if (!empty($_POST))
{ // Pour voir ce que tu reçois (fonctionne avec toutes les variables) : var_dump($_POST);
// Je fais ma requête d'insertion SQL
// J'affiche un message qui dit que tout s'est bien passé
}
// Reste de la page avec les groupes etc ...
Non, c'est surement une connerie d'ailleurs mais j’ai deux tables :
---------------------------------------
Ok, j'essaye ça !
Edit : Mais je le mets où ce code ? Je suis désolé, je sais pas si c'est la fatigue ou si c'est plus complexe mais ça fait quelques nuits que je raccourci pour pouvoir finir alors je bloque un peu
if (!empty($_POST))
{
// Pour voir le contenu du POST
var_dump($_POST);
// Insertion dans la base SQL
// Affichage d'un message genre "Ajout du composant réussi"
}
// Le reste de ta page classique avec la liste des groupes contenant les composants ...
Non c'est une bonne chose pour tes deux tables, c'est comme ça qu'il faut faire.
Pour le code, tu le mets en début de script PHP et ça devrait le faire.
Petit conseil, ne pas négliger le sommeil. On dirait peut-être un vieux con mais le sommeil c'est ce qui permet de consolider tes connaissances. Mais je pense que tu le savais déjà. Bon ok ... Je faisais pareil.
Bon je vois pas la... Je comprends pas ce que je fais, ni si je le fais bien...
J'ai crée une nouvelle ligne dans ma table Nom_groupes appellée composant mais je ne vois toujours pas comment je vais pouvoir y mettre plusieurs composant dans une seule ligne Je t'envoie les screens mais là je bloque vraiment sur cette partie
<form action="ajoutercomposant.php" method="post">
<p>
<label for="nom">Ajouter un nouveau composant à la liste</label>
<input id="nom" type="nom" name="nom">
<input type="submit" value="Valider">
</p>
</form>
<?php
$objetPdo = new PDO('mysql:host=localhost;dbname=projet','root','');
$pdoStat = $objetPdo->prepare('INSERT INTO test VALUES (NULL, :nom)');
$nom = !empty($_POST['nom']) ? $_POST['nom'] : NULL;
$pdoStat->bindValue(':nom', $nom, PDO::PARAM_STR);
$pdoStat->execute();
?>
<?php
$objetPdo = new PDO('mysql:host=localhost;dbname=projet;charset=utf8','root','');
$pdoStat = $objetPdo->prepare('SELECT * FROM test ORDER BY id ASC');
$executeIsOk = $pdoStat->execute();
$noms = $pdoStat->fetchAll();
?>
<?php foreach ($noms as $nom): ?>
<ul> <?= $nom['nom'] ?> <a href="supprimercompo.php?numCompo=<?= $nom['id'] ?>">Supprimer</a> </ul>
<?php endforeach; ?>
<?php
$objetPdo = new PDO('mysql:host=localhost;dbname=projet','root','');
$pdoStat = $objetPdo->prepare('DELETE FROM test WHERE id=:num LIMIT 1');
$numCompo = !empty($_GET['numCompo']) ? $_GET['numCompo'] : NULL;
$pdoStat->bindValue(':num', $numCompo, PDO::PARAM_INT);
$pdoStat->execute();
$hostname = "localhost";
$username = "root";
$password = "";
$databaseName = "projet";
$connect = mysqli_connect($hostname, $username, $password, $databaseName);
$query = "SELECT * FROM `test` ORDER BY nom";
$result1 = mysqli_query($connect, $query);
?>
<!DOCTYPE html>
<html>
<head>
<title>Matériel G092</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<br><br><br>
<form method="post">
<label for="le_nom">Quel matériel ajouter au groupe ?</label><br><br>
<select name="le_nom" id="le_nom">
<?php while($row1 = mysqli_fetch_array($result1)):;?>
<option value="<?php echo $row1[0];?>"><?php echo $row1[1];?></option>
<?php endwhile;?>
</select>
<?php if (!empty($_POST))
{
// Pour voir le contenu du POST
// var_dump($_POST);
$objetPdo = new PDO('mysql:host=localhost;dbname=projet;charset=utf8','root','');
$pdoStat = $objetPdo->prepare('INSERT INTO Nom_groupes VALUES (NULL, :composant)');
$composant = !empty($_POST['composant']) ? $_POST['composant'] : NULL;
$pdoStat->bindValue(':composant', $composant, PDO::PARAM_STR);
$executeIsOk = $pdoStat->execute();
if($executeIsOk){
$message = 'Le contact a été ajouté dans la BDD';
}
else {
$message = "Echec de l'insertion";
}
// Affichage d'un message genre "Ajout du composant réussi"
}
echo $message; ?>
<input type="submit" value="Valider">
</form>
<br><br><br><a href="Materiel-par-groupe.php">Retour à la liste</a>
</body>
</html>
Edit : Si c'est infaisable ou trop compliqué, j'avais pensé à l'option d'au lieu d'afficher tous les groupes avec tous leurs composants sur une seule page, de faire des liens cliquables sur chaque Groupe et me servir du "?numGroupe" je sais pas si c'est peut-être plus faisable même si ça casserait un peu à l'intérêt de ma partie
× 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.
Pascal Prugna | Développeur Web
Pascal Prugna | Développeur Web
Pascal Prugna | Développeur Web
Pascal Prugna | Développeur Web
Pascal Prugna | Développeur Web
Pascal Prugna | Développeur Web
Pascal Prugna | Développeur Web
Pascal Prugna | Développeur Web
Pascal Prugna | Développeur Web
Pascal Prugna | Développeur Web
Pascal Prugna | Développeur Web
Pascal Prugna | Développeur Web
Pascal Prugna | Développeur Web