Variable SESSION ne s'incrémente pas

Répondre


Veuillez compléter la vérification suivante afin de nous permettre de lutter contre les publications automatisées indésirables.
Émoticônes
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Accéder à davantage d’émoticônes
  Relecture du sujet
 

  Agrandir Relecture du sujet : Variable SESSION ne s'incrémente pas

Re: Variable SESSION ne s'incrémente pas

par moogli » Hier, 11:24

alors oui déjà il faut commencer la boucle à 1 et pas zéro vu que tes champs se nomment image1, image2 et image3

le plus simple c'est quand même d'utiliser un tableau pour les champs de type file tu auras juste a parcourir $_FILES avec un foreach

ensuite le problème de ton code c'est que génère un tableau avec les nom des fichiers copier dans photo (d'ailleurs ce serait pas mal de garder l'extension du fichier pour éviter les emmerdes à l'affichage ;) ).
ce nouveau tableau tu n'en gère pas les clefs, du coup cela commence à zéro et non 1 comme tu le penses ;)

le plus simple est de forcer l'id dans le tableau que tu créés.
=> $imagesPourBD[$i] = $nom;
et ça fonctionne comme par magie ;)


résultat :
|| *id* || *id_membre* || *titre* || *prix* || *message* || *marque* || *telephone* || *image1* || *image2* || *image3* ||
|| 3 || 42 || fgfg || gfgf || gfgfgf || fgfg || fgfgfg || 2ce86dc02cd6561dc615df5ffdde0fd8 || 4ea4037327e9b41ec6cf92cf2f22221b || 81e4b10cdaee15bd0b0e79c351a35675 ||

le code corrigé et testé https://gist.github.com/anonymous/4eaaa ... 7433322718

@+

Re: Variable SESSION ne s'incrémente pas

par Nephilme » 22 mars 2017, 18:19

En fin de compte, j'ai résolu a peu près tout mes problèmes, excepté un, dont je n'arrive pas à trouver l'erreur..
Je n'ai donc plus d'erreur s'affichant sur ma page insertion_bdd, et les 3 images sont "transferer sur la bdd", a part image3, qui reste vide dans ma base, pourtant j'insert bien une image lors de l'input..
Voilà mon code :

