Recevoir et enregistrer multi images dans MySQL

- - Dernière réponse : jordane45
Messages postés
26516
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 octobre 2019
- 13 janv. 2019 à 18:25
Bonjour,
Je suis sur un projet d'application mobile qui permet à l'utilisateur de pouvoir sélectionner plusieurs à la fois depuis son téléphone et envoyer le tout en lot vers mon serveur MySQL.
La conception du côté mobile est faite, reste le côté PHP pour recevoir les images et les enregistrer dans ma base de données MySQL.
Après mes recherches dans Google, j'ai trouvé le code suivant mais qui n'enregistre pas des données dans une base de données. Ça fait juste l'envoi des images en lot vers le serveur.
Ma question, c'est comment utiliser le code suivant pour enregistrer chaque image envoyée depuis l'utilisateur une à une dans ma base de données.
Ci-dessous le code :

<?php 
	public function function_name() {

	$this->writeFile($_POST);
	$data = array();
	$this->load->library("form_validation");

	$this->form_validation->set_rules('club_image', 'Club Images', 'required');
	$this->form_validation->set_rules('club_id', 'Club Id', 'required|trim|numeric');
	$this->form_validation->set_rules('user_id', 'User Id', 'required|trim|numeric');

	if ($this->form_validation->run() === FALSE) {
	$data['status'] = 'Echec';
	$data['message'] = "Les conditions n´ont pas été respectées.";
	$data['data'] = $this->form_validation->error_array();
	$this->log("share_experience_image", json_encode($this->input->post()), json_encode($data), $this->input->post('user_id'));
	echo json_encode($data);
	exit;
	}
	$this->load->model("club_management/club_picture_model", "cpm");

	$club_image = $this->input->post("club_image");
	$club_id = $this->input->post("club_id");
	$user_id = $this->input->post("user_id");

	$res = $this->cpm->upload_pictures($club_image, $club_id, $user_id);

	if (is_string($res)) {
	$data['status'] = 'Echec';
	$data['message'] = 'Une erreur est survenue pendant l´envoi';
	$data['data'] = $res;
	$this->log("share_experience_image", json_encode($this->input->post()), json_encode($data), $this->input->post('user_id'));
	echo json_encode($data);
	exit;
	}
	if ($res) {
	$data['status'] = 'success';
	$data['message'] = 'Images envoyées avec succès.';
	$data['data'] = "";
	$this->log("share_experience_image", json_encode($this->input->post()), json_encode($data), $this->input->post('user_id'));
	echo json_encode($data);
	exit;
	}
	}
?>


La sélection et l'envoi de multi images à partir du téléphone marchent bien. Reste l'enregistrement de ces images une à une(du lot d'images reçu) dans la base de données MySQL.

Merci
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
26516
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 octobre 2019
316
1
Merci
Bonjour,

Tu travailles en MVC ?
Tu utilises un framework ? lequel ?

NB: On évite de stocker les fichiers (image ou autre) directement dans la BDD.
On les conserve sur le serveur et on ne stocke en base que le chemin vers celles-ci.
Sinon ça fait grossir rapidement et inutilement la bdd... ce qui peut conduire à sa saturation et à son ralentissement...


Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 197 internautes nous ont dit merci ce mois-ci

Bonjour Jordane45,
Je n'utilise pas de Framework ni MVC. Je ne fais pas non plus l'enregistrement des images directement dans la base de données mais c'est juste le nom de chacune des images qui est enregistré dans la base de données.

Les images sont envoyées en lot pas une à une depuis une application mobile. C'est comme dans un tableau. Et chaque image sera enregistrée avec son nom.
Si vous avez un modèle à me proposé, ça me ferait un grand plaisir.
jordane45
Messages postés
26516
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 octobre 2019
316 > ikelsilver -
Et il vient d'où ce code ... car pour fonctionner il manque un certain nombre de fichiers....

Pour sauvegarder un fichier sur le serveur, il suffit d'un code du genre
$file_path = "uploads/";

$file_path = $file_path . basename( $_FILES['uploaded_file']['name']);
if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) {
echo "success";
} else{
echo "fail";
}


Exemple :
https://stackoverflow.com/questions/25398200/uploading-file-in-php-server-from-android-device


Pour ce qui est de stocker le chemin du fichier uploadé en bdd, il suffit de placer dans le if (au niveau du success...), le code d'insertion en bdd
Une simple requête INSERT
Merci Jordane45,

Avec ce code que vous venez de me proposer, ça va marcher si c'était une seule image qui est envoyée. Alors qu'ici, c'est une collection d'images qui est envoyée du genre
 
$collection = {image_1.jpg, image_2.jpg, ... image_n.jgp} ; 

Comment faire cela ?
C'est un système Android qui permet à l'utilisateur de sélectionner plusieurs images à partir d'un seul INPUT comme en HTML par exemple.

Merci
jordane45
Messages postés
26516
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 octobre 2019
316 > ikelsilver -
ce que tu envoies c'est un formdata multipart/form-data
Tu peux donc envoyer plusieurs "files" en même temps.

Côté php, L'objet $_FILES est un array pouvant contenir de 0 à n images.
Il suffit donc de boucler dessus à l'aide d'un foreach.
Et dans cette boucle, uploader sur le serveur (via le move_uploaded_file ) et insertion en bdd.
Commenter la réponse de jordane45