Bonjour tout le monde, je présente mon problème qui est un petit problème mais compliqué a résoudre pour moi du moins.
Voici ma table produit :

Je vais essayé d'être le plus claire possible car c'est un peu complexe comme soucis.
Je commence par ma bdd le problème concerne 2 tables :
la table : Consoles
la table : Produits

Consoles contiens : id_consoles et nom
Produits contiens : id_produits, nom , description, prix .... id_consoles

il y a une jointure entre les 2 id_consoles de produits = id_consoles de consoles

lorsque j'ajoute un produit je lui attribue une console (PS1, PS2 ....) qui se situe dans la table Consoles.
Dans la table produit je récupère uniquement l'id consoles .

A partir de la je voudrais faire un update disons que le produit été sur PS2 et non sur PS1
du coup je récupère tout mes infos de la table produits
et pour récupéré l'ancienne console sur lequel été le produits je doit recup en selected le nom de consoles ou l'id_consoles de consoles = l'id_consoles de produits
voici mon formulaire d'ajout de produit :

<div id="consoles">
    <label for="consoles">Le produit est une console ? si non sur quel support est le produit * :</label>
        <select class="input    " name="id_consoles" required>
            <?php
                // ici je récupère les consoles
                //connection au serveur
                $res = $bdd->query ('SELECT nom, id_consoles FROM consoles');

                while ($donnees = $res->fetch())
                {
                ?> <option value=<?php echo $donnees'id_consoles'] ;?>> <?php echo $donnees'nom'] ;?> </option><?php 
                }
                $res->closeCursor();
            ?>
        </select>
    </div>
    <br />
    <div id="types">
    <label for="Types">Types de produit * :</label>
        <select class="input    " name="id_types" required>
            <?php
                // ici je récupère les consoles
                //connection au serveur
                $res = $bdd->query ('SELECT nom, id_types FROM types');

                while ($donnees = $res->fetch())
                {
                ?> <option value=<?php echo $donnees'id_types'] ;?>> <?php echo $donnees'nom'] ;?> </option><?php 
                }
                $res->closeCursor();
            ?>
        </select>
    </div>
    <br />
    <div id="genres">
    <label for="Genres">Genres de produit * :</label>
        <select class="input    " name="id_genres" required>
            <?php
                // ici je récupère les genres
                //connection au serveur
                $res = $bdd->query ('SELECT nom, id_genres FROM genres');

                while ($donnees = $res->fetch())
                {
                ?> <option value=<?php echo $donnees'id_genres'] ;?>> <?php echo $donnees'nom'] ;?> </option><?php 
                }
                $res->closeCursor();
            ?>
        </select>
    </div>

Merci d'avance c'est le dernier souci que j'ai avec mon projet à rendre cordialement,
Xander.

17 réponses


xander
Auteur
Réponse acceptée

REUSSI j'avais pas fait la concaténation =)

<div id="consoles">
    <label for="consoles">Le produit est une console ? si non sur quel support est le produit * :</label>
        <select class="input    " name="id_consoles" required>
<?php
$res = $bdd->query('SELECT * FROM produits WHERE id_produits = '.$id.'');
$pdonnees = $res->fetch();
$req = $bdd->query('SELECT nom, id_consoles FROM consoles WHERE id_consoles='.$pdonnees'id_consoles'] .'');
$donnees = $req->fetch();
?><option value=<?php echo $donnees'id_consoles'] ;?> selected="selected"> <?php echo $donnees'nom'] ;?> </option>
<?php
$resultat = $bdd->query('SELECT * FROM consoles');
while ($cdonnees = $resultat->fetch()) :
?> <option value=<?php echo $cdonnees'id_consoles'] ;?>> <?php echo $cdonnees'nom'] ;?> </option>
<?php endwhile ?>
        </select>
    </div>

Merci pour l'aide

xander
Auteur

J'ai essayé ceci mais cela ne fonctionne pas une idée quelqu’un plz ?

