Forum Clubic

Relation table sql

j’ai deux table membres (id_membres, pseudo, pass, date_enregistrement) credit (id, client, designation, prixuni, qt, prixtota, id_credit) je veux relier ces deux table pour quand un membres ce connecte et qu’il veux affiche les enregistrement de la table crédit il affiche que les enregistrement qui en était enregistré par luis et pas les enregistrement enregistré par tout les membres. pouvez vous m’aide?? je serai vraiment reconnaissent.merci.

C’est assez simple, enfin quand on connait. Dans ta table crédit, tu rajoutes un champ que tu nommes id_membres et que tu désignes comme clé étrangère.

Ainsi, quand un membre va faire/demander/rembourser/… un crédit, son id va apparaître dans la table crédit automatiquement

Voila de l’aide pour créer ta clé étrangère : sql.1keydata.com…

ALTER TABLE credit
ADD FOREIGN KEY (credit_id) REFERENCES membres(id_membres);

mais il m affiche un msg d’erreur
#1072 - Key column ‘credit_id’ doesn’t exist in table

je cois que c’est a cause de ma version de php 3.0 je crois que ADD FOREIGN KEY ne la connait pas es que tu peut m éclairs sir un peut plus???

si tu peut donne moi ton email car j’ai vraiment besoin d’aide j’ai crée plusieurs algorithme mais rien j ai essayé plusieurs truck que j ai trouvé sur le web et rien.
Edité le 21/06/2011 à 15:29


ALTER TABLE credit ADD FOREIGN KEY (credit_id) REFERENCES membres(id_membres);

mais il m affiche un msg d’erreur
#1072 - Key column ‘credit_id’ doesn’t exist in table

je cois que c’est a cause de ma version de php 3.0 je crois que ADD FOREIGN KEY ne la connait pas es que tu peut m éclairs sir un peut plus???

si tu peut donne moi ton email car j’ai vraiment besoin d’aide j’ai crée plusieurs algorithme mais rien j ai essayé plusieurs truck que j ai trouvé sur le web et rien.

ADD FOREIGN KEY n’a rien à voir avec php, c’est du SQL.

De plus, le champ que tu désignes en tant que clé étrangère doit exister si tu fais un ALTER TABLE.

Donc, cela donne :


ALTER TABLE credit
ADD FOREIGN KEY (id_credit) REFERENCES membres(id_membres);

je sais que c’est du sql en le code sql j l écrit en esay php en haut dans le menu y as une case sql
il me donne la main pour écrire le code mais il m affiche un code d’erreur

Si tu veux de l’aide, met le message d’erreur, on ne peut pas le deviner

je les mit et le voila le msg d’erreur
#1072 - Key column ‘credit_id’ doesn’t exist in table

Ta colonne s’appelle “id_credit” non ?

Littéralement, “la colonne ‘credit_id’ n’existe pas dans la table”, ça va être difficile d’y appliquer une contrainte de clé étrangère. :sarcastic:
Edité le 22/06/2011 à 15:03

j’ai réessayé et ca a marché mais quand j’execute mon script il m’affiche un msg d’erreur (Field ‘id_credit’ doesn’t have a default value)

voila le scripte d’insertion:

