[RESOLU] insérer plusieurs images dans la base de données avec un seul id

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] insérer plusieurs images dans la base de données avec un seul id

Re: insérer plusieurs images dans la base de données avec un seul id

par djek_loic » 22 mars 2022, 09:24

Merci beaucoup pour vos conseils j'ai pu résoudre le problème avec le méthode de YNX: lastInsertId();

Re: insérer plusieurs images dans la base de données avec un seul id

par @rthur » 10 mars 2022, 00:25

0 probablement car l'exécution de ta requête est en erreur.
Active la gestion d'erreur de PDO en mode Warning :
https://www.php.net/manual/fr/pdo.error-handling.php

Si pas d'erreur, teste ta requête dans phpMyAdmin

Re: insérer plusieurs images dans la base de données avec un seul id

par djek_loic » 09 mars 2022, 13:16

J'ai un problème avec le select MAX(id) et last_insert_id ça me retourne que 0 tout les deux.
Voici mon code:

Code : Tout sélectionner

$insernotif = $bdd->prepare ("INSERT INTO notification (telephone,ville) VALUES (?,?)"); $insertnotif->execute (array($telephone,$ville)); $insernotif = $bdd->prepare ("SELECT MAX(id_notif) FROM notification "); $insertnotif->execute (); $pre = $insernotif->fetch();
et dans ma boucle for j'ai fait la requête insertion pour image là.

Code : Tout sélectionner

$insernotif = $bdd->prepare ("INSERT INTO image (nom, id_notification) VALUES (?,?)"; $insernotif ->execute (array($imageName, $pre));

Re: insérer plusieurs images dans la base de données avec un seul id

par ynx » 09 mars 2022, 10:25

Pour récupérer l'identifiant de la notification insérée, tu peux utiliser la fonction lastInsertId() sur ton objet PDO ($bdd) après la requête INSERT:
https://www.php.net/manual/fr/pdo.lastinsertid.php

La fonction lastInsertId() peut ne pas fonctionner selon le type de base de données utilisé.
En supposant que l'identifiant dans la table notification est en auto_increment, une autre solution serait de faire une requête SELECT après la requête INSERT pour récupérer le plus grand identifiant de notification (qui correspond donc la dernière notification insérée) :
SELECT MAX(id) FROM notification

Re: insérer plusieurs images dans la base de données avec un seul id

par djek_loic » 07 mars 2022, 19:40

D'accord j'ai compris mais sur le deuxième requête insert image le champ id_notification comment récupérer le id sur la première requête. Merci vous m'aider vraiment

Re: insérer plusieurs images dans la base de données avec un seul id

par kevin254kl » 02 mars 2022, 08:02

Hello,

+1 généralement les fichiers (nom, lien ..) sont dans une table spécifique.
Ici impossible une ligne bdd = un id pour la cohérence des données, il faut faire comme décrit par ynx.

Au passage

Code : Tout sélectionner

$titre=htmlspecialchars($_POST['titre']); $contenu=htmlspecialchars($_POST['contenu']); if(!empty($_POST['titre']) AND !empty($_POST['contenu'])){
Ici plutôt

Code : Tout sélectionner

if(!empty($_POST['titre']) AND !empty($_POST['contenu'])){ $titre=htmlspecialchars($_POST['titre']); $contenu=htmlspecialchars($_POST['contenu']);
nettoyer ssi ça existe.

Je recommande aussi pour array($value1, $value2) par [$value1, $value2] la version short est dispo depuis la 5.4

Re: insérer plusieurs images dans la base de données avec un seul id

par ynx » 01 mars 2022, 18:21

Bonjour,

Une solution possible serait d'enregistrer les images dans une autre table avec une relation vers la table notification.

Par exemple, tu peux créer une table avec au moins 3 colonnes: TABLE image (id, name, id_notification)
Les colonnes id et name sont l'identifiant et le nom de l'image (unique pour chaque image).
La colonne id_notification est une clé étrangère qui contiendra, pour chaque image, l'identifiant de la notification reliée à l'image. C'est cette clé étrangère qui permet de définir la relation entre les tables notification et image.

Dans ton code PHP, il faudra alors faire une seule requête INSERT pour la table notification (juste avant ta boucle for par exemple).
Dans la boucle for, il faudra remplacer la requête INSERT INTO notification par une requête INSERT INTO image en renseignant pour le champ id_notification l'identifiant de la notification précédemment insérée.

Je n'ai pas de lien à recommander, mais tu devrais facilement trouver des cours en ligne concernant les bases de données sql.
Essaye de revoir un cours sur le modèle relationnel et l'utilisation des clés étrangères, tu auras surement des explications plus claires et moins succinctes.

Bon développement,

insérer plusieurs images dans la base de données avec un seul id

par djek_loic » 28 févr. 2022, 14:06

salut!
lors ce que j'insère plusieurs images dans ma base de données celle ci insérer avec plusieurs id pourtant j'aimerais que sur le seul id de l'insertion il m'insère les multiples images . voici mon code:

Code : Tout sélectionner

if(isset($_POST['poster'])){ $titre=htmlspecialchars($_POST['titre']); $contenu=htmlspecialchars($_POST['contenu']); if(!empty($_POST['titre']) AND !empty($_POST['contenu'])){ $id=$_SESSION['id']; $getid = intval($id); $requser = $bdd->prepare('SELECT * FROM user WHERE id_user = ?'); $requser->execute(array($getid)); $userinfo = $requser->fetch(); $telephone=$userinfo['telephone']; $ville=$userinfo['ville']; $fichier=count($_FILES['image']['name']); for ($i=0; $i<$fichier;$i++){ $imageName = $_FILES['image']['name'][$i]; $imageTempName = $_FILES['image']['tmp_name'][$i]; //on creer un dossier pour stocke temporaire les noms des notif $dossier="./image_notifs/".$imageName; if(move_uploaded_file($imageTempName ,$dossier )){ $insernotif = $bdd->prepare("INSERT INTO notification(titre,contenu,telephone,ville,photo,date_notif,heure) VALUES(?,?,?,?,?,NOW(),NOW())"); $insernotif->execute(array($titre, $contenu,$telephone,$ville,$imageName)); }//fermeture du if }//fermeture de la boucle for if ($insernotif){ header('location:../profile/index.php'); } }else{ $erreur= "titre ou contenu vide"; } }