Partage

Ajouter un bloc depuis un site

Sujet résolu
16 mai 2018 à 9:04:42

Ton raisonnement se tient. Rien ne t'empêche de faire une page pour chaque groupe et leurs composants en attendant d'avoir trouvé la bonne façon de faire pour ton "challenge" et revenir plus tard.

Je pense même que tu risques de trouver par toi-même après avoir fini tes pages dédiées pour chaque groupe.

Pour ce qui est du problème en lui-même :

Le but n'est pas de mettre plusieurs composants dans une seule ligne de ta table contenant les groupes mais de créer plusieurs composants dans une table rien que pour eux et leur donner un numéro de groupe à chacun.

Du coup dans ta table composant tu aurais les champs suivants :

  • id : pour identifier ton composant
  • name : le nom du composant (en BDD on préfère donner des noms de colonnes en anglais)
  • group_id : le groupe attribué à ton composant

Comme ça tu pourras récupérer un composant par son propre id mais tu pourras récupérer une liste par un id de groupe.

Quelques images pour te mettre sur la voie :

-
Edité par PulsarFox 16 mai 2018 à 9:06:28

Anciennement Wargeek83 | Plumia.net
16 mai 2018 à 17:36:50

J'ai ça mais rien ne se passe :

        <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 test VALUES (NULL, NULL, :groupe_id)');
	
						$groupe_id = !empty($_POST['groupe_id']) ? $_POST['groupe_id'] : NULL;
						
						$pdoStat->bindValue(':groupe_id', $groupe_id, PDO::PARAM_STR);
	
						$pdoStat->execute();
						
					
					}
			
					?>
		
		<input type="submit" value="Valider">
		
		</form>

Mais avec cette méthode je pourrais quand même assigner un composant à plusieurs groupes ?

16 mai 2018 à 18:45:04

Dans ce cas, il va falloir dédier une troisième table pour les relations (group_component) qui contiendra un id en clé primare, l'id du groupe (group_id) et l'id du composant (component_id).

Ton INSERT n'est pas valide, il manque quelque chose. ^^

-
Edité par PulsarFox 16 mai 2018 à 18:45:59

Anciennement Wargeek83 | Plumia.net
16 mai 2018 à 18:47:14

Super j'essayes ça ce soir, merci !
16 mai 2018 à 23:52:19

J'ai crée une nouvelle table, ajouté les accents et toujours aucun effet dans phpmyadmin:euh:

        <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 `group_components` (`id`, `group_id`, `component_id`) VALUES (NULL, NULL, :component_id)');
	
						$component_id = !empty($_POST['component_id']) ? $_POST['component_id'] : NULL;
						
						$pdoStat->bindValue(':component_id', $component_id, PDO::PARAM_STR);
	
						$pdoStat->execute();
						
					
					}
			
					?>
		
		<input type="submit" value="Valider">
		
		</form>



-
Edité par Natalister 16 mai 2018 à 23:52:41

17 mai 2018 à 0:27:40

C'est mieux pour ton INSERT.

Quand t'as un doute sur une requête, essaye-la dans phpMyAdmin avant de la mettre dans un script. Tu pourras voir le résultat directement.

Par contre, ta façon de faire la chose va être différente. Il faudra faire une création en deux temps.

  • création du composant,
  • création de la relation entre le composant et son groupe.

Donc deux INSERT mais on verra plus tard pour le deuxième, on va essayer d'avoir un résultat pour le premier.

-
Edité par PulsarFox 17 mai 2018 à 0:30:55

Anciennement Wargeek83 | Plumia.net
17 mai 2018 à 0:37:51

Mais la création du composant je l'ai déjà faite (si c'est bien ce que je pense elle est vers la ligne 90, je te mets quand même toute ma page si jamais (je sais pas si c'est genânt de mettre des longs posts comme ça mais je sais pas mettre de spoilers :-°))

<html>
    <head>
        <meta charset="utf-8" />
		<meta 	name="viewport"
				content ="width-device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
			
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
        <link rel="stylesheet" href="styleajc.css" />
        <title>Matériel G092</title>
    </head>
	
<center><img src="materiel-g092.png" height="192" width="768" ></center>
<div id="menu">
  <ul id="onglets">
    <li><a href="Accueil.php"> Accueil </a></li>
	<li><a href="Liste-materiel.php"> Liste matériel </a></li>
    <li><a href="Materiel-par-groupe.php"> Matériel par groupes </a></li>
    <li><a href="Deco.html"> Déconnexion </a></li>
  </ul>
</div>

<body>

<div id="miseenpage">
	
<?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);
?>

	<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 `group_components` (`id`, `group_id`, `component_id`) VALUES (NULL, NULL, :component_id)');
	
						$component_id = !empty($_POST['component_id']) ? $_POST['component_id'] : NULL;
						
						$pdoStat->bindValue(':component_id', $component_id, PDO::PARAM_STR);
	
						$pdoStat->execute();
						
					
					}
			
					?>
		
		<input type="submit" value="Valider">
		
		</form>

<div id="g1">

<form action="ajoutercomposant.php" method="post">

	<p>
	
		<label for="nom">Ajouter un nouveau composant à la liste : </label>
		
		<br>
	
		<p><input id="nom" type="nom" name="nom">
		
		<input type="submit" value="Valider"></p
	
	</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();
	
?>

<div id="texte-g1">

	<?php foreach ($noms as $nom): ?>
	
		<ul><li> <?= $nom['nom'] ?> 	<a href="supprimercompo.php?numCompo=<?= $nom['id'] ?>">Supprimer</a> </ul></li>
	
	<?php endforeach; ?>
	
</div>
</div>
</div>
</body>

</html>

Et ma page ressemble à ça :



-
Edité par Natalister 17 mai 2018 à 0:44:19

17 mai 2018 à 11:23:53

Ouais, tout à fait. Je te dis juste que maintenant, pour l'attribuer à un groupe il faudra créer une entrée (ligne dans ta table SQL) sur la table group_components avec l'id du composant et l'id du groupe auquel tu voudras attribuer ce composant nouvellement créé. 

Je te donne une astuce, lastInsertId c'est une fonction de PDO (méthode en POO) qui te permet de récupérer la dernière ligne insérée. Donc l'id de ton composant à insérer dans la table group_components. T'es encore là ? :-°

Au passage, tu n'es pas obligé de recréer une connexion PDO à chaque requête. Il suffit de la déclarer une seule fois.

-
Edité par PulsarFox 17 mai 2018 à 11:25:31

Anciennement Wargeek83 | Plumia.net
17 mai 2018 à 15:15:56

Mais ça je l'ai fais aussi !

Je pense avoir compris oui mais pour la mettre où cette fonction ? Dans la ligne 75 ?

D'accord merci je savais pas !

17 mai 2018 à 19:40:12

Ouaip
Anciennement Wargeek83 | Plumia.net
17 mai 2018 à 22:25:49

Bon j'ai essayé ça et ça marche toujours pas :

	<?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 `group_components` (`id`, `group_id`, `component_id`) VALUES (NULL, NULL, :component_id)');
	
						$component_id = !empty($_POST['component_id']) ? $_POST['component_id'] : NULL;
						
						$pdoStat->bindValue(':component_id', $component_id, PDO::PARAM_STR);
	
						$pdoStat->execute();
						
						$id_nouveau = $objetPdo->lastInsertId();
						
						echo $id_nouveau;
						
					}
			
					?>

Il faut que je rende le projet à la fin du week-end et là je sèche vraiment, hier j'ai dormi que 2h (c'est pas bien je sais :-°) donc je pense que je vais laisser comme ça, tant pis, et j'essayerais d'expliquer à l'oral comment faire sans trop rentrer dans les détails.. :soleil:

-
Edité par Natalister 17 mai 2018 à 23:41:44

18 mai 2018 à 8:53:23

T'as essayé la requête dans phpMyAdmin ?

Je pense que t'auras une erreur avec ça.

-
Edité par PulsarFox 18 mai 2018 à 8:54:25

Anciennement Wargeek83 | Plumia.net
18 mai 2018 à 17:57:08

En effet, ça m'affichait une erreur (il voulait pas que group_id soit nul) du coup j'ai essayé ça :

<?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 `group_components` (`id`, `group_id`, `component_id`) VALUES (NULL, :group_id, :component_id)');
	
						$component_id = !empty($_POST['component_id']) ? $_POST['component_id'] : NULL;
						
						$group_id = !empty($_POST['group_id']) ? $_POST['group_id'] : NULL;
						
						$pdoStat->bindValue(':component_id', $component_id, PDO::PARAM_INT);
						
						$pdoStat->bindValue(':group_id', $group_id);
	
						$pdoStat->execute();
						
						$id_nouveau = $objetPdo->lastInsertId();
						
						echo $id_nouveau;
						
					}
			
					?>



Mais toujours sans succès, puis ça :

		<?php	if (!empty($_POST))
					{
						// Pour voir le contenu du POST
						// var_dump($_POST);
 
						$objetPdo = new PDO('mysql:host=localhost;dbname=projet;charset=utf8','root','');
						
						$group_id = $objetPdo->lastInsertId();
	
						$pdoStat = $objetPdo->prepare('INSERT INTO `group_components` (`id`, `group_id`, `component_id`) VALUES (NULL, $group_id, :component_id)');
	
						$component_id = !empty($_POST['component_id']) ? $_POST['component_id'] : NULL;
						
						$group_id = !empty($_POST['group_id']) ? $_POST['group_id'] : NULL;
						
						$pdoStat->bindValue(':component_id', $component_id, PDO::PARAM_INT);
						
						$pdoStat->bindValue(':group_id', $group_id, PDO::PARAM_INT);
	
						$pdoStat->execute();
						
					}
			
					?>


C'est vrai que ça aurait été mieux que tout soit fonctionnel mais bon je suis quand même content de ce que j'ai fais ^^

18 mai 2018 à 21:32:38

$group_id = $objetPdo->lastInsertId();

Pour mettre ça faut avoir fait une requête d'insertion du composant et ce sera plutôt $component_id.

Parce que dans la logique il me semble que tu créés un composant avant de créer la relation non ? Pas un groupe.

En gros je te rappelle la façon de procéder :

  • J'insère le composant en BDD
  • Je récupère son id avec le $objetPdo->lastInsertId()
  • J'insère la relation du groupe (qui existe déjà) et du composant que tu viens de créer

Petite astuce, t'es pas obligé de mettre "id" dans ton INSERT, l'auto-increment le gère solo.

Essaye de mettre des chiffres randoms dans tes bindValue() à la place des variables et si ça marche, c'est que c'est bien ton $group_id qui foire.

Tu peux être fier de toi je pense, t'as bien progressé.

Je vais essayer de t'aider un peu plus fréquemment pour que tu le sorte avant dimanche ce putain de projet.

-
Edité par PulsarFox 19 mai 2018 à 9:14:06

Anciennement Wargeek83 | Plumia.net
19 mai 2018 à 9:43:29

Quand tu dis "J'insère le composant en BDD" tu parles dans quelle table ? La group_components ?

Et j'ai essayé de mettre des chiffres randoms et ça m'affiche toujours une erreur >_<

	<?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 `group_components` (`group_id`, `component_id`) VALUES (:group_id, :component_id)');
	
						$component_id = !empty($_POST['component_id']) ? $_POST['component_id'] : NULL;
						
						$group_id = !empty($_POST['group_id']) ? $_POST['group_id'] : NULL;
						
						$pdoStat->bindValue(2, PDO::PARAM_INT);
						
						$pdoStat->bindValue(3, PDO::PARAM_INT);
	
						$pdoStat->execute();
						
					}
			
					?>



19 mai 2018 à 13:07:33

Je voulais dire comme ça

$pdoStat->bindValue(':group_id', 1, PDO::PARAM_INT);

La table où tu mets tes composants. group_components sert uniquement à lier un composant à un groupe. Si je dis pas de bêtise, la tienne elle s'appelle test ? :-°

Anciennement Wargeek83 | Plumia.net
20 mai 2018 à 15:33:00

Ca m'affiche toujours la même erreur >_<:ange:
21 mai 2018 à 12:23:12

Envoi ton code.
Anciennement Wargeek83 | Plumia.net
21 mai 2018 à 14:26:06

<html>
    <head>
        <meta charset="utf-8" />
		<meta 	name="viewport"
				content ="width-device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
			
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
        <link rel="stylesheet" href="stylempg.css" />
        <title>Matériel G092</title>
    </head>

    <body>
	
<center><img src="materiel-g092.png" height="192" width="768" ></center>
<div id="menu">
  <ul id="onglets">
    <li><a href="Accueil.php"> Accueil </a></li>
	<li><a href="Liste-materiel.php"> Liste matériel </a></li>
    <li class="active"><a href="Materiel-par-groupe.php"> Matériel par groupes </a></li>
    <li><a href="Deco.html"> Déconnexion </a></li>
  </ul>
</div>
<ul>

<form action="Materiel-par-groupe.php" method="post">

	<br>

	<div id="ajoutergroupe">
	
		<label for="groupe">Ajouter un groupe : </label>
	
		<input id="groupe" type="texte" name="groupe"> <input type="submit" value="Valider">
	
	</div>

</form>



<?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> 
			
			<br><br> <?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();
	
?> <div id="texte-g1">
 
	<?php foreach ($noms as $nom): ?>
	
		<ul> <?= $nom['nom'] ?> 	</ul>
	
	<?php endforeach; ?>
	
	<?php endforeach; ?>



