IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Fatal error: Uncaught Error: Call to a member function closeCursor() on bool


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2018
    Messages : 2
    Par défaut Fatal error: Uncaught Error: Call to a member function closeCursor() on bool
    Bonjour, je suis debutant en php, sql et je rencontre un probleme que je n'arrive pas a resoudre malgres mes recherches...

    Je vous laisse le code du fichier qui m'amene a ce probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    <?php
    define ('SITE_ROOT', realpath(dirname(__DIR__)));
    ini_set('display_errors',1);
     
    include "../bdd.php";
     
    if($_SERVER["REQUEST_METHOD"] == "POST"){
        if(isset($_FILES["photo"]) && $_FILES["photo"]["error"] == 0){
            $allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png");
            $filename = $_FILES["photo"]["name"];
            $filetype = $_FILES["photo"]["type"];
            $filesize = $_FILES["photo"]["size"];
     
            $ext = pathinfo($filename, PATHINFO_EXTENSION);
            if(!array_key_exists($ext, $allowed)) die("Erreur : Veuillez sélectionner un format de fichier valide.");
     
            $maxsize = 5 * 1024 * 1024;
            if($filesize > $maxsize) die("Error: La taille du fichier est supérieure à la limite autorisée.");
     
            if(in_array($filetype, $allowed)){
                if(file_exists("upload/" . $_FILES["photo"]["name"])){
                    echo $_FILES["photo"]["name"] . " existe déjà.";
                } else{
                    $lien_p = date('YmdHis').".".$_FILES["photo"]["name"];
                    move_uploaded_file($_FILES["photo"]["tmp_name"], SITE_ROOT."/../uploads/Produits/".$lien_p);
                    echo "Votre fichier a été téléchargé avec succès.";
                }
            } else{
                echo "Error: Il y a eu un problème de téléchargement de votre fichier. Veuillez réessayer.";
            }
        }
    }
     
    if (isset($_POST['type']))
        $fam = $_POST['type'];
     
    if (isset($_POST['nom']))
        $nom = $_POST['nom'];
     
    if (isset($_POST['desc']))
        $desc = $_POST['desc'];
     
    if (isset($_POST['ref']))
        $ref = $_POST['ref'];
     
    if (isset($_POST['fourni']))
        $fourni = $_POST['fourni'];
     
    if (isset($_POST['obs']))
        $obs = $_POST['obs'];
     
    if (isset($_POST['pa']))
        $pa = $_POST['pa'];
     
    if (isset($_POST['pv']))
        $pv = $_POST['pv'];
     
    if (isset($_POST['nbh']))
        $nbh = $_POST['nbh'];
     
    if (isset($_POST['statut']))
        $statut = $_POST['statut'];
     
    if (!isset($statut))
        $statut = 0;
     
    if (isset($_FILES["photo"]))
        $req = $db->query("INSERT INTO articles (art_fam, art_nom, art_desc, art_ref, art_fournisseur, art_obs, art_pa, art_pv, art_nbh, art_actif, art_photo) VALUES (\"$fam\", \"$nom\", \"$desc\", \"$ref\", \"$fourni\", \"$obs\", \"$pa\", \"$pv\", \"$nbh\", \"$statut\", \"$lien_p\")");
    else
        $req = $db->query("INSERT INTO articles (art_fam, art_nom, art_desc, art_ref, art_fournisseur, art_obs, art_pa, art_pv, art_nbh, art_actif) VALUES (\"$fam\", \"$nom\", \"$desc\", \"$ref\", \"$fourni\", \"$obs\", \"$pa\", \"$pv\", \"$nbh\", \"$statut\")");
     
    $req_last_id = $db->query("SELECT LAST_INSERT_ID() FROM articles");
    $last_id = $req_last_id->fetch();
    $new_id = $last_id[0];
     
    $req->closeCursor();
    $req_last_id->closeCursor();
     
    header('Location: product-info.php?p_id='.$new_id.'');
    En enlevant le closeCursor, je n'arrive pas a recuperer le dernier id, qui est du coup egal a 0.

    Merci pour votre aide !

    Je viens de tester et quand je ne met pas de fichier, ça fonctionne, donc le probleme viens du $_FILES je pense. Je suis preneur si vous avez des suggestion au niveau de l'amelioration du code aussi... Merci beaucoup.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 513
    Par défaut
    Salut,

    Avant d'optimiser le code, il faut :
    1-Vérifier d'abord si tu as un attribut enctype dans le <form> de ton formulaire (que tu dois nous montrer au passage...)
    2-S'assurer que l'echo des ligne 26 ou 29 sont bien là quand tu envois l'image.
    3-Corriger le nom du dossier de destination upload ou bien uploads?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(file_exists("upload/" . $_FILES["photo"]["name"])){...}
    //puis après on trouve :
    move_uploaded_file($_FILES["photo"]["tmp_name"], SITE_ROOT."/../uploads/Produits/".$lien_p);
    Pour l'optimisation et correction de la dernière partie du code,il ne faut jamais passer des variables directement dans les requêtes comme ça, on doit plutôt les préparer comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    $exec= array($fam,$nom,$desc,$ref,$fourni,$obs,$pa,$pv,$nbh,$statut);//tableau qui sera utilisé dans execute.
    $debut="INSERT INTO articles (art_fam, art_nom, art_desc, art_ref, art_fournisseur, art_obs, art_pa, art_pv, art_nbh, art_actif";
    $values=" values (?,?,?,?,?,?,?,?,?,?";
    if (isset($_FILES["photo"]) && $_FILES['photo']["size"]>0){
          /* j'ajoute $_FILES['photo']['size']>0
          , et tu peux même remplacer les deux conditions par if( isset($lien_p) ) vu que $lien_p n'est initialisé que seulement s'il y a une image*/
        $debut.=",art_photo)";
        $values.=",?)";
        $exec[]=$lien_p;
     
    }else{
        $debut.=')';
        $values.=')';
    }
    $req = $db->prepare($debut.$values);
    $req->execute($exec);
    $last_id = $db->lastInsertId();//en pdo, on peut récupéré le dernier id inséré avec lastInsertId()
    echo 'last id :'.$last_id;
    //$req->closeCursor(); pas la peine de fermer le curseur ici
    unset($db);//détruire la connexion
    Il y a encore d'autres modification à faire, mais je vais pas t'embêter pour l'instant...

Discussions similaires

  1. Fatal error: Call to a member function closeCursor() on a non-object
    Par MrSoGood dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 20/06/2015, 12h51
  2. Fatal error: Call to a member function closeCursor() on a non-object
    Par stade13 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/12/2011, 19h15
  3. [PHP 5.2] Fatal error: Call to a member function bindValue() on a non-object
    Par TeraD dans le forum Langage
    Réponses: 4
    Dernier message: 23/06/2009, 00h20
  4. Fatal error: Call to a member function on a non-object
    Par alemat13 dans le forum Langage
    Réponses: 6
    Dernier message: 31/12/2007, 17h22
  5. Fatal error: Call to a member function fetchAll()
    Par misterniark dans le forum Zend_Db
    Réponses: 2
    Dernier message: 15/06/2006, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo