Recevoir et enregistrer multi images dans MySQL

- - Dernière réponse : jordane45
Messages postés
25041
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 mars 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 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
25041
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 mars 2019
364
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

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 123 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
25041
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 mars 2019
364 > 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
25041
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 mars 2019
364 > 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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.