Lier id membre/article

Suivre ce topic
Ce topic est suivi par : Personne...
babal

babal Le 19 mars 2017 à 16:09 (Édité le 25 janvier 2019 à 17:53)

Bonjour !
Après de nombreuses recherches infructueuses je m'en remet à vous !
Je suis encore un débutant en PhP et après avoir suivi et fini le cours PhP je n'arrive toujours pas à comprendre et a mettre en place un
système d'article reprenant l'id d'un membre afin de le lier à l'article
créer afin de pouvoir poster chaque article appartenant au dit membre.
Ma partie sql se compose en deux partie :
- Une partie création membre, qui génère un id en auto avec le pseudo, le mdp ainsi que l'adresse mail.
- l'autre partie composée d'une table "article" comprenant : id ( de l'article ), id_membre, titre, message, etc..

Voilà les deux partie du code :
creation_fiche :
<form action="insertion_bdd.php" method="post" enctype="multipart/form-data"><br><h1>Titre: <input type="text" name="titre" /></h1>
    <input type="file" name="image1"/>
        <input type="file" name="image2"/>
            <input type="file" name="image3"/>
                <textarea name="message" placeholder="Message" style="width:714px; height: 133px;"></textarea>
                    <p>Marque: <input type="text" name="marque" /></p>
                        <p>Prix: <input type="text" name="prix" /></p>
                            <p>Numero de téléphone: <input type="text" name="telephone" /></p>
                                <input type="submit" value="Envoyer" /><form action="insertion_bdd.php" method="post" enctype="multipart/form-data"><br><h1>Titre: <input type="text" name="titre" /></h1>
insertion_bdd :
<?php
// Connexion à la base de données
    $bdd = new PDO('mysql:xxx=xxx;dbname=xxxx', 'xxxx', 'xxxx');
 
 $idclient = $_SESSION['id'];
 
 
// Insertion du message à l'aide d'une requête préparée
$nom = md5(uniqid("produit_", true));
$name = "photo/".str_replace(' ','',$nom);
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['image1']) AND $_FILES['image1']['error'] == 0)
{
        // Testons si le fichier n'est pas trop gros
        if ($_FILES['image1']['size'] <= 1000000)
        {
                // Testons si l'extension est autorisée
                $infosfichier = pathinfo($_FILES['image1']['name']);
                $extension_upload = $infosfichier['extension'];
                $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
                if (in_array($extension_upload, $extensions_autorisees))
                {
                        // On peut valider le fichier et le stocker définitivement
                          
                       $result = move_uploaded_file($_FILES['image1']['tmp_name'], $name);
if ($result) echo "Transfert réussi"; else { echo 'echec transfert';}
                          
  
                }
        }
} 
 
// Insertion du message à l'aide d'une requête préparée
$nom2 = md5(uniqid("produit_", true));
$name = "photo/".str_replace(' ','',$nom2);
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['image2']) AND $_FILES['image2']['error'] == 0)
{
        // Testons si le fichier n'est pas trop gros
        if ($_FILES['image2']['size'] <= 1000000)
        {
                // Testons si l'extension est autorisée
                $infosfichier = pathinfo($_FILES['image2']['name']);
                $extension_upload = $infosfichier['extension'];
                $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
                if (in_array($extension_upload, $extensions_autorisees))
                {
                        // On peut valider le fichier et le stocker définitivement
                          
                       $result = move_uploaded_file($_FILES['image2']['tmp_name'], $name);
if ($result) echo "Transfert réussi"; else { echo 'echec transfert';}
                          
  
                }
        }
} 
 
// Insertion du message à l'aide d'une requête préparée
$nom3 = md5(uniqid("produit_", true));
$name = "photo/".str_replace(' ','',$nom3);
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['image3']) AND $_FILES['image3']['error'] == 0)
{
        // Testons si le fichier n'est pas trop gros
        if ($_FILES['image3']['size'] <= 1000000)
        {
                // Testons si l'extension est autorisée
                $infosfichier = pathinfo($_FILES['image3']['name']);
                $extension_upload = $infosfichier['extension'];
                $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
                if (in_array($extension_upload, $extensions_autorisees))
                {
                        // On peut valider le fichier et le stocker définitivement
                          
                       $result = move_uploaded_file($_FILES['image3']['tmp_name'], $name);
if ($result) echo "Transfert réussi"; else { echo 'echec transfert';}
                          
  
                }
        }
} 
try
{
$req = $bdd->prepare('INSERT INTO fiche_voiture (id_membre, titre, prix, message, marque, telephone, image1, image2, image3) VALUES(?, ?, ?, ?, ?, ?, ?, ?)');
$req->execute(array($idclient, $_POST['titre'], $_POST['prix'], $_POST['message'], $_POST['marque'], $_POST['telephone'], $nom, $nom2, $nom3));
}
catch(Exception $e)
{
    // En cas d'erreur précédemment, on affiche un message et on arrête tout
    die('Erreur : '.$e->getMessage());
}
// Redirection du client
header('Location: creation_fiche.php');
?>
Je ne comprend pas comment je peu récupérer l'id du membre qui post le message, afin de l’insérer dans la bdd..
J’espère avoir été assez compréhensible et vous remercie d'avance pour l'aide que vous pourrez m'apporter !
Zbuu

