PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 23-10-2009 19:13:26

infograph61
Membre
Inscription : 25-09-2009
Messages : 74

Interroger plusieur tables

Bonsoir à tous ,
J'ai créé un double requête pour interroger 2 tables, elle fonctionne et c'est un exploit.....!!!!!
(Mon objectif final est d'interroger 6 tables différentes et en même temps.) mais j'ai un problème car avec une valeur en "dur' la seconde requete fonctionne, mais je voudrais utiliser un valeur issue de la première requête et ainsi de suite
3° requete issue d'une valeur de la 1°..... 4° requete issue d'une valeur de la 1°...ect

voiçi mon code :


<?php
include('connexion.php');
$recherche = isset($_POST['recherche']) ? $_POST['recherche'] : '';
$reponse = mysql_query("SELECT * FROM produit_finis_tbl WHERE produit_finis LIKE \"%$recherche%\"");
while ($donnees = mysql_fetch_array($reponse) )
{
?>
    <p> </p>
<table width="800" border="1">
  <tr>
    <td><?php echo $donnees['produit_finis']; ?></td>
    <td><?php echo $donnees['designation']; ?></td>
    <td><?php echo $donnees['client']; ?></td>
    <td[color=#0829f6]><?php echo $donnees['etui']; ?></[/color]td>
    <td><?php
}
?></td>
    <td><?php
include('connexion.php');
$reponse = mysql_query("SELECT * FROM etui_tbl where Code_article=[color=#fc1102]555615[/color]"); // Requête SQL
// On fait une boucle pour lister tout ce que contient la table :
while ($donnees = mysql_fetch_array($reponse) )
{
?></td>
  </tr>
  <tr>
    <td><?php echo $donnees['Code_article']; ?></td>
    <td><?php echo $donnees['Designation']; ?></td>
    <td><?php echo $donnees['Plan_tech']; ?></td>
    <td>
<?php
}
?></td>
  </tr>
</table>
 

Ma question :
comment remplacer la valeur 555615 de mon code article pal la valeur <?php echo $donnees['etui']; ?>


Merci d'avance pour votre aide éventuelle..... car j'ai galéré tout l'après midi sans succés

c'est dur de débuter

Hors ligne

#2 24-10-2009 06:37:49

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Interroger plusieur tables

$reponse = mysql_query("SELECT * FROM etui_tbl where Code_article=".$donnees['etui']); // Requête SQL

Mais avec ton script il prendra la dernière valeur de $donnees['etui'], à savoir la dernière valeur affectée par la boucle while.

PS : ton second include('connexion.php' ne sers à rien, tu l'as déjà inclut plusieurs lignes plus haut.

Hors ligne

#3 24-10-2009 09:04:06

infograph61
Membre
Inscription : 25-09-2009
Messages : 74

Re : Interroger plusieur tables

Bonjour et Merci pour ta réponse, du coup je suis parti dans un autre direction, mais sans meilleur résultat.
Je fais un requete dont j'envois les resultats (7en tout)  sur une autre page (via form method="post") et là je pensais pouvoir faire mes autres requetes en fonction des variables reçu, mais seulement la première requete fonctionne mais pas la deuxième..... message d'erreur.

Ma démarche est elle réaliste, ou si je fais encore fausse route, comment puis je faire pour résoudre mon problème?
Merci d'avance
Cordialement

Hors ligne

#4 24-10-2009 09:56:44

infograph61
Membre
Inscription : 25-09-2009
Messages : 74

Re : Interroger plusieur tables

J'ai perseveré et j'ai vérifié toute mes requetes, et .....cela fonctionne.
Donc ma démarche était réaliste et fonctionnelle

@+
Cordialement

Hors ligne

#5 25-10-2009 13:18:01

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Interroger plusieur tables

Tu peux tout faire sur la même page, le tout est que tu dois utiliser les mêmes noms de variable (au vu de ton code posté au dessus).

<?php
include('connexion.php');
$recherche = isset($_POST['recherche']) ? $_POST['recherche'] : '';
$reponse = mysql_query("SELECT * FROM produit_finis_tbl WHERE produit_finis LIKE \"%$recherche%\"");
?>
<p> </p>
<table width="800" border="1">
<?php
while ($donnees = mysql_fetch_array($reponse) )
{
?>
  <tr>
    <td><?php echo $donnees['produit_finis']; ?></td>
    <td><?php echo $donnees['designation']; ?></td>
    <td><?php echo $donnees['client']; ?></td>
    <td><?php echo $donnees['etui']; ?></td>
    <td></td>
    <td><?php
include('connexion.php');
$reponse2 = mysql_query("SELECT * FROM etui_tbl where Code_article=".$donnees['etui']); // Requête SQL
// On fait une boucle pour lister tout ce que contient la table :
while ($donnees2 = mysql_fetch_array($reponse2) )
{
?></td>
  </tr>
  <tr>
    <td><?php echo $donnees2['Code_article']; ?></td>
    <td><?php echo $donnees2['Designation']; ?></td>
    <td><?php echo $donnees2['Plan_tech']; ?></td>
    <td>
<?php
}
?></td>
  </tr>
<?php
}
?>
</table>

Cependant regardes du côté des jointures pour les requêtes et tu verras que ce que tu fais peut être exécuté avec seulement une requête SQL.

Hors ligne

#6 26-10-2009 09:00:47

infograph61
Membre
Inscription : 25-09-2009
Messages : 74

Re : Interroger plusieur tables

Bonjour xTG,
c'est super, j'obtiens exactement ce que je voulais.
Merci

Hors ligne

#7 26-10-2009 09:18:20

Maskime
Membre
Lieu : Paris 15ème
Inscription : 11-05-2009
Messages : 134
Site Web

Re : Interroger plusieur tables

Hello,

Tout ça est très bien, je me permet cependant des petites remarques pour l'optimisation et dans l'idée d'apprentissage :
[MODE RELOU ON]
1. Faire des requêtes en boucle est assez onéreux en terme de ressources, surtout si tu fais une boucle pour chaque résultat et que tu as 7 requêtes. Il faudrait que tu commence à regarder ce qu'est une jointure wink

2. Il faut éviter de faire des "SELECT *" Déjà parce que du coup tu ramène des infos dont tu n'as pas forcément besoin et aussi parce que lorsque tu vas repasser sur ton code d'ici 3 semaines tu seras incapable de dire quels sont les champs qui composent ta table. Quitte à mettre tous les champs de ta table si tu as besoin dans ton SELECT, il vaut mieux perdre 2 petites minutes maintenant que de perdre 30min quand tu vas revenir sur ton code wink
[MODE RELOU OFF]

Voilà.


La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes

Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs wink

Hors ligne

#8 26-10-2009 10:38:23

infograph61
Membre
Inscription : 25-09-2009
Messages : 74

Re : Interroger plusieur tables

Bonjour Maskine,
Tu as parfaitememt raison, mais je fais vite et il faut queje refasse toute mes tables ( aussi c'est un base exclusivement en local ave 5 utilisateurs)
je profite de ta présence pour poser un nouvelle question:
je récupère un variable et je veux créer un fichier .txt avec cette variable
je n'arrive pas à mettre la bonne valeur ..peux tu m'aider SVP (remplacer lundi.txt par "ma_variable.txt

<?php
if(file_exists('lundi.txt'));//verif d'existance du fichier
else fclose(fopen('lundi.txt','w'));//creation du fichier
$sep = ' ; ';
$date = strftime('%d/%m/%Y %H:%M');//date
$texte = $date.$sep.$Pseudo.$sep.$Commentaire8.$sep."\n";//rassemblement des infos   
$f = fopen('lundi.txt','a');//ouverture en mode ajout du fichier
fputs($f,$texte);//ajout du contenu de $texte a la fin du fichier
fclose($f);//fermeture du fichier
?>

Merci et bravo pour ta disponibilité.
Cordialement
Un infographiste qui débute

Hors ligne

#9 26-10-2009 13:01:53

Maskime
Membre
Lieu : Paris 15ème
Inscription : 11-05-2009
Messages : 134
Site Web

Re : Interroger plusieur tables

Hello,

Si je comprends bien tu veux créer un fichier dont le nom est le contenu de ta variable.
Et après tu fais un fichier CSV avec un séparateur ';'

Bon y a plus simple que ce que tu viens de faire wink


$sFileName = 'Lundi';
$sOpenMode = 'a';
$sSeparateur = ';';
if(file_exists($sFileName . '.txt') === false)
{
  $sOpenMode = 'w';
}
$mFile = fopen($sFileName . '.txt', $sOpenMode);
if($mFile !== false)
{
  $aCSVContent = array();
  $aCSVContent[] = strftime('%d/%m/%Y %H:%M');;
  $aCSVContent[] = $Pseudo;
  $aCSVContent[] = $Commentaire8;
  $sLineToAddToFile = implode($sSeparateur, $aCSVContent) . "\n";
  if(fputs($mFile, $sLineToAddToFile) === false)
  {
    echo "Je n'ai pas pu rajouter la ligne : " . $sLineToAddToFile;
  }
}
else
{
  echo "J'ai pas pu ouvrir le fichier " . $sFileName . '.txt en mode [' . $sOpenMode . ']';
}
 

[DISCLAIMER]
Je n'ai pas testé le code posté plus haut, a priori il marche mais je ne l'ai pas mis dans le parser pour regarder si j'ai pas oublié un ';' ou si j'ai pas fait une faute de frappe sur le nom d'une variable...
[/DISCLAIMER]

Bon la tu te dis : "Il m'a dit que que c'était plus simple mais en définitive il a plus de ligne que moi..."
Alors pourquoi est ce que c'est plus simple ?
1. Prends ton problème par étape :
Tu fais beaucoup de chose en même temps, pas tellement que ça dérange PHP mais il faut que tu te place dans l'optique de qu'est ce qu'il va se passer quand tu vas revenir sur ton bout de code quelques temps après ? La mémoire humaine est une chose assez capricieuse et il n'est pas impossible que tu oublies wink

2. Gérer les erreurs :
La plupart des fonctions de gestion de fichier en PHP (ou d'autres langages hein ?!) renvoie des valeurs pour te permettre de vérifier que la création, la modification, la suppression de ton fichier s'est déroulée sans encombre. Il est important que tu testes ces valeurs de retour pour voir si tout s'est bien passé et en plus si tu as un problème par la suite il est quand plus facile de lire un message d'erreur plutot que de re-lire ton code pour essayer de deviner ce qu'il s'est passé...

3. Optimisation possible :
Actuellement ton script ouvre le fichier, ou il le créé pour chaque ligne que tu veux rajouter dans ton fichier. Ce n'est pas la bonne méthode. Les opérations sur les fichiers sont assez couteux en terme de ressource pour PHP, il faut que tu modifie ton code pour que tu ne l'ouvre qu'une fois, tu écris toutes les lignes qui le compose et tu le ferme à la fin. Avec mon script tu devrais pouvoir voir comment est ce que tu pourrais faire ce changement majeur dans ton code wink

Si tu as des questions, tu sais où est ce que je me trouve wink [DTC Protection ON]

Dernière modification par Maskime (26-10-2009 13:04:34)


La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes

Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs wink

Hors ligne

#10 26-10-2009 14:58:38

infograph61
Membre
Inscription : 25-09-2009
Messages : 74

Re : Interroger plusieur tables

Merci beaucoup Maskime,
Ton code fonctionne super, j'obtiens exactement ce que je veux.
normalement avec ce script, ma base devrait être presque terminée. mais je me méfie car plus elle avance et plus je m'en invente.....
Encore MERCI pour ton aide précieuse pour un débutant amateur comme moi.

@+
Infograph61

Hors ligne

#11 26-10-2009 15:17:17

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : Interroger plusieur tables

infograph61 a écrit :

Encore MERCI pour ton aide précieuse pour un débutant amateur comme moi.

Rhhoo !! T'as vu Maskime, on te fait passer pour un petit jeunot novice wink wink wink

Maskime a écrit :

[DISCLAIMER]
Je n'ai pas testé le code posté plus haut, a priori il marche mais je ne l'ai pas mis dans le parser pour regarder si j'ai pas oublié un ';' ou si j'ai pas fait une faute de frappe sur le nom d'une variable...
[/DISCLAIMER]

Mais c'est inacceptable !!!!!! Non mais oh !!! Et pourquoi tu ferais une faute de frappe ? wink wink wink


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#12 26-10-2009 15:44:31

Maskime
Membre
Lieu : Paris 15ème
Inscription : 11-05-2009
Messages : 134
Site Web

Re : Interroger plusieur tables

euhhh

Je crois que tu as mal interprété ce que infograph61 a écrit. Il voulait bien dire que c'étais lui l'amateur et pas moi wink
Quant au disclaimer j'ai pensé à le mettre parce que la dernière fois y'en a un qui m'a envoyé un mail pour me dire que le script que je lui avais envoyé de ne marchait pas, et attention voilà l'erreur qu'il m'avait envoyé :
Unable to open stream '/home/toto/exemple.php' => véridique...


La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes

Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs wink

Hors ligne

#13 26-10-2009 16:06:42

infograph61
Membre
Inscription : 25-09-2009
Messages : 74

Re : Interroger plusieur tables

Je confirme, loin de moi l'idée de juger négativement des compétences des membres bénévoles qui nous aident ce forum.
Ils ont le mérite de nous aider, nous les pauvres novices ( en tous cas moi c'est sur)
Tout ce que je sais c'est que sans Maskime, je ne serais arrivé à rien.

ENCORE MERCI A TOI

Hors ligne

#14 26-10-2009 18:00:13

Maskime
Membre
Lieu : Paris 15ème
Inscription : 11-05-2009
Messages : 134
Site Web

Re : Interroger plusieur tables

Merci smile


La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes

Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs wink

Hors ligne

#15 27-10-2009 10:05:50

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : Interroger plusieur tables

Coucou à tous,

Le but de ma remarque était seulement un peu de dérision wink

[effectivement, j'avais pas mal lu ^^ mais on s'en fout, c'était pour le fun]


Unable to open stream '/home/toto/exemple.php'

Pourquoi ça ne m'étonne même plus sad


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#16 31-10-2009 11:58:59

infograph61
Membre
Inscription : 25-09-2009
Messages : 74

Re : Interroger plusieur tables

Bonjour à tous,
je suis de retour avec mon fichier CSV
Je génére un fichier CSV à chaque fois que je crée un nouveau code article dans ma base (ce fichier est un historique des modification de mon code article) et je vais en avoir beaucoup.
Quand j'interroge ma base code article, les infos de mon fichier texte s'affichent aussi en bas de mon formulaire.
Le problème c'est que j'affiche toujours la même infos car je n'arrive pas à adapter la valeur de mon fichier en fonction de la valeur du code article de mon formulaire

<?php
$fcontents = file("code_article1.txt");
while ( list( $line_num, $line ) = each( $fcontents ) )
{............

En fait je n'arrive pas à remplacer Code_article1 par la valeur de la variable que j'ai envoyer pour interroger ma base
.....y'a des jours ou rien ne va

Merci d'avance pour une aide précieuse
Cordialement

Hors ligne

#17 31-10-2009 16:31:30

infograph61
Membre
Inscription : 25-09-2009
Messages : 74

Re : Interroger plusieur tables

Après une pause , on toujours les idées sont plus claire.
La réponse était déjà dans le script de Maskine

il faut absolument que je médite sur sa signature
"La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes"

@+

Hors ligne

Pied de page des forums