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 :

Erreur d'origine inconnue


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 14
    Points : 9
    Points
    9
    Par défaut Erreur d'origine inconnue
    bonjour
    je voudrais inserer classiquement des donnees dans une bdd mais non seulement ca ne marche pas mais en plus ca provoque une erreur qui empeche d'afficher le reste de la page et impossible de trouver d'ou viens l'erreur

    Ps: le echo s'affiche bien le probleme vient donc de la 2eme partie

    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
    $character= "'";
    $replace = "\'" ;
    $description1 = $_POST['description1'];
    $description1 = str_replace ( $character , $replace ,  $description1, )  ; 
    $donnees = [
     'name' => '[$_POST[name]]',  
     'categorie' => '[$_POST[categorie]]',
     'description' => '[$description1]',
     'divers' => '[$description1]',
    ];
     
        echo $description1;   
     
    $req2 = $db->execute(
    "INSERT INTO file VALUES (:name, :categorie, :description, :divers)"
    );
    $req2 ->execute([$donnees]); 
    }


    merci de votre aide

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 194
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 194
    Points : 8 409
    Points
    8 409
    Billets dans le blog
    17
    Par défaut
    ca provoque une erreur
    Dommage, tu ne dis pas laquelle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $character= "'";
    $replace = "\'" ;
    $description1 = $_POST['description1'];
    $description1 = str_replace ( $character , $replace , $description1, ) ;
    Ce n'est pas la bonne manière d'échapper '. Il faut soit utiliser PDO::quote(), soit préparer la requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $donnees = [
    'name' => '[$_POST[name]]',
    'categorie' => '[$_POST[categorie]]',
    'description' => '[$description1]',
    'divers' => '[$description1]',
    ];
    Je vois l'idée, mais ça ne produira pas le résultat attendu. Fais un var_dump($donnees); pour t'en convaincre.

    Il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $donnees = [
        'name' => $_POST['name'],
        ...
    ];
    Ceci est incorrect :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $req2 = $db->execute(
    "INSERT INTO file VALUES (:name, :categorie, :description, :divers)"
    );
    $req2 ->execute([$donnees]);
    }
    Avec PDO il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = 'INSERT INTO file VALUES (:name, :categorie, :description, :divers)';
    $insert = $pdo->prepare($sql);
    $insert->execute($donnees);
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    j'ai testé ton code mais le résultat est le même



    Ce qui est étrange c'est que j'utilise quasi le même code plus haut et qu'il marche parfaitement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      $req = $db->prepare('INSERT INTO file (photo) VALUES (?)');
        $req->execute([$file2]);
    et pourtant je ne vois pas la différence entre les 2 codes mis à part les variables bien sur

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 239
    Points : 12 869
    Points
    12 869
    Par défaut
    Bonjour,
    Je vois une grosse différence: tu spécifies la liste des colonnes dans la seconde requête, et pas dans la première.
    Donc tu prends le risque que les valeurs ne soient pas affectées aux bonnes colonnes.

    Tatayo.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    J'ai testé la méthode la plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = 'INSERT INTO file (name,categorie,description,divers)  VALUES
      ($_FILES[name], $_FILES[categorie], $_FILES[description], $_FILES[divers] )';
    $req2 ->execute([$sql]);
    mais même cette version ne passe pas
    par contre dans cette version impossible de mettre des " ' " entre les "[ ]" sous peine de message d'erreur ( pourquoi ?!?!?!? )
    En plus de ne pas arriver a enregistrer mes données j'ai beau relire 200 fois le code je ne trouve pas ce qui peut provoquer cette erreur
    j'en suis venu à vérifier ma bdd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #	Nom	                Type	             Interclassement	Attributs	Null	Valeur par défaut		Extra	
    1	id Primaire  	int(11)			                                Non	 Aucun(e)		   AUTO_INCREMENT		
    2	name	        varchar(255)	utf8mb4_unicode_ci	        Non	Aucun(e)			 	
    3	categorie	        varchar(255)	utf8mb4_unicode_ci	        Non	Aucun(e)				
    4	description  	varchar(255)	utf8mb4_unicode_ci	        Non	Aucun(e)				
    5	photo	        varchar(255)	utf8mb4_ unicode_ci	        Non	Aucun(e)			
    6	divers	        varchar(255)	utf8mb4_unicode_ci	        Non	Aucun(e)				
     
    Avec la sélection :  Tout cocher Avec la sélection :
    mais la non plus je vois pas d'erreurs
    j'ai aussi entoure ma requête d'un try {} catch {} mais la non plus aucun retour

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 291
    Points : 39 558
    Points
    39 558
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    La moindre des choses serait de publier le message d'erreur exact.

    Quoi qu'il en soit, toutes les colonnes sont "not null", ce qui est très bien et avec default ='no', or, vous ne fournissez des valeurs que pour 4 colonnes (hors ID calculé par le SGBD), ce faisant, il est normal que la requête ne fonctionne pas.

    Par ailleurs, il ne faut pas mettre les longueurs des attributs au hasard, varchar(255) partout c'est n'importe quoi.
    Et la catégorie devrait probablement faire l'objet d'une table de typologie et avec ici une FK pointant vers cette table de typologie.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    La moindre des choses serait de publier le message d'erreur exact.
    la réponse était dans une partie que vous avez supprimée précédemment

    Par ailleurs, il ne faut pas mettre les longueurs des attributs au hasard, varchar(255) partout c'est n'importe quoi.
    je les ai modifiées à 55

    Et la catégorie devrait probablement faire l'objet d'une table de typologie et avec ici une FK pointant vers cette table de typologie.
    la j'avoue j'ai pas tout compris (je débute) tout ce que je peux dire c'est que la donnée vient d'un simple menu déroulant et il n'y aura pas de sous catégories prévues

    table de typologie ???
    FK ???

    j'ai modifié le code en fonction des remarques précédentes ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     $donnees = [
     'name' => $_POST[name],  
     'categorie' => $_POST[categorie],
     'description' => $_POST[description1],
     'photo' => $file2,
     'divers' => $_POST[divers]
     ];
     
    $sql= 'INSERT INTO file VALUES (:name, :categorie, :description, :photo, :divers)';
    $insert = $pdo->prepare($sql);
    $insert->execute($donnees);
    et qui ne marche évidemment pas (PDO est bien activé dans les options sql)

  8. #8
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 194
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 194
    Points : 8 409
    Points
    8 409
    Billets dans le blog
    17
    Par défaut
    et qui ne marche évidemment pas (PDO est bien activé dans les options sql)
    Comme déjà évoqué, il faut communiquer systématiquement les messages d'erreur, et je n'en vois toujours pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $donnees = [
     'name' => $_POST[name],  
     'categorie' => $_POST[categorie],
     'description' => $_POST[description1],
     'photo' => $file2,
     'divers' => $_POST[divers]
     ];
    La syntaxe utilisée pour initialiser $donnees est incorrecte. Se reporter à mon code.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  9. #9
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 430
    Points : 5 784
    Points
    5 784
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    la discussion est résolu ; ça serait bien de dire comment...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/09/2007, 17h34
  2. [VB6-Access]Erreur de champ inconnu
    Par Xan dans le forum Langage SQL
    Réponses: 10
    Dernier message: 13/04/2006, 16h24
  3. [VB6-Access]Erreur de champ inconnu
    Par Xan dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 13/04/2006, 16h15
  4. [Socket][Client/Server]Exception d'origine inconnue
    Par willowII dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 03/11/2005, 22h36
  5. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42

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