<?php header('Content-type: text/html; charset=UTF-8'); function Verif_magicquotes ($chaine) { if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine); return $chaine; } $client=$_POST['client']; $designation=$_POST['designation']; $prixuni=$_POST['prixuni']; $qt=$_POST['qt']; function prixtota($prixuni, $qt) { $prixtota = $prixuni * $qt ; // calcul du volume return $prixtota; // indique la valeur à renvoyer, ici le volume } $prixtota = prixtota($prixuni, $qt); if(isset($client,$designation,$prixuni,$qt,$prixtota)) { $hostname = ""; $database = ""; $username = ""; $password = ""; $connection = mysql_connect($hostname, $username, $password) or die(mysql_error()); mysql_select_db($database, $connection); $insertion = "INSERT INTO credit(client,designation,prixuni,qt,prixtota) VALUES('".$client."','".$designation."', '".$prixuni."','".$qt."','".$prixtota."')"; $inser_exec = mysql_query($insertion) or die(mysql_error()); ou est le problème??? normalement avec ce code ( ALTER TABLE credit ADD FOREIGN KEY (id_credit) REFERENCES membres(id_membres); ) je relier mais deux champ alor pour quoi il m'affiche que le champ id_credit n as pas une valeur?? Edité le 22/06/2011 à 16:25

Parce qu’une clé étrangère ne rempli pas le champs toute seule, c’est une juste une contrainte qui empêche de mettre autre chose qu’une valeur correspondante à une clé primaire de la table de référence.

Tu dois quand même la renseigner :

$insertion = "INSERT INTO credit(client,designation,prixuni,qt,prixtota,
/*Rajoute la colonne id_credit*/id_credit)
VALUES('".$client."','".$designation."', '".$prixuni."','".$qt."','".$prixtota."','".
/*et rajoute la clé étrangère qui DOIT être la même que id de la table client, du client concerné*/ $iddetonclient"')";

Tu dois bien sur récupérer l’id du client, dans une variable de session à la connexion, par exemple.

Edit : pas top la balise [code]

Edit 2 : A quoi te sers ta colonne client sur ta table credit, si tu as une table membres ?
Si tu récupères le nom du client dans un formulaire

$client=$_POST[‘client’];

(ce qui est étrange) tu peux t’en servir pour faire un select sur la table membres et récupéré l’id correspondante dans une variable, que tu pourras facilement insérer en clé étrangère (un select imbriqué dans ton INSERT sinon ? je suis pas sur que ça fonctionne, j’ai jamais tenté).

Pour ré-afficher le tuples entier, tu fais une jointure.
C’est important en base de donné d’éviter la redondance, avoir le nom du client, et l’id du même client, dans la même table, c’est redondant justement.
Edité le 22/06/2011 à 15:58

$insertion = “INSERT INTO credit(client,designation,prixuni,qt,prixtota,id_credit) VALUES(’”.$client."’,’".$designation."’, ‘".$prixuni."’,’".$qt."’,’".$prixtota."’,’".$id_membres."’)";

mais comment puis je récupérer la valeur de ID_membres pour l’inserer dans id_credit .
le nom de client ca change a chaque fois mais moi je veux quand le membres veux affciher les crédit il affiche que les information inserer par luis a pas tous les information sur la table credit c’est pour cela je veux inserer la valeyr de ID_membres .

j’ai essayé de fair une jointure voici le code

$id_membres=“SELECT membres.ID_membres , credit.id_credit FROM membres , credit WHERE membres.ID_membres=credit.id_credit”;

$insertion = “INSERT INTO credit(client,designation,prixuni,qt,prixtota,id_credit) VALUES(’”.$client."’,’".$designation."’, ‘".$prixuni."’,’".$qt."’,’".$prixtota."’,’".$id_membres."’)";

mais ca n as rie donné il m affiche l erreur suivante:
Incorrect integer value: ‘SELECT membres.ID_membres , credit.id_credit FROM membres , credit WHERE membres.ID_membres=credit.id_credit’ for column ‘id_credit’ at row 1

D’accord, Client et membres ne sont pas la même chose :stuck_out_tongue:

Heu, la jointure j’ai un doute sur la syntaxe avec where, mais je suis presque sur qu’il manque le join :smiley:

SELECT membres.ID_membres, credit.id_credit FROM membres INNER JOIN credit ON membres.ID_membres=credit.id_credit;

Logiquement, tu lances une session pour chaque membre non ?
Tu dois garder l’id du membre connecté en variable de session :

<?php
session_start();
/*connexion base de donné, tes includes et tout le bazar)
if(isset($_POST['pseudo']){
    $query = "SELECT id FROM membres WHERE pseudo = '".$_POST['pseudo']."';";
    $_SESSION['idClient'] = mysql_query($query) or die(mysql_error());
} ?>

<html>
Ton formulaire
</html>

Ensuite du traitement pur :

"INSERT INTO credit(client,designation,prixuni,qt,prixtota,id_credit) VALUES('"[strike].$client."','".$designation."', '".$prixuni."','".$qt."','".$prixtota."','".$_SESSION['idClient']."')";

et ta clé étrangère sera opé

(Je suis moyennement sur de mon coup, je suis fatigué et le proxy ici bloque pas clubic mais php.net si -_-)

<?php
// On prolonge la session
session_start();

if(empty($_SESSION['login'])){
  $query = "SELECT id FROM membres WHERE pseudo = '".$_POST['pseudo']."';";
  $_SESSION['idClient'] = mysql_query($query) or die(mysql_error());

    // Si inexistante ou nulle, on redirige vers le formulaire de login
    header('Location: http://127.0.0.1/LouStock/inscription/inscription.php');
    exit();
}
?>

mysql_select_db($database, $connection);

$insertion = "INSERT INTO credit(client,designation,prixuni,qt,prixtota,id_credit) VALUES('"[strike].$client."','".$designation."', '".$prixuni."','".$qt."','".$prixtota."','".$_SESSION['idClient']."')";
      
$inser_exec = mysql_query($insertion) or die(mysql_error()); 

voici le msg d’erreur
Parse error: parse error in F:\PROGRAMME\E asyPHP 3.0\www\LouStock\credit\inser.php on line 35

C’est pas bon ca => (’"[strike].$client."’

T’aurais pas ramené dans ton code du BBcode du forum en faisant un copier / coller par hasard ?

PS : si parse error line 35, en général c’est que t’as loupé une quote ou un ; ligne 34

J’l’avais rayé avant de comprendre qu’en fait c’est pas la même que “membres”, bon idéalement il faudrait une table client du coup. J’ai oublié d’enlevé la balise… désolé.

<?php 
// On prolonge la session 
session_start(); 

if(empty($_SESSION['login'])){ 
    $query = "SELECT id FROM membres WHERE pseudo = '".$_POST['pseudo']."';"; 
    $_SESSION['idClient'] = mysql_query($query) or die(mysql_error()); 

    // Si inexistante ou nulle, on redirige vers le formulaire de login  
    //même avec le bbcode désactivé, il fout une balise [url] là T_T tu mets bien sur pas /path mais le vrai chemin
    header('Location: /path'); 
    exit(); } ?>

si tu veux faire ta vérif sur empty, il me semble qu’il manque un not

<?php 
// On prolonge la session 
session_start(); 

if(!empty($_SESSION['login'])){ 
    $query = "SELECT id FROM membres WHERE pseudo = '".$_POST['pseudo']."';"; 
    $_SESSION['idClient'] = mysql_query($query) or die(mysql_error()); 
}else{
    // Si inexistante ou nulle, on redirige vers le formulaire de login 
     //même avec le bbcode désactivé, il fout une balise [url] là T_T tu mets bien sur pas /path mais le vrai chemin
    header('Location: /path');
    exit(); 
}
 ?>

Sinon tu vas essayer de sortir l’id quand le pseudo est NULL.

Je vois pas l’erreur de parsing, mais comme l’a dit Startide, c’est généralement un bête oubli à la ligne supérieure.

(Ton exit ne sert à rien je crois, il n’exécute pas le script après une redirection)
Edité le 23/06/2011 à 08:30

la je vérifie si le membres et vraiment inscrit pour luis donné la permission d’accès a cette page mais mon problème c’est pas dans la page crédit mais dans la page insertion voici le code de la page insertion

<?php
header('Content-type: text/html; charset=UTF-8');
function Verif_magicquotes ($chaine) 
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);

return $chaine;
} 

$client=$_POST['client'];
$designation=$_POST['designation'];
$prixuni=$_POST['prixuni'];
$qt=$_POST['qt'];


function prixtota($prixuni, $qt)
{
   $prixtota = $prixuni * $qt ; // calcul du volume
   return $prixtota; // indique la valeur à renvoyer, ici le volume
}

$prixtota = prixtota($prixuni, $qt);

if(isset($client,$designation,$prixuni,$qt,$prixtota)) 
    {
$hostname = "";
$database = "";
$username = "";
$password = "";
    
$connection = mysql_connect($hostname, $username, $password) or die(mysql_error());

mysql_select_db($database, $connection);



$insertion = "INSERT INTO credit(client,designation,prixuni,qt,prixtota) VALUES('".$client."','".$designation."','".$prixuni."','".$qt."','".$prixtota."')";
     
$inser_exec = mysql_query($insertion) or die(mysql_error()); 


   
   
if ($inser_exec === true) 
 {
 include("affichage.php");
     
 }

        
         else
         {  
             $message = 'Ce pseudo est déjà utilisé, changez-le.';
         }
  
  

 }     
?>

quand je supprime le champ id_credit mon programme marche très bien, il insert les information
mais la j’ai un champ id_credit je veux insert l ID_membres de la table membres du membres connecté parce que l’inclue que j’ai insérer dans mon programme est une page qui affiche les enregistrement de la table crédit mais selon mon programme il affichera tout les enregistrement même les enregistrement enregistrer pour les autre membres c’est pour cela je veux insérer l ID_membres et pour cela il dois crée une requette qui va vérifier la session ouvert pour qu’il renvois l ID du membres et l insérer dans id_credit
j’ai essayé comme ca:



mysql_select_db($database, $connection);


 session_start();
if(isset($_POST['pseudo'])){
  $query = "SELECT ID_membres FROM membres WHERE pseudo = '".$_POST['pseudo']."';";
  $_SESSION['login'] = mysql_query($query) or die(mysql_error());
}


$insertion = "INSERT INTO credit(client,designation,prixuni,qt,prixtota,id_credit) VALUES('".$client."','".$designation."','".$prixuni."','".$qt."','".$prixtota."','".$_SESSION['login']."')";
     
$inser_exec = mysql_query($insertion) or die(mysql_error()); 


   
   
if ($inser_exec === true) 
 {
 include("affichage.php");
     
 }

        
         else
         {  
             $message = 'Ce pseudo est déjà utilisé, changez-le.';
         }
  
  
 
 }     
?>

il m’affiche ce code d’erreur Incorrect integer value: ‘takieddine’ for column ‘id_credit’ at row 1
takieddine est l’un des membres
je sais que c’est a peut prés comme pouvez vous m’aide??? je block vraiment j’ai tous essayé

Tu dois mettre l’id correspondante à takieddine et pas son nom pour respecter l’intégrité référentielle.

$_SESSION[‘login’]

C’est son pseudo ou tu as bien fait ce que j’ai dit plus haut.


if(!empty($_SESSION['login'])){ 
    $query = "SELECT id, pseudo FROM membres WHERE pseudo = '".$_POST['login']."' AND password ='".$_POST['password']."';"; 
    $result = mysql_query($query) or die(mysql_error());
    $row = mysql_fetch_row($result);

    if(!$row){
	echo'Echec de connexion';
    }else{
	session_start();
	$_SESSION['userID'] = $row['id'];
	$_SESSION['userName'] = $row['pseudo'];
    }
}

Voilà un script d’authenf complet, tu récupères l’ID et le Pseudo de l’utilisateur en session, c’est l’ID que tu dois insérer comme clé étrangère.
A toi d’adapter la requête pour qu’elle colle à ta base, et à ton hachage.

Après relecture, c’est pas ça le problème O.o
Je laisse quand même ce morceau de code.

Mais tu te sers de quoi comme clé primaire dans ta table membre, comment tu fais pour te retrouver avec le pseudo en session quand ta requête demande l’id ?
Edité le 23/06/2011 à 16:21

Faut pas mettre le nom du membre, mais son ID (1, 2, 45, 10245, …)

Bon je suis très rouillé (et certainement pas dev professionnel), mais nous sommes bien d’accord que id_XXXX c’est des identifiants uniques ? Ces derniers en mysql ils sont autoincrémenté par mysql, t’as pas à les spécifier pendant un insert.

Si tu insert un truc dans la table suivante :

id
nom
prenom
adresse

tu fais insert into table nom,prenom, adresse, et tu parles pas de l’id il se démerde tout seul !

j’ai réussi l’insertion avec ce programme en changent le type de id_credit il étant int je les rendu varchar a ca a marché merci pour votre aide a tous vraiment merci
je suis vraiment reconnaissent


je sais mais j'ai pas trouvé une autre solution :( comment je pouré récupérer l id j'ai pas trouvé comment?? si vous avez une autre idée ca ma rangera plus
je sais mais j'ai pas trouvé une autre solution :( comment je pouré récupérer l id j'ai pas trouvé comment?? si vous avez une autre idée ca ma rangera plus
oui je sais mais j'ai deux table l'affichage de la deuxième table sera selon l id de la premier table, c'est ca le problème
ma requette ne demande pas l'id mais demande le pseudo