1 autre formulaire ou il y a une case coordonnée pour ajouter toutes les informations d'une personne
j'ai donc créé une jointure entre deux bdd le problème, lorsque j'envoie mon formulaire la valeur qui été dans coordonnée avant l'envoi reste, et ma nouvelle s'ajoute en plus, alors que je la veux pas en mémoire comment c'est possible. avez-vous déjà eu ce problème ?
<?php
// Redirection du visiteur vers la page du minichat
// Récupération des 10 derniers messages
$reponse = $bdd->query('SELECT image, commercial, ref, designation, marque, prix, MAJ FROM test ORDER BY ID DESC LIMIT 1');
// Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
while ($donnees = $reponse->fetch()){
echo '<img src="uploads/'.$donnees['image'].'" />';
echo "</td><td> ";
echo '' .htmlspecialchars($donnees['ref']) . '</p>';
echo "</td><td> ";
echo '' .htmlspecialchars($donnees['designation']) . '</p>';
echo "</td><td> ";
echo '' .htmlspecialchars($donnees['marque']) . '</p>';
echo "</td><td> ";
$reponse = $bdd->query('SELECT t.commercial nom_commercial, c.nom nom_contact, c.prenom prenom_contact, c.mail mail_contact, c.telephone telephone_contact, c.entreprise entreprise_contact
FROM contact c
INNER JOIN test t
ON t.ID_proprietaire = c.ID');
while ($donnees = $reponse->fetch()){
echo $donnees['nom_contact']; echo '-';
echo $donnees['prenom_contact']; echo '<br />';
echo $donnees['entreprise_contact']; echo '<br />';
echo $donnees['mail_contact']; echo '<br />';
}
$reponse->closeCursor();
echo "</td><td> ";
echo '' .htmlspecialchars($donnees['prix']) . '</p>';
echo "</td><td> ";
echo '' .htmlspecialchars($donnees['MAJ']) . '</p>';
}
$reponse->closeCursor();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Notes</title>
</head>
<body>
<?php
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0)
{
// Testons si le fichier n'est pas trop gros
if ($_FILES['monfichier']['size'] <= 1000000)
{
// Testons si l'extension est autorisée
$infosfichier = pathinfo($_FILES['monfichier']['name']);
$extension_upload = $infosfichier['extension'];
$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
if (in_array($extension_upload, $extensions_autorisees))
{
// On peut valider le fichier et le stocker définitivement
$namefile= basename($_FILES['monfichier']['name']);
move_uploaded_file($_FILES['monfichier']['tmp_name'], 'uploads/' . $namefile);
try{
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
}
catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
// Insertion du message à l'aide d'une requête préparée
$req = $bdd->prepare('INSERT INTO test (image, ref, designation, marque, prix, ID_proprietaire, MAJ ) VALUES(?, ?, ?, ?, ?, ?, NOW())');
$req->execute(array($namefile, $_POST['ref'], $_POST['designation'], $_POST['marque'], $_POST['prix'], $_POST['ID_proprietaire']));
// Redirection du visiteur vers la page du minichat
header('Location:formulaire.php');
}
}
}
?>
</body>
</html>
voici la partie insertion
edit : oui du coup c'est exactement ça j'ai mes valeurs qui s'accumule mais du coup si je comprend bien la fonction ajax elle ne sera pas utile pour ce code. je vais faire recharger la page à chaque fois
Si j'ai bien compris en tout ca maintenant ça me paraît logique j'ai supprimé le commercial dans cette ligne la :
Mais mon problème persiste toujours.
edit : Bonjour , j'ai deux formulaires
1 donnant des informations sur une personne
1 autre formulaire ou il y a une case coordonnée pour ajouter toutes les informations d'une personne j'ai donc créé une jointure entre deux bdd le problème, lorsque j'envoie mon formulaire la valeur qui été dans coordonnée avant l'envoi reste en mémoire en plus de ma nouvelle, le problème vient sûrement de l'insertion je vois pas comment tourner les choses j'ai essayé:
-de travailler avec une LIMIT dans mon INSERT mais je suis obligé de mettre une variable à l'intérieure car je ne veux pas forcément la première ou la dernière. j'ai donc essayé de mettre une variable dans mon LIMITE comme $_POST[id] mais j'ai un message d'erreur
Parse error: syntax error, unexpected '$_POST' (T_VARIABLE) in D:\baptiste\wamp\wamp\www\FG\formulaire_produit.php on lin
Donc j'ai essayé avec la concaténation LIMIT '.$_donnees['id'].' mais je me retrouve avec une variable indéfinie et je ne sais même pas si je suis sur le bon chemin. j'ai essayé de mettre un if dans mon while ($donnees = $reponse->fetch()){} du style if($donnees=1) {affiche moi ça et $donnees=2} pour pouvoir réussir à sortir mais je ne sais pas si le while pose problème .. je tourne en rond
lorsque j'envoie mon formulaire la valeur qui été dans coordonnée avant l'envoi reste, et ma nouvelle s'ajoute en plus, alors que je la veux pas en mémoire
Moi, comme je comprends ça, je pense à une mise à jour plutôt qu'à une (nouvelle) insertion.
Ou alors il faut une notion "d'actualité", soit une information en base qui dit quelle information est valable actuellement.
Si jamais, le code, c'est pas en image. J'aimerais voir vos têtes quand, alors que vous téléchargez de la musique, vous vous retrouveriez avec des partitions.
L'idée du LIMITE '.$_Donnees['VARIABLE'].' est mettre de coté pour actualiser ? en effet la c'est une mise à jour je récupère et affiche tout les id de mon champs ID_ propriétaire pour l'instant et il faut que je trouve un moyen d'afficher seulement le dernier enregistré
Si c'est seulement le dernier enregistré à afficher et que tu dois conserver les autres en base de données pour l'historique, alors tu peux effectivement trier par date d'insertion descendante (voire l'ID) et limiter le retour à un seul résultat lors de la sélection, cela n'a aucun sens lors d'une insertion.
Mon dernier paragraphe d'avant concerne la ligne de code fournie sous forme d'image. Elle m'est illisible et donc inutile.
Mon dernier paragraphe d'avant concerne la ligne de code fournie sous forme d'image. Elle m'est illisible et donc inutile.
J'avais mal compris je vais afficher mon code pour mieux situé le problème:
voici la partie formulaire :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Mini-chat</title>
<style>
form{
text-align:center;
}
</style>
</head>
<body>
<form action="reception_produit.php" method="post" enctype="multipart/form-data">
<div id="formulaire">
<!-- Définition du tableau -->
<center><table border="1" id="formulaire" style="text-align:center">
<!-- Balise caption pour définir le titre d'un tableau -->
<h1 style=" font-family: serif; background: #0066CC none; color: white; border: 3px dotted #9999FF; padding: 0.3em; text-align: center; letter-spacing: 0.3em;">FORMULAIRE</h1>
<!-- Corps du tableau -->
<tbody>
<!-- La balise tr défini une ligne du tableau -->
<tr rowspan="2"> <th>Image</th><th>Numéro_fournisseur</th><th>Choix_famille</th><th>ref</th><th>Désignation</th><th>marque</th><th>Prix</th></th></tr>
<tr id="formulaire"> </tr>
<!-- La balise td défini une cellule du corps du tableau -->
<tr>
<td> <label for="image"></label><input type="file" name="monfichier" /></td>
<td> <label for="personne">
<select name="id">
<?php
try{
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
}
catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
$reponse = $bdd->query('SELECT * FROM contact');
while ($donnees = $reponse->fetch())
{
?>
<option value="<?php echo $donnees['id']; ?>"> <?php echo"".$donnees['nom']." ".$donnees['prenom'].""; ?></option>
<?php
}
?>
</select>
<td> <label for="famille">
<select name="nom_sous_type"><?php
$reponse = $bdd->query('SELECT t.nom nom_type, s.nom nom_sous_type
FROM sous_type s
INNER JOIN type t
ON t.ID = s.id_type');
$type='';
?> <optgroup label=""> <?php
while ($donnees = $reponse->fetch()){
if($type != $donnees['nom_type']){
?> </optgroup> <optgroup label="<?php echo $donnees['nom_type']; ?>"> <?php
}
?> <option value=<?php echo $donnees['nom_sous_type'];?>> <?php echo $donnees['nom_sous_type'];?></option> <?php
$type = $donnees['nom_type'];
}
?>
</optgroup>
</select>
<td> <label for="ref"></label><input type="text" name="ref" /></td>
<td> <label for="designation"></label><input type="text" name="designation" /></td>
<td> <label for="marque"></label><input type="text" name="marque" /></td>
<td> <label for="prix"></label><input type="number" name="prix" /></td>
<td> <label for="submit"></label><input type="submit" value="Envoyer le fichier" /></td>
</tr>
</tbody>
</table> </center>
</div>
</form>
<?php
try{
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
}
catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
?>
<div id="listeProduit">
<!-- Définition du tableau -->
<center><table border="1" id="tabListeProduit" style="text-align:center">
<!-- Balise caption pour définir le titre d'un tableau -->
<h1 style=" font-family: serif; background: #0066CC none; color: white; border: 3px dotted #9999FF; padding: 0.3em; text-align: center; letter-spacing: 0.3em;">Outillage de mise à la terre</h1>
<!-- Corps du tableau -->
<tbody>
<!-- La balise tr défini une ligne du tableau -->
<tr rowspan="2">
</tr>
<th rowspan="2" width="10%">image</th>
<th rowspan="2" width="10%">Ref</th>
<th rowspan="2" width="10%">Désignation</th>
<th rowspan="2" width="10%">marque</th>
<th rowspan="2" width="10%">commercial</th>
<th rowspan="2" width="5%">Prix</th></tr>
<th rowspan="2" width="7%">Date de la MAJ</th></tr>
<tr id="tabListeProduitEntete">
</tr>
<!-- La balise td défini une cellule du corps du tableau -->
<tr><td>
<?php
// Redirection du visiteur vers la page du minichat
// Récupération des 10 derniers messages
$reponse = $bdd->query('SELECT image, ref, designation, marque, prix, MAJ FROM test ORDER BY ID DESC LIMIT 1');
// Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
while ($donnees = $reponse->fetch()){
echo '<img src="uploads/'.$donnees['image'].'" />';
echo "</td><td> ";
echo '' .htmlspecialchars($donnees['ref']) . '</p>';
echo "</td><td> ";
echo '' .htmlspecialchars($donnees['designation']) . '</p>';
echo "</td><td> ";
echo '' .htmlspecialchars($donnees['marque']) . '</p>';
echo "</td><td> ";
echo "</td><td> ";
echo '' .htmlspecialchars($donnees['prix']) . '</p>';
echo "</td><td> ";
echo '' .htmlspecialchars($donnees['MAJ']) . '</p>';
}
$reponse->closeCursor();
$reponse = $bdd->query('SELECT t.commercial nom_commercial, c.nom nom_contact, c.prenom prenom_contact, c.mail mail_contact, c.telephone telephone_contact, c.entreprise entreprise_contact
FROM contact c
INNER JOIN test t
ON t.ID_proprietaire = c.ID');
while ($donnees = $reponse->fetch()){
echo '' .htmlspecialchars($donnees['nom_contact']) . '</p>';
echo '' .htmlspecialchars($donnees['prenom_contact']) . '</p>';
echo '' .htmlspecialchars($donnees['entreprise_contact']) . '</p>';
echo '' .htmlspecialchars($donnees['mail_contact']) . '</p>';
}
?>
</td></tr>
</tbody>
</table></center>
</div>
</body>
</html>
voici la partie reception :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Notes</title>
</head>
<body>
<?php
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0)
{
// Testons si le fichier n'est pas trop gros
if ($_FILES['monfichier']['size'] <= 1000000)
{
// Testons si l'extension est autorisée
$infosfichier = pathinfo($_FILES['monfichier']['name']);
$extension_upload = $infosfichier['extension'];
$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
if (in_array($extension_upload, $extensions_autorisees))
{
// On peut valider le fichier et le stocker définitivement
$namefile= basename($_FILES['monfichier']['name']);
move_uploaded_file($_FILES['monfichier']['tmp_name'], 'uploads/' . $namefile);
try{
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
}
catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
// Insertion du message à l'aide d'une requête préparée
$req = $bdd->prepare('INSERT INTO test (image, ref, designation, marque, prix, ID_proprietaire, choix_famille, MAJ) VALUES(?, ?, ?, ?, ?, ?, ?, NOW())');
$req->execute(array($namefile, $_POST['ref'], $_POST['designation'], $_POST['marque'], $_POST['prix'], $_POST['id'], $_POST['nom_sous_type']));
// Redirection du visiteur vers la page du minichat
header('Location:formulaire_produit.php');
}
}
}
?>
</body>
</html>
Mon but est de pouvoir choisir un nom-prenom dans la liste déroulante du formulaire, et afficher toutes les coordonnées de la personne choisie.
ma table pour les contacts peux s'agrandir par le biais d'un autre formulaire pour ajouter des contactes celui ci est liée à la liste déroulante
edit: j'ai pour idée de remplacer
while ($donnees = $reponse->fetch())
par un if pour avoir une seul valeur et pas afficher toutes les valeurs de ma table ?
Les lignes 78 à 85 sont inutiles si c'est bien un seul fichier et non plusieurs codes "fusionnés" ici.
J'essaie toujours de comprendre : tu as un formulaire qui te permet de choisir une personne par ses nom et prénom, et tu aimerais que, sur la même page, les détails s'affichent en-dessous ?
Voici une représentation de mon formulaire Numéro_fournisseur représente le nom-prenom de la personne
ce qu'il y a dans la case date de la MAJ sont tout les information sur la personne comme on peux voir sur cette image:
Pour l'instant c'est dans la case Date de la MAJ mais plus tard ce sera mis à la ligne 123 de mon code car ça me pose un problème d'affichage si je le mets maintenant ligne 123 il ne s'affiche plus rien dans les champs "prix" et "date de la maj"
edit pour l'instant ca s'affiche en dessous ca me permet de voir si ça a fonctionné dans le futur on ne le vera plus on sera redirigé vers une autre page, pour plus d'information voilà ou le produit ira à la fin
OK, on revient avec la solution que tu avais creusée et que j'ai mentionnée :
BaptDam a écrit:
-de travailler avec une LIMIT
Ymox a écrit:
Si c'est seulement le dernier enregistré à afficher et que tu dois conserver les autres en base de données pour l'historique, alors tu peux effectivement trier par date d'insertion descendante (voire l'ID) et limiter le retour à un seul résultat lors de la sélection, cela n'a aucun sens lors d'une insertion.
Maintenant, quel est le problème exact avec cette solution ?
Le problème avec limite c'est que je vois pas comment appelé une personne ciblée dans ma table, c'est à dire quand je suis dans mon formulaire et que je choisie dans Numéro_fournisseur un choix de ma liste déroulante.
Comment je peux faire pour faire comprendre à mon programme que je veux uniquement celui que j'ai choisi dans ma liste déroulante et que je veux afficher "" nom prénom mail entreprise telephone"" quand j'affiche le formulaire complété
un produits a un contact , un contact a un ou plusieurs produits
senarion:
-créer un contact
-créer un produits en sélectionnant le contact
-afficher les caractéristique du produits et le coordonnées du contact
Tu ne vois pas comment afficher/sélectionner un enregistrement précis, donc ? Ou comment afficher/sélectionner plusieurs enregistrement selon un critère précis ? Critère que tu as lors de la soumission du formulaire ?
Pour n'avoir que certains champs et pas tous, il suffit de choisir ceux qu'on veut, hein. On le fait évidemment à l'affichage, mais en général on fait ça aussi dans la requête plutôt que de tout sélectionner et de n'en afficher qu'une partie.
Donc parmi les lignes 137 à 140 de ce code, tu fais le nettoyage. Et tu en profites pour le faire aussi dans la requête ligne 131, comme Quillian te l'avait fait remarquer.
On le fait évidemment à l'affichage, mais en général on fait ça aussi dans la requête plutôt que de tout sélectionner et de n'en afficher qu'une partie.
j'ai pas compris
j'affiche ici :
$reponse = $bdd->query('SELECT t.commercial nom_commercial, c.nom nom_contact, c.prenom prenom_contact, c.mail mail_contact, c.telephone telephone_contact, c.entreprise entreprise_contact
FROM contact c
INNER JOIN test t
ON t.ID_proprietaire = c.ID');
while ($donnees = $reponse->fetch()){
echo '' .htmlspecialchars($donnees['nom_contact']) . '</p>';
echo '' .htmlspecialchars($donnees['prenom_contact']) . '</p>';
echo '' .htmlspecialchars($donnees['entreprise_contact']) . '</p>';
echo '' .htmlspecialchars($donnees['mail_contact']) . '</p>';
}
Au passage, concaténer des chaînes vides ne sert pas à grand chose en PHP, sinon à rien.
c'est pour anticiper du texte mais je vais retirer les chaines vides ,
la j'affiche toutes les valeurs de ma bdd dans le champs ID_propriétaire. ?
je ne sais pas comment cibler un seul id j'ai essayé avec
$reponse = $bdd->query('SELECT t.commercial nom_commercial, c.nom nom_contact, c.prenom prenom_contact, c.mail mail_contact, c.telephone telephone_contact, c.entreprise entreprise_contact
FROM contact c
INNER JOIN test t
ON t.ID_proprietaire = c.ID WHERE ID_proprietaire = 'echo .$donnees['id'].'');
while ($donnees = $reponse->fetch()){
echo .htmlspecialchars($donnees['nom_contact']) . '</p>';
echo .htmlspecialchars($donnees['prenom_contact']) . '</p>';
echo .htmlspecialchars($donnees['entreprise_contact']) . '</p>';
echo .htmlspecialchars($donnees['mail_contact']) . '</p>';
}
mais j'ai une erreur :
Parse error: syntax error, unexpected 'echo' (T_ECHO) in D:\baptiste\wamp\wamp\www\FG\formulaire_produit.php on line 127
donc mon echo na surrement rien à faire ici
je ne sais plus quoi faire je comprend pas comment je peux reussir
j'ai essayé de nouveau cette methode mais toujours une erreur :
Erreur parse: erreur syntaxe, inattendue '' . ($donnees['' (T_CONSTANT_ENCAPSED_STRING) en D:\baptiste\wamp\wamp\www\FG\formulaire_produit.php sur la ligne 127
$reponse = $bdd->query('SELECT t.commercial nom_commercial, c.nom nom_contact, c.prenom prenom_contact, c.mail mail_contact, c.telephone telephone_contact, c.entreprise entreprise_contact
FROM contact c
INNER JOIN test t
ON t.ID_proprietaire = c.ID WHERE ID_proprietaire = echo '' .htmlspecialchars($donnees['nom_contact']) .''');
while ($donnees = $reponse->fetch()){
echo '' .htmlspecialchars($donnees['nom_contact']) . '</p>';
echo '' .htmlspecialchars($donnees['prenom_contact']) . '</p>';
echo '' .htmlspecialchars($donnees['entreprise_contact']) . '</p>';
echo '' .htmlspecialchars($donnees['mail_contact']) . '</p>';
}
Là il te manque des bases. Tu souhaites "ajouter une chaîne à une autre", pourtant.
Je vais arrêter de répondre aussi rapidement, j'ai l'impression que ça te bloque parce que tu attends la solution sans plus réfléchir. C'est aussi quelque chose qui peut transparaître dans la fréquence de tes réponses et éditions.
Pourquoi veux-tu refaire une insertion ici ? Normalement tu as déjà les informations vu que tu as sélectionné depuis une liste construite avec celles-ci…
Donc j'ai bien ce que je veux j'avance et je comprend mieux maintenant je ne veux pas écrire nom-prenom dans ma bdd test j'ai besoin d'écrire l'id car dans la liste déroulante on a le nom prenom pour savoir qui est la personne mais quand on la choisi et on fait envoyer. je dois pouvoir afficher le reste des informations sur cette personne il me faut donc stoker l'id de la personne dans la bdd
cette insertion elle me permet d'insérer les données de mon formulaire dans une table 'test' j'ai besoin de cette table pour pouvoir afficher mon tableau à la fin
je ne veux pas seulement afficher les données il faut que je l'ai garde en mémoire
je viens de reussir à afficher l'id dans ma table 'test':
<select name="ID_contact">
<?php
try{
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
}
catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
// $reponse = $bdd->query('SELECT * FROM contact');
$reponse = $bdd->query('SELECT t.commercial nom_commercial, c.nom nom_contact, c.prenom prenom_contact, c.mail mail_contact, c.telephone telephone_contact, c.entreprise entreprise_contact, c.ID ID_contact
FROM contact c
INNER JOIN test t
ON t.ID_proprietaire = c.ID ');
while ($donnees = $reponse->fetch()){
?>
<option value=<?php echo $donnees['ID_contact'];?>>
<?php echo $donnees['nom_contact'];?>
<?php echo "-";?>
<?php echo $donnees['prenom_contact'];?>
</option>
<?php
}
?>
</select>
OK, j'avais cru comprendre des premiers messages que tu ne voulais que choisir une personne dans le haut pour afficher des données dans le bas, mes excuses.
Il ne te reste donc qu'à afficher ce que tu viens d'enregistrer, d'accord. On en revient à la requête de sélection avec LIMIT.
× 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.
Il n'y a pas de question idiote, seulement une réponse idiote
Il n'y a pas de question idiote, seulement une réponse idiote
Il n'y a pas de question idiote, seulement une réponse idiote
Il n'y a pas de question idiote, seulement une réponse idiote