7212 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,

Voilà mon code pour faire une recherche sur deux tables. Ca fonctionne mais j'ai un soucis pour récupérer les valeurs de ma table Articles.

$req = $connexion->query('SELECT * FROM Articles JOIN Choix ON Articles.l = Choix.l WHERE Diametre'); 


SELECT * veut bien dire tout sélectionné ?

Je veux récupérer dans la table Articles, l, d, s. Je récupère que l.

Bref, ça fonctionne à moitié. J'ai du me planter quelques part mais ou ?

Merci de vos retours. Smiley smile
Modifié par Tintin75 (18 Mar 2017 - 16:46)
Bonjour,

Il manque pas une condition dans le where.
Normalement il faut un truc du style .... WHERE Diametre IS NOT NULL
Une ressource sur le sql : jointure sql
Je veux récupérer l,d,p et s, lors de l'envoi. Je récupère que l.

Le code fonctionne bien, mais je récupére pas toutes les infos

Sur la toile, il y a un tas de tuto, que je m'y perd !!!

Je pédale dans la semoule depuis ce matin.

Merci pour ton aide Smiley smile
Modifié par Tintin75 (19 Mar 2017 - 09:09)
Pourquoi ton select a-t-il 2 id ?

As-tu essayer un truc comme :
$req = $connexion->query('SELECT l , d, p, s FROM Choix JOIN Articles ON Choix.l = Articles.l  WHERE Diametre IS NOT NULL');

Quels sont les champs de tes 2 tables ?

Peux-tu aussi nous donner 2 lignes de tes tables ?
Modifié par gandalfblanc (17 Mar 2017 - 17:13)
Salut Smiley smile

Bon dans ton while tu assigne un array $data Smiley smile très bien...
Ensuite tu utilises $data uniquement sur la clé l, si tu veux les autres il faut que tu ailles les chercher aussi Smiley lol

$data[d] $data[p] $data[s]

Si tu veux voir ce que contient $data fait un print_r($data) juste en haut de ton while Smiley smile
$req = $connexion->query('SELECT l , d, p, s FROM Choix JOIN Articles ON Choix.l = Articles.l  WHERE Diametre IS NOT NULL');


Ca plante.

Table Articles et Choix
pchlj a écrit :
Salut Smiley smile

Bon dans ton while tu assigne un array $data Smiley smile très bien...
Ensuite tu utilises $data uniquement sur la clé l, si tu veux les autres il faut que tu ailles les chercher aussi Smiley lol

$data[d] $data[p] $data[s]

Si tu veux voir ce que contient $data fait un print_r($data) juste en haut de ton while Smiley smile


J'ai rien de plus.
Modifié par Tintin75 (19 Mar 2017 - 09:10)
Tintin75 a écrit :
$req = $connexion->query('SELECT l , d, p, s FROM Choix JOIN Articles ON Choix.l = Articles.l  WHERE Diametre IS NOT NULL');


Ca plante.

Table Articles et Choix


Ok, peux-tu donner la structure de tes tables ?
et le print_r($data), il affiche quoi ?
SELECT * FROM `Choix` WHERE 1


SELECT * FROM `Articles` WHERE 1

Modifié par Tintin75 (17 Mar 2017 - 18:23)
"Ensuite tu utilises $data uniquement sur la clé l, si tu veux les autres il faut que tu ailles les chercher aussi Smiley lol"

Je suis d'accord avec toi, mais je fais comment ? A la force de bidouiller je sais plus ou j'en suis Smiley bawling

J'ai un :
Array ( [l] => Bob14 )

Par contre pour d : j'ai un blanc, donc la variable ne passe pas.

Donc l passe bien mais pas d, ni le reste Smiley bawling

Si je remplace :

$req = $connexion->query('SELECT * FROM Choix JOIN Articles ON Choix.l = Articles.l WHERE Diametre');
par
$req = $connexion->query('SELECT l, d, p FROM Choix JOIN Articles ON Choix.l = Articles.l WHERE Diametre');

Ca plante.
Modifié par Tintin75 (17 Mar 2017 - 18:17)
En cherchant sur le net, on m'indique de virer *

Donc

$req = $connexion->query("SELECT Diametre, l, d, p   FROM Choix JOIN Articles ON Choix.l = Articles.l  WHERE Diametre");  


Et ça plante !!!

$req = $connexion->query("SELECT * FROM Choix JOIN Articles ON Choix.l = Articles.l  WHERE Diametre");  