Zbuu Le 19 mars 2017 à 17:10

Yop! 

Pour récupérer l'id d'un membre connecté, il faut déjà savoir si lorsqu'il se connecte tu lui attribut bien son id dans la session ? 
Puisque que dans ton code tu assignes $_SESSION['id'] à la variable $idclient j'imagine que oui, mais par contre je ne vois pas que tu démarre la session.

Pour avoir accès au variable de session du doit mettre la fonction :
session_start();
babal

babal Le 19 mars 2017 à 17:49

L'id est bien attribuer, sur la page d'editionProfil j'y vois dans l'url ".php?id=12", puis dans la page creation_fiche, j'y ai fais un echo afin de voir si la session est toujours attribuer et c'est bien le cas.

Je viens d'ajouter le session_start, et ca ne marche toujours pas.. Il doit me manquer un petit truc mais je ne vois pas du tout ce que ca peut être..
babal

babal Le 20 mars 2017 à 23:36

Voila la partie "insertion_bdd", plus compréhensible surement :
<?php
    session_start();
     
 
    // Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
    $imagesPourBD = array();
    for ($i=1; $i<4;$i++) {
        if (isset($_FILES['image'.$i]) AND $_FILES['image'.$i]['error'] == 0) {
            // Testons si le fichier n'est pas trop gros
            if ($_FILES['image'.$i]['size'] <= 1000000) {
                // Testons si l'extension est autorisée
                $infosfichier = pathinfo($_FILES['image'.$i]['name']);
                if (in_array($infosfichier['extension'], array('jpg', 'jpeg', 'gif', 'png'))) {
                    // On peut valider le fichier et le stocker définitivement
                    $nom = md5(uniqid("produit_", true));
                    $name = "photo/".str_replace(' ','',$nom);
                    if (move_uploaded_file($_FILES['image'.$i]['tmp_name'], $name)) {
                        //Sauvegarde des noms pour la requête SQL
                        $imagesPourBD[] = $nom;
                        echo "Image transféré sur le serveur";
         
                        /*
                         * A partir de là on peut traiter le SQL
                         */
         
                    } else {
                        echo 'echec transfert image sur le serveur';
                    }
                } else {
                    echo '<br/>Les extensions valides sont: "jpg","jpeg","gif" et "png"';
                }
            } else {
                echo '<br/>Votre fichier est trop gros => 1000 000 octets max';
            }
        } else {
            echo 'Aucune image numéro '.$i.' n\'a été chargée';
        }
    }
 
    if (sizeof($imagesPourBD) > 0) {
        /*
         * Pour simplifier je mets tout dans le try / catch
         */
        try{
            // Connexion à la base de données
            $bdd = new PDO('mysql:host=xxxxx;dbname=xxxx', 'xxxx', 'xxx',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
            $requete = "INSERT INTO fiche_voiture (id_membre, titre, prix, message, marque, telephone, image1, image2, image3)";
            $requete .= " VALUES ";
            $requete .= " VALUES (:id_membre, :titre, 😋rix, :message, :marque, :telephone, :image1, :image2, :image3)";
            $stmt = $bdd->prepare($requete);
            $stmt->bindValue('id_membre',$_SESSION['id']); //ID MEMBRE contenu en session
            $stmt->bindValue('titre',$_POST['titre']);
            $stmt->bindValue('prix',$_POST['prix']);
            $stmt->bindValue('message',$_POST['message']);
            $stmt->bindValue('marque',$_POST['marque']);
            $stmt->bindValue('telephone',$_POST['telephone']);
            for ($i=1; $i<4;$i++) {
                $stmt->bindValue('image'.$i,$imagesPourBD[$i]);
            }
            if (!$stmt->execute()) {
                echo '<br/>Erreur execute INSERT';
            } else {
                //OK
                echo '<br/>Insertion en base OK';
            }
        } catch (PDOException $pdoE) {
            echo 'Connexion impossible: '.$pdoE->getMessage();
        }
    }
?>
J'espère que quelqu'un pourra m'aider, je ne m'en sort vraiment pas sur cette affaire .. :(
TheFlameflo

TheFlameflo Le 21 mars 2017 à 02:25

Salut !

Pour le session_start(), le mets-tu sur toutes tes pages ? Si non, tu dois le faire.
De plus, pourrais-tu montrer la page de connexion (pour voir ce qui arrive avec l'id) ?
Finalement, pourrais-tu faire un var_dump de la variable $_SESSION ?
Zbuu

Zbuu Le 23 mars 2017 à 02:22

Je rajouterais à ce que TheFlameflo dit que le session_start doit être initialiser avant tout affichage html 😀 
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte