Récupérer les catégories d'une table dans option value

Eléphant du PHP | 65 Messages

03 déc. 2021, 16:07

Bonjour tout le monde, je cherche de l'aide pour ajouter id_categorie (qui est la clé étrangère) dans ma table lorsque le formulaire est soumis, sauf que je n'arrive pas

1- table categories a pour champs (id et nom).--> Cette table est liée à annonces.

2- annonces a pour champs (id, id_categorie.....).

Je pense que le problème se situe au niveau de ma fonction getCategories. Le formulaire affiche des erreurs lors de la soumission:

Notice: Array to string conversion in

366 Incorrect integer value: 'Array' for colum

Ai-je mal fait ma fonction ou mon mon formulaire?

formulaire:

Code : Tout sélectionner

<label for="categorieannonce"><?php echo $lang['ca'];?></label> <select name="categorie"> <optgroup label= "<?php echo $lang['immo'];?>"> <option value= "1"> <?php echo $lang['appa'];?></option> <option value= "2"> <?php echo $lang['mv'];?></option> <option value= "3"> <?php echo $lang['terr'];?></option> </optgroup> <br> <br>
fonctiongetCategories:

Code : Tout sélectionner

function getCategories(){ global $bdd; $sql='SELECT * FROM categories'; try{ $req = $bdd->prepare($sql); $req->execute(); $datas= $req->fetchAll(PDO::FETCH_ASSOC); } catch(Exception $e){ echo "Erreur dans la requête " . $sql; } // le temps des tests pour voir le résultat return $datas;}

Code : Tout sélectionner

if(isset($_POST['formannonce'])) { $id_categorie= getCategories(); }

Avatar du membre
Mammouth du PHP | 1564 Messages

03 déc. 2021, 16:29

Pour l'erreur te faut regarder le code à la ligne 366.

Pour rechercher avec un id, il te faudra envoyer un paramètre dans ta fonction getcat puis dans ta fonction getcat ajouter ce paramètre à ta requête SQL (attention aux injections SQL).

Eléphant du PHP | 65 Messages

03 déc. 2021, 17:20

Pour l'erreur te faut regarder le code à la ligne 366.

Pour rechercher avec un id, il te faudra envoyer un paramètre dans ta fonction getcat puis dans ta fonction getcat ajouter ce paramètre à ta requête SQL (attention aux injections SQL).
Bonjour, Merci pour ta réponse. Pour insérer un paramètre dans une fonction de type insertX, c'est plus facile pour moi, mais pour une fonction select jamais essayé, et dans ce cas de figure elle est nécessaire. Donc du coup, j'ai fait ainsi, mais ça ne marche pas.

Code : Tout sélectionner

function getCategories($nom_categorie){ global $bdd; $sql="SELECT * FROM categories WHERE id= '.nom_categorie.' "; try{ $req = $bdd->prepare($sql); $req->execute(); $datas= $req->fetchAll(PDO::FETCH_ASSOC); } catch(Exception $e){ echo "Erreur dans la requête " . $sql; } // le temps des tests pour voir le résultat return $datas; }

Code : Tout sélectionner

$nom_categorie= trim($_POST['categorie']); $id_categorie= getCategories($nom_categorie);

Avatar du membre
Mammouth du PHP | 1564 Messages

03 déc. 2021, 20:06

C'est normal :
$sql="SELECT * FROM categories WHERE id= '.nom_categorie.' ";
si id est un entier ou float, tu peux demander à chercher sans apostrophes, sinon, c'est une chaine, donc tu doit en mettre, puis là tu recherche '.nom_categorie.', soit .nom_categorie., c'est normal qui trouve rien, il te faut mettre ce que tu donne en paramètre à ta fonction, avec le $ (ceci fonctionnerai sans doute: id='$nom_categorie' (attention aux injections ! vérifie ce que l'utilisateur à envoyé comme données, tu peux très bien avoir une personne mal intentionnée qui te POST d'autre valeur que tes nom de catégorie et faire une injection SQL)

Eléphant du PHP | 65 Messages

03 déc. 2021, 20:48

C'est normal :
$sql="SELECT * FROM categories WHERE id= '.nom_categorie.' ";
si id est un entier ou float, tu peux demander à chercher sans apostrophes, sinon, c'est une chaine, donc tu doit en mettre, puis là tu recherche '.nom_categorie.', soit .nom_categorie., c'est normal qui trouve rien, il te faut mettre ce que tu donne en paramètre à ta fonction, avec le $ (ceci fonctionnerai sans doute: id='$nom_categorie' (attention aux injections ! vérifie ce que l'utilisateur à envoyé comme données, tu peux très bien avoir une personne mal intentionnée qui te POST d'autre valeur que tes nom de catégorie et faire une injection SQL)
J'ai enlevé les apostrophe,mais ça n'a pas marché, serait-ce en bidouillant également et en mettant le $ et en l'enlevant. Peut-être que l'erreur est au niveau du code ou, bien les options values="" ne sont pas reconnus.
Vici ce que j'obtiens comme erreur:
1- Erreur dans la requête SELECT * FROM categories WHERE id= .nom_categorie.
2-Notice: Undefined variable: datas in
3-Integrity constraint violation: 1048 Le champ 'id_categorie' ne peut �tre vide (null)

Code : Tout sélectionner

function getCategories($nom_categorie){ global $bdd; $sql="SELECT * FROM categories WHERE id= .nom_categorie. "; try{ $req = $bdd->prepare($sql); $req->execute(); $datas= $req->fetchAll(PDO::FETCH_ASSOC); }catch(Exception $e){ echo "Erreur dans la requête " . $sql; } // le temps des tests pour voir le résultat return $datas; }

Code : Tout sélectionner

if(isset($_POST['formannonce'])) { $nom_categorie= trim($_POST['categorie']); $id_categorie= getCategories($nom_categorie); }

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

03 déc. 2021, 22:52

J'ai enlevé les apostrophe,mais ça n'a pas marché

Code : Tout sélectionner

$sql="SELECT * FROM categories WHERE id= .nom_categorie. "; }
Bonjour,

Il faut revoir les bases de la concaténation de variables dans une chaine de caractère :
https://www.php.net/manual/fr/language. ... string.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 65 Messages

04 déc. 2021, 00:36

J'ai enlevé les apostrophe,mais ça n'a pas marché

Code : Tout sélectionner

$sql="SELECT * FROM categories WHERE id= .nom_categorie. "; }
Bonjour,

Il faut revoir les bases de la concaténation de variables dans une chaine de caractère :
https://www.php.net/manual/fr/language. ... string.php
Bonjour,
Merci, j'ai lu le lien que vous m'aviez envoyé, mais ça refuse toujours de me d'ajouter id_categorie dans la table annonces.
J'ignore si c'est l l'argument $nom_categorie de la fonction getcategories, ou les options values du formulaire...?

Code : Tout sélectionner

$sql="SELECT * FROM categories WHERE id= '$nom_categorie' ";
Erreur ! SQLSTATE[23000]: Integrity constraint violation: 1048 Le champ 'id_categorie' ne peut �tre vide (null)

Code : Tout sélectionner

if(isset($_POST['formannonce'])) { $nom_categorie= trim($_POST['categorie']); $id_categorie= getCategories($nom_categorie); }
et pour ($_POST['categorie']); j'ai bien chosit le name du <select>

Avatar du membre
Mammouth du PHP | 1564 Messages

04 déc. 2021, 00:43

d'ajouter id_categorie dans la table annonces.
Tu fais actuellement un SELECT, pas un INSERT INTO, je comprends pas vraiment ta demande .

Eléphant du PHP | 65 Messages

04 déc. 2021, 00:52

d'ajouter id_categorie dans la table annonces.
Tu fais actuellement un SELECT, pas un INSERT INTO, je comprends pas vraiment ta demande .
Il s'agit de deux tables

1- table categories a pour champs (id et nom).--> Cette table est liée à annonces.

2- annonces a pour champs (id, id_categorie.....).

==>L'objectif c'est lorsqu'on choisit dans le formulaire une catégorie (dans la table categories), que le champs id_categorie (dans la table annonces) soit remplit