8795 sujets

Développement web côté serveur, CMS

Bonjour,

me voilà dans un nouveau projet!
Je rencontre un nouveau problème, je vous explique:

j'ai une table A qui contient : IDTableA, IDTableB, designation, lieu
j'ai une table B qui contient : IDTableB, nom, adresse, codepostal, ville

Dans un tableau je voudrais afficher toutes les infos de la table A, mais à la place d'afficher l'IDTableB, j'aimerais afficher le nom qui se trouve dans la table B.

Je sèche un peu sur la requête à utiliser, faut il faire deux requête, une pour le nom et une pour le reste?
Bonjour,

Tu peux faire une requête comme ça par exemple :
SELECT IDTableA, nom, designation, lieu FROM TableA, TableB WHERE TableA.IDTableB = TableB.IDTableB

Modifié par Raphi (17 Jan 2014 - 09:16)
Si tu veux organiser par nom ouip. Tu peux aussi préciser si c'est ascendant ou descendant en rajoutant à la suite ASC ou DESC.
Encore un autre problème sur cette requête,

dans le tableau tous s'affiche bien, je voudrais faire une modif sur une ligne, no prob

seulement, sur ma requete sql je voudrais lui dire :

UPDATE table A
SET IDTableB = $tableb (je voudrais modifier l'idtableb en fonction du nom choisi)
Designation = $designation
Lieu = $lieu
WHERE IDTableA = $id


les variables sont les enregistrement de formulaire method POST
Salut,
pour ta requête tu va devoir crée une chaine de caractère qui va contenir ta phrase et tu va y concaténer tes variables au milieu Smiley smile

En gros :
$req="UPDATE table A SET IDTableB =" .$tableb."Designation = ".$designation."Lieu = ".$lieu."
WHERE IDTableA = ".$id


puis mysqli_query ensuite


Par contre tu dois faire attention à ce que l'utilisateur te renvoie pour éviter les injections sql.
Il y a je ne sais plus quelle fonction php qui va te permettre de faire ça, notamment en remplaçant les ' par des \'
Si je comprends bien dans ta requête tu dis

SET IDTableB =" .$tableb.

pour moi dans la table A j'ai IDTableB et mon $tableb correspond au nom qui se trouve dans ma table B, lorsque je fait cette requête, j’obtiens une erreur sql


Mon vrais problème c'est de pouvoir changer l'IDTableB dans ma table A en fonction du Nom qui se trouve dans ma table B et qui a été renseigné dans un formulaire grâce a une requête vue plus tôt.

exemple mon tableau de donnée table A m'affiche :
Nom(tbB) | site | designation | modifier | supprimer

lorsque je click sur modifier j'ai un formulaire de modification où je renseigne:
Nom(tbB) = input(nom)
Site = input(site)
designation = input(designation)

lors du traitement, je recupère les valeurs indiqué dans les input par la méthod POST

donc j'ai des variable :
$nom = $_POST['nom']
$site = etc......

et lors de mon UPDATE je dois juste modifier ma table A, lorsque j'ai modifié le nom dans mon formulaire, je dois remplacer l'IDTableB qui se trouve dans la table A.

Le nom de la table B est déjà enregistré dans ma table

Je ne sais pas si comme ça c'est clair Smiley sweatdrop
Modifié par cid5420 (17 Jan 2014 - 10:47)
(Je suis pas sur, mais si c'est ce que je crois que j'ai compris ^^)
Non c'est sur que ça ne va pas marcher si tu essaye de mettre un nom ( une chaine de caractère du coup je suppose) à la place de l'identifiant ...

Pour que la requête fonctionne, il faut que $tableb contienne l'identifiantB, pas le nom

Edit : Je regarde, y a des trucs en plus dans ta réponse le temps que je réponde xD
Modifié par mathieu1004 (17 Jan 2014 - 10:48)
Bon alors, plusieurs possibilités du coup.

Soit les valeurs dans nomB sont unique (et pourrait donc servir de clé primaire à la place de l'idB. Reflechir si il est judicieux de garder 2 colonnes qui pourrait servir d'identifiant au final). Du coup à partir du nomB on peut récupérer l'unique idB correspondant.
Dans ce cas la on va faire une requete a partir du nom pour obtenir l'idB
$req1="select idB from tableB where nom=".$nomB

et ensuite tu pourra insérer dans tableA ce que tu as besoin.

$req="UPDATE table A SET IDTableB =" .$retour_req1."Designation = ".$designation."Lieu = ".$lieu."
WHERE IDTableA = ".$id


Si les valeurs dans nomB ne sont pas unique (ce qui serait le plus logique vu la structure)
Tu ne pourras pas obtenir a coup sur un seul idB a partir du nomB
Dans ce cas la tu va être obliger de stocker l'idB quelque part. Soit dans un champs caché par exemple quand tu crée le formulaire, soit dans une variable de session. ( Il y a sans doute d'autres possibilités pour le stocker mais la je ne vois pas)
Du coup tu pourras avoir l'idB grâce à une variable $idB Smiley smile