insertion_bdd:
<?php
    session_start();
       
    //Si le fichier n'est pas transmis pas besoin de faire tout ce fatra
    // Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
    $imagesPourBD = array();
    for ($i=0; $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&eacute;r&eacute; 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&eacute;ro '.$i.' n\'a &eacute;t&eacute; charg&eacute;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=xxxxxx;dbname=xxx', '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 .= "(:id_membre, :titre, :prix, :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++) {
                    if (isset($imagesPourBD[$i]) && strlen(trim($imagesPourBD[$i])) > 0) {
                        $stmt->bindValue('image'.$i,$imagesPourBD[$i]);
                    } else {
                        $stmt->bindValue('image'.$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'ai essayer de changer les valeur de "for ($i=1; $i<4;$i++)" pensant que c'était ca le problème mais apparemment non ? A moins que je l'ai mal modifier .. =D>

Re: Variable SESSION ne s'incrémente pas

par moogli » 21 mars 2017, 15:40

Column 'image3' cannot be null => la colonne image3 ne peux pas être null

donc a priori tu n'as pas d'image N°3

ajoute un var_dump($imagesPourBD); avant la requête pour voir qu'il y a dans ce tableau.

@+

Re: Variable SESSION ne s'incrémente pas

par Nephilme » 21 mars 2017, 14:09

Bonjour moogli !
Merci pour le conseil sur les images, j'y penserais ! :)

J'ai reussi a avancer un petit peu, maintenant une nouvelle erreur m'empeche l'enrengistrement dans la table : Connexion impossible: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'image3' cannot be null
Qu'est ce que cela veux voiloir dire ? Car peut importe les image que j'envoie, c'est toujours le image3 qui pose problème :?

Re: Variable SESSION ne s'incrémente pas

par moogli » 21 mars 2017, 10:38

salut,

alors coté base c'est presque bien. il te faut mettre les images dans une seconde table cela te permet de gagner en souplesse d'utilisation (tu peux modifier très facilement le nombre d'images possible, en plus ou en moins, en fonction du membre ou pas ...). C'est aussi un gain sur taille de base car je suppose que c'est des varchar et donc de la place prise même si il n'y a pas d'image ;)


coté html c'est le bordel, coté indentation et surtout tu as deux <form action="insertion_bdd.php" method="post" enctype="multipart/form-data"> (donc supprime le second).
il y a quoi dans $_SESSION ? (var_dump($_SESSION); )

c'est quoi le problème en vrai ?
une erreur SQL ?
Cette erreur me semble normale vu que tu as deux "values" dans la requête SQL (ce qui ne doit pas trop plaire à mysql ;) )
$requete = "INSERT INTO fiche_voiture (id_membre, titre, prix, message, marque, telephone, image1, image2, image3)";
$requete .= " VALUES ";// OUPS !!!
$requete .= " VALUES (:id_membre, :titre, :prix, :message, :marque, :telephone, :image1, :image2, :image3)";
si tu as un message d'erreur il faut l'indiquer dans ta demande.
si tu ne le vois pas regarde la source htlm ou vire une éventuelle redirection.
Le mieux c'est le débogueur avec un IDE ;)

@+

Re: Variable SESSION ne s'incrémente pas

par Nephilme » 20 mars 2017, 21:37

La page creation_fiche contient un session_start que je n'ai pas ajouter au code joint, comme la page insertion_bdd, je pensais que cela suffisait à transmettre la valeur de $_SESSION['id'] ?
J'ai aussi essayer de transmettre cette valeur par le biais d'un input ( bien que je pense que ce ne soit pas la solution car cela ne marche pas non plus, a moins que je me sois tromper dans la déclaration de celui ci ).

Voila le code complet de ma page creation_fiche, au cas ou cela pourrais aider.. à m'aider :lol:

creation_fiche :
<?php
session_start();
$bdd = new PDO('mysql:host=xxxxx;dbname=xxxx', 'xxxx', 'xxxx');
if(isset($_SESSION['id']))
{
?>
<div class="title-project"><form action="insertion_bdd.php" method="post" enctype="multipart/form-data">
						<h1>Titre: <input type="text" name="titre" /></h1>
					</div>
					<input type="file" name="image1"/>
					<input type="file" name="image2"/>
					<input type="file" name="image3"/>
					</br>
					<div class="project-content">
						<div class="row">
							<div class="col-md-9">
								<h2>A propos: </h2>
								<textarea name="message" placeholder="Message" style="width:714px; height: 133px;"></textarea>
							</div>
							<div class="col-md-3">
								<h2>Informations complémentaires</h2>
								<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>
<?php
}
else
{
	header("Location: connexion.php");
}
?>
Je ne vois vraiment pas comment l'inserer afin de pouvoir recuperer cet id dans ma page "insertion_bdd" autre qu'avec un session_start.
Tout les champs s'incrémente sans aucuns problèmes hormis le champs id_membre

Re: Variable SESSION ne s'incrémente pas

par or 1 » 20 mars 2017, 21:27

il faudrait le code qui mets une valeur dans $_SESSION['id']

Variable SESSION ne s'incrémente pas

par Nephilme » 20 mars 2017, 21:22

Bonjour à tous !
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 plusieurs 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
    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&eacute;r&eacute; 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&eacute;ro '.$i.' n\'a &eacute;t&eacute; charg&eacute;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, :prix, :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();
        }
    }
?>
Je commence a désespérer après plusieurs jours bloquer sur ce problème et en ayant fait plusieurs modification possible, sans avoir aucuns résultat.. La valeur de la SESSION ne s'incrémente jamais à la table dans l'espace id_membre..
J’espère avoir été assez compréhensible, et vous remercie d'avance pour votre aide !!