</div>
</div></li>

<?php 

	$objetPdo = new PDO('mysql:host=localhost;dbname=projet;charset=utf8','root','');

	$pdoStat = $objetPdo->prepare('SELECT * FROM group_components ORDER BY id ASC');
	
	$pdoStat->execute();
	
	$compos = $pdoStat->fetchAll();
	
?> <div id="texte-g1">
 
	<?php foreach ($compos as $compo): ?>
	
		<ul>  	</ul>
	
	<?php endforeach; ?>


    </body>
</html>
21 mai 2018 à 15:44:12

Je te le redis mais il suffit de créer une seule fois $objetsPdo en début de script sur chaque page.

Ca devrait marcher ça.

Au pire, créé-toi un script juste pour ce test, ça t'évitera de polluer les autres en faisant des tests.

<?php    
 
     $objetPdo = new PDO('mysql:host=localhost;dbname=projet;charset=utf8','root','');
         
     $pdoStat = $objetPdo->prepare('INSERT INTO `group_components` SET group_id = :group_id, component_id = :component_id'); // Je trouve ça plus clean
                     
     $pdoStat->bindValue(':group_id', 2, PDO::PARAM_INT);
                     
     $pdoStat->bindValue(':component_id', 3, PDO::PARAM_INT);
 
     $pdoStat->execute();



-
Edité par PulsarFox 21 mai 2018 à 15:46:13

Anciennement Wargeek83 | Plumia.net
21 mai 2018 à 16:49:15

Oui je suis en train de modifier la synatxe, j'ai modifié, merci !

Oui super ça marche mais du coup dois remplacer 2 et 3 par lastInsertId() ?

-
Edité par Natalister 21 mai 2018 à 17:00:51

21 mai 2018 à 17:19:54

Pour faire plus simple un petit <iframe width="" height="" src="" frameborder="0" allowfullscreen></iframe> et une petite redimention ne ferait pas l'affaire :-°
21 mai 2018 à 18:10:31

Il faut que j'ai rendu le projet pour 20h donc je ne pense pas que on aura le temps de finir donc si jamais tu vois ce message avant, ne te casse pas la tête à chercher, à moins que tu penses que ce soit rapidement finissable :D. En tout cas, merci pour tout, tu m'as grandement aidé et ma note de BAC dépendra en bonne partie de toi !

-
Edité par Natalister 21 mai 2018 à 18:11:00

22 mai 2018 à 16:05:30

Les iframe c'est le mal.

Il aurait fallut prendre le lastinsertid() pour le composant fraichement créé et l'id du group que tu aurais choisi avec un <select>.

J'espère que ça se passera bien pour ton projet.

Quand tu auras fini je te posterai le code que j'aurais fait de mon côté si tu veux. Ça te fera un corrigé.

Anciennement Wargeek83 | Plumia.net
23 mai 2018 à 21:55:33

Bon beh voilà, ça y est je suis passé et je pense avoir plutôt réussi :)

J'aurais pas ma note avant les résultats du bac mais je suis quand même vachement content de moi, de ma progression, sachant qu'on part de 0, on était les seuls à faire un projet en HTML (oui on était 3 mais avec des parties séparées ;)) car on avait fait aucun cours dessus, tous les autres on fait du Javascool donc on aura peut-être des points pour l'originalité :p

En tout cas, un énorme merci à toi pour sans qui une immense partie de ce projet aurait pas pu être réalisée !

23 mai 2018 à 22:19:41

PulsarFox a écrit:

Les iframe c'est le mal.

Il aurait fallut prendre le lastinsertid() pour le composant fraichement créé et l'id du group que tu aurais choisi avec un <select>.

J'espère que ça se passera bien pour ton projet.

Quand tu auras fini je te posterai le code que j'aurais fait de mon côté si tu veux. Ça te fera un corrigé.

je trouve pas ^^ sa fait un peu moche mais si tu t'y connais pas

Il y a environ 12 heures

@Natalister Ça marche. Du coup, est-ce que tu comptes finir ce projet ou c'était simplement pour faire l'exercice ? Oublie pas de me donner ta note quand tu l'auras. ^^



-
Edité par PulsarFox il y a environ 12 heures

Anciennement Wargeek83 | Plumia.net
Il y a 39 minutes

Je vais voir avec mon prof si je le finis ou non parce qu'il était intéressé pour le mettre en place l'année prochaine donc je te tiendrais jus :)

Ça sera pas avant juillet malheureusement, résultats du bac :D

Ajouter un bloc depuis un site

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