<?php               
    //connection au serveur
    include ('includes/connexion_bdd.php'); 
    ?>
    <div id="consoles">
    <label for="consoles">Le produit est une console ? si non sur quel support est le produit * :</label>
        <select class="input    " name="id_consoles" required>
        <?php 
            $prec = $bdd->query('SELECT consoles.nom, consoles.id_consoles, produits.id_produits, produits.id_consoles FROM consoles, produits WHERE consoles.id_consoles=produits.id_consoles AND produits.id_produits = $id');
            $pdonnees = $prec->fetch();
        ?>
        <option value="<?php echo $pdonnees'produits.id_consoles']; ?>" selected><?php echo $pdonnees'consoles.nom']; ?></option>
            <?php
                // ici je récupère les consoles
                //connection au serveur
                $res = $bdd->query ('SELECT nom, id_consoles FROM consoles');

                while ($donnees = $res->fetch())
                {
                ?> <option value=<?php echo $donnees'id_consoles'] ;?>> <?php echo $donnees'nom'] ;?> </option><?php 
                }
                $res->closeCursor();
            ?>
        </select>
    </div>
xander
Auteur

voici une solution, mais qui comporte 2 erreurs que je ne trouve pas =s quelqu'un pourrais m'aider plz ?

<?php
                                // ici je récupère les consoles
                                //connection au serveur
                                $res = $bdd->query ('SELECT nom, id_consoles FROM consoles');
                                while ($donnees = $res->fetch()) {
                                echo ' <option value="'.$donnees'id_consoles'].'"
                                if( $pdonnees'produits.id_consoles'] == $donnees'id_consoles']) echo ' selected="selected";
                                echo '>'.$donnees'nom'].'</option>';
                                }
                                $res->closeCursor();
?>

erreur obtenue :

( ! ) SCREAM: Error suppression ignored for
( ! ) Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in F:\wamp\www\osg_test\editer_produits.php on line 84

Pour la dernière erreur tu as oublié un point virgule à la fin de ton echo (juste après ton while)

xander
Auteur

c'est plusieurs echo que j'ai voulue faire enfaîte dans le même echo et même en le fermant je garde les même erreurs

La ligne 84 de ton fichier editer_produits.php contient quoi?

xander
Auteur

il équivaut a la ligne 7 du code

$res = $bdd->query('SELECT nom, id_consoles FROM consoles');
while ($donnees = $res->fetch()) {
?><option value="<?php echo $donnees'id_consoles']; ?>" <?php if($pdonnees'produits.id_consoles'] == $donnees'id_consoles']){ ?> selected="selected" <?php } ?> >
<?php echo $donnees'nom']; ?></option>
}
$res->closeCursor();

Essaye ça. /!\ Règle n°1 en php, quand on écrit du html en php, toujours écrire le html hors du php. Donc éviter les echo.

Dans ton code tu as des problèmes de guillemet simples, de points virgules, ect...

xander
Auteur

humm tu avait oublier de ré-ouvrir une balise php après fixation j'obtiens bien ma page mais dans mon select j'ai cette erreur la
( ! ) SCREAM: Error suppression ignored for
undefined variable pdonnees je pense que sa viens faite que on récupère pas produits.id_consoles dans une requete SQL je vais regardé sa dis moi se que tu en pense

xander
Auteur

j'ai essayé ceci sa m'affiche plus d'erreur mais j'obtiens du vide o lieu de ma list select

<?php
$res = $bdd->query('SELECT nom, id_consoles FROM consoles');
$res2 = $bdd->query('SELECT id_consoles FROM produits');
while ($donnees = $res->fetch() && $pdonnees = $res2->fetch()) {
?><option value="<?php echo $donnees'id_consoles']; ?>" <?php if($pdonnees'id_consoles'] == $donnees'id_consoles']){ ?> selected="selected" <?php } ?> >
<?php echo $donnees'nom']; ?></option>
 <?php }
$res->closeCursor();
?>

Je pense que ça va pas de mettre ton while comme ça.

dans la boucle dis moi se que contiennent donnees et pdonnees ?

xander
Auteur

j'ai testé ceci pour voir se que je récupère, j'avais remarqué que il manqué id_produits=$id dans ma requête $res2
j'ai donc fait un test directement sur l'id

<?php               
    //connection au serveur
    include ('includes/connexion_bdd.php'); 
$res = $bdd->query('SELECT nom, id_consoles FROM consoles');
$res2 = $bdd->query('SELECT * FROM produits WHERE id_produits = 78');
$donnees = $res->fetch();
$pdonnees = $res2->fetch();
$pdonnees'id_consoles'] == $donnees'id_consoles'];
echo ' donneesnom '.$donnees'nom'].'';
echo ' donneesidconsoles ' .$donnees'id_consoles'].'';
echo ' pdonnees ' .$pdonnees'id_consoles'].'';
$res->closeCursor();
    ?>

