Recevoir et enregistrer multi images dans MySQL

iKelSilver - 13 janv. 2019 à 10:59
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 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
A voir également:

1 réponse

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
13 janv. 2019 à 11:23
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...


2
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.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344 > ikelsilver
13 janv. 2019 à 14:23
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
0
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
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344 > ikelsilver
13 janv. 2019 à 18:25
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.
0
Rejoignez-nous