Ca fonctionne

Le hic, c'est que j'ai pas mes valeur d et p Smiley bawling
Modifié par Tintin75 (17 Mar 2017 - 18:57)
Bonjour tintin,

Quand tu précises d et p dans le SELECT de ta requête tu dis que cela plante!
Peux-tu préciser l'erreur ?
As-tu testé ta requête sur phpMyAdmin?

2 erreurs sql sont possibles : 1 des champs n'existe pas ou 1 des champs existe dans les 2 tables jointes et il ne sait pas lequel prendre (il faut utiliser des alias).
Avec select * la 2ème erreur ne se produit pas
A priori le print_r ne t'affiche que "l" quand tu fais un SELECT * donc je dirais que les champs d et p n'existe pas !? ou ...je ne sais pas...

Bon courage,
à plus
J'ai pas testé dans phpMyAdmin.

l,d,p exite bien je les utilises sur le site.

Lorsque je dit ça plante, le code ne fonctionne pas. Mais j'ai le site à l'écran.


La jonction se fait bien entre mes 2 tables. Sauf que je n'arrive pas à récupérer des variables de la table Articles. La variable l oui, mais pas d, et p ...

Je dois mal m'y prendre, un truc idiot mais là je sèche Smiley decu
Modifié par Tintin75 (19 Mar 2017 - 09:10)
J'ai dans le sélecteur d, mais je n'arrive toujours pas à envoyer d Smiley bawling
Modifié par Tintin75 (19 Mar 2017 - 09:10)
Quelle pagaille Smiley lol

name c'est ce que tu vas récupérer en POST donc ici 'l' et value la valeur que tu vas récupérer donc ta largeur.

Si tu veux envoyer plusieurs valeurs tu peux les concaténer comme ceci par exemple :
$data['l'] . '|' . $data['d']

et ensuite les séparer en faisant un explode par exemple.

Ou encore utiliser des inputs hidden.
Re bonsoir tintin,
ton pb ma intrigué et je l'ai reproduis chez moi...
et je l'ai aussi résolu
Tu trouvera le code ci-dessous:
J'ai utilisé fetch_assoc à la place de fetch...
En résumé le pb est qu'il faut utiliser le bon fetch en fonction de la façon dont tu as fait la requête : soit via la méthode query de l'object connexion, soit via une requête préparée qui génère un objet de classe PDO.
Sur le site officiel tu trouves évidemment toutes les possibilités et si on ne regarde pas dans le détail on a vite fait des erreurs.
voir: http://php.net/manual/fr/pdostatement.fetch.php, http://php.net/manual/fr/mysqli-result.fetch-assoc.php

Cordialement,
bonne nuit


<?php
          $connexion = new mysqli('localhost','root','xxxx','basetest');
          $connexion->set_opt(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
                
          $req = $connexion->query('SELECT * FROM Choix JOIN Articles ON Choix.l = Articles.l');  
          while ($data = $req->fetch_assoc())
         {
              print_r($data); //pour debugger (à supprimer)
              echo "<option value=\"".$data['l']."\">". $data['diametre']. " - " . $data['d']."</option>";         
         }
         //$data['l'] = $_POST['l'];
         //$data['d'] = $_POST['d'];
         $connexion->close();
?> 


Résultat:


<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body><form id="form1" method="post" action="Bob1.php">
            <p>
            <select name="l" id="l">
        Array
(
    [l] => 1
    [d] => choix 1
    [p] => article 1
    [diametre] => 10
)
<option value="1">10 - choix 1</option>Array
(
    [l] => 2
    [d] => choix2
    [p] => article 2
    [diametre] => 20
)
<option value="2">20 - choix2</option>                 
            </select>  
	  
            <input name="valider" type="submit" value="Valider">
            </p>
        </form>
  
  	    </body>
</html>
Bonjour GJboba,

Ma connexion se fait en pdo et non mysqli.

Je vais y arriver, je regarde vos retours.
On résume :

Il faut que je post l + d + p pour que mon code fonctionne en pdo. Je suis en php 7.

Pour l'instant, il n'y a que l qui passe. Donc je doit "pousser" d et p.

Avec le code ci-dessus, le code fonctionne mais à moitié. Le truc, c'est que je ne sais comment "pousser" en plus d et p ?

Je vais y arriver, c'est une bricole à mon avis Smiley murf
Modifié par Tintin75 (19 Mar 2017 - 09:10)