apprès petit correction j'obtiens :

donneesnom Consoles donneesidconsoles 1 pdonnees 4

Ce qui correspond a se que j'ai dans ma bdd :

xander
Auteur

petite optimisation du code en relisant mon post j'ai obtenue ceci :

<?php               
    //connection au serveur
    include ('includes/connexion_bdd.php'); 
$res = $bdd->query('SELECT * FROM produits WHERE id_produits = 78');
$pdonnees = $res->fetch();
$req = $bdd->query('SELECT nom, id_consoles FROM consoles WHERE id_consoles='.$pdonnees'id_consoles'] .'');
$donnees = $req->fetch();
$pdonnees'id_consoles'] == $donnees'id_consoles'];
echo ' donneesnom '.$donnees'nom'].'';
echo ' donneidconsoles ' .$donnees'id_consoles'].'';
echo ' pdonnees ' .$pdonnees'id_consoles'].'';
$res->closeCursor();
    ?>

resultat :

donneesnom Playstation 3 donneidconsoles 4 pdonnees 4

xander
Auteur

je suis bloqué ici pour l'instant je pense que je suis proche du but

<?php               
    //connection au serveur
    include ('includes/connexion_bdd.php'); 
    ?>
    <div id="consoles">
    <label for="consoles">Le produit est une console ? si non sur quel support est le produit * :</label>
        <select class="input    " name="id_consoles" required>
<?php
$res = $bdd->query('SELECT * FROM produits WHERE id_produits = $id');
$pdonnees = $res->fetch();
$req = $bdd->query('SELECT nom, id_consoles FROM consoles WHERE id_consoles='.$pdonnees'id_consoles'] .'');
while ($pdonnees = $res->fetch() && $donnees = $req->fetch()) {
?><option value="<?php echo $donnees'id_consoles']; ?>" <?php if($pdonnees'id_consoles'] == $donnees'id_consoles']){ ?> selected="selected" <?php } ?> >
<?php echo $donnees'nom']; ?></option>
 <?php }
$res->closeCursor();
$req->closeCursor();
?>
        </select>
    </div>

j'ai pas de message d'erreur mais j'ai pas de résultat non plus un select vide et le reste de mon code n'est pas affiché

Je reprends ton truc:

  • Au début tu récupère toutes les informations sur un produit par rapport à un id

    $res = $bdd->query('SELECT * FROM produits WHERE id_produits = $id');
    $pdonnees = $res->fetch();

Donc $pdonnees contient les infos d'un seul produit.

Il est là ton problème. $pdonnees contient donc qu'un seul id_console. Donc le while après existe pas. Déjà repose bien se que tu veux avec se qui est possible.

xander
Auteur

c'est se que j’étais entrain de me dire aussi parce que ce que je veut au final c'est juste que la valeur par défaut soit le nom de la console ou l'id_consoles équivaut a celui du produit je vais bien reposé mon code je te tien informé de l'évolution

xander
Auteur

voila j'ai réussi mais il y a un problème : voici le code par défaut

<div id="consoles">
    <label for="consoles">Le produit est une console ? si non sur quel support est le produit * :</label>
        <select class="input    " name="id_consoles" required>
<?php
$res = $bdd->query('SELECT * FROM produits WHERE id_produits = $id');
$pdonnees = $res->fetch();
$req = $bdd->query('SELECT nom, id_consoles FROM consoles WHERE id_consoles='.$pdonnees'id_consoles'] .'');
$donnees = $req->fetch();
?><option value=<?php echo $donnees'id_consoles'] ;?> selected="selected"> <?php echo $donnees'nom'] ;?> </option>
<?php
$resultat = $bdd->query('SELECT * FROM consoles');
while ($cdonnees = $resultat->fetch()) :
?> <option value=<?php echo $cdonnees'id_consoles'] ;?>> <?php echo $cdonnees'nom'] ;?> </option>
<?php endwhile ?>
        </select>
    </div>

il fonctionne pas car il me recupère pas le $id meme si je l'ai déclaré plus haut dans mon code : $id = $_GET'page'];

si je remplace $id par un id tel que 78 ici pour le produit concerné cela fonctionne. une idées ?