Voila, j’espère que c'est clair Smiley smile
Alors je n'avais pas pensé à la première solution, qui serait plus simple, car dans ma structure je n'utilise que le Nom pour identifier ma ligne tableB.
Cependant je ne sais pas si c'est réglementaire de ne pas avoir un ID en AI.

en fait cette table contient des donnée clients que je renseigne pour ma gestion, il n'y a pas de connexion par rapport a cette table, pas de session, juste une liaison du nom avec plusieurs tables
je pense avoir une idée, si tu peu me dire si je suis dans une bonne voie !

lorsque je suis sur ma page de modif, au lieu d'avoir un input avec le nom, je pourrais faire un SELECT de l'IDTableB et dans OPTION faire un echo Nom

ensuite pour le traitement je récupère l'IDTableB que je modifie dans ma Table A !!??

ça me parait pas trop mal !!! Smiley ravi
Bah généralement c'est préférable d'avoir un id en chiffre plutôt qu'en chaine de caractère (pour diverses petites raisons). Le champs caché dans le formulaire me semble la solution la plus simple Smiley cligne

Edit : Au moment où tu génères ton formulaire :
<input type="hidden" name="idB" value=<?php echo $idB; ?>>

Modifié par mathieu1004 (17 Jan 2014 - 11:24)
Bon vue que je suis obstiné, j'ai essayé ma solution, fonctionne très bien je récupère bien mon IDTableB dans une variable.

Lors de l'update, j’obtiens quand même une erreur sql

UPDATE systemes SET IDClient =2 Site =Brabois Designation =B-05-09-02 WHERE IDSysteme =37



voici mon code pour l'enregistrement
<?php
		//récupération des valeurs des champs
		$client       = $_POST['clients'];
		$site         = $_POST['site'];
		$designation  = $_POST['designation'];
		
		
		//recuperation de l'id
		$id       = $_POST['IDSysteme'];
		//creation de la requete sql
		$sql = "UPDATE systemes
					SET IDClient    =".$client.",
						Site        =".$site.",
						Designation =".$designation."
				WHERE IDSysteme =".$id;
		//execution de la requete sql
		$res = $cnx->query($sql) or die('Erreur SQL!<br>'.$sql.'<br>'.mysql_error());
		//affichage des resultats, pour savoir si la modif à marchée:
		if($res)
		{
			echo("La modification à été correctement effectuée, <a href=\"../gsysteme/TBGsysteme.php\">Retour</a>");
		}else {
			echo("La modification à échouée, <a href=\"../gsysteme/TBGsysteme.php\">Retour</a>");
		}
	?>

Modifié par cid5420 (17 Jan 2014 - 11:37)
Il faut penser à mettre des \' quand la variable est une chaine de caractères.

$sql = "UPDATE systemes
				SET IDClient    =".$client.",
					Site        =\'".$site."\',
					Designation =\'".$designation."\',
			WHERE IDSysteme =".$id;


ca devrait etre quelque chose comme ca

Edit : en fait peut être que juste des ' suffisent pas besoin du \'
Modifié par mathieu1004 (17 Jan 2014 - 12:29)
J'ai toujours une erreur
j'ai d'autre page où je fait un update, donc la syntaxe de la requête ne pose pas de problème, il faut que je regarde + attentivement chaque majuscule etc...
Un grand merci a mathieu1004 qui m'a mis sur une piste, mon code est fonctionnel, j'ai réécris la requête, et elle est passé donc opération réussi!!!! Smiley biggrin