Salut !

J'ai un souci. J'ai un script utilisant ajax qui permet de sauvegarder sur un serveur le contenu d'un canvas.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function exportAndSaveCanvas()  {
	var screenshot = Canvas2Image.saveAsPNG(canvas, true);
	canvas.parentNode.appendChild(screenshot);
	screenshot.id = "canvasimage";		
	data = $('#canvasimage').attr('src');
	canvas.parentNode.removeChild(screenshot);
	var url = 'paint/export_paint.php';
	$.ajax({ 
		type: "POST", 
		url: url,
		dataType: 'text',
		data: {
		    base64data : data
		}
	});
}
Ce script renvoie à une page PHP qui stocke l'image:
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
$data = $_POST['base64data'];
$date=date('d_m_Y_H_i_s');
$image = "paint_".$date.".png";
$image = explode('base64,',$data); 
file_put_contents("paint_".$date.".png", base64_decode($image[1]));

Tout fonctionne très bien !

MAIS sur ma page principal (canvas), j'ai aussi mis un formulaire permettant de récupérer le nom, la classe... Pour ensuite stocker en BDD le nom, la classe et le nom de l'image.

J'avais pensé (on m'a aidé !) faire ma requête ajax puis soumettre le formulaire MAIS étant donné que je stocke la date à la seconde près, il se peut que le nom de l'image soit décalé d'une seconde par rapport à la BDD.

J'ai essayé de transmettre les données du formulaire envoimail par ajax aussi:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
$.ajax({ 
	type: "POST", 
	url: url,
	dataType: 'text',
	data: $("#envoiemail").serialize() + "&base64data=" + data,
	success: function() {
		// indiquer à l'utilisateur que le traitement a réussi
	}
});
et de les récupérer pour les traiter en PHP:

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$data = $_POST['base64data'];
echo $data;
$date=date('d_m_Y_H_i_s');
$classe = $_POST['classe'];
$nom = $_POST['nom'];
$image = "paint_".$date.".png";
$message = $_POST['message'];
$image = explode('base64,',$data); 
file_put_contents("paint_".$date.".png", base64_decode($image[1]));
$image_nom = "paint_".$date.".png";			
if ($_POST['nom']!="")
{
	mysql_query("INSERT INTO album (nom,classe,image,message,date) VALUES ('$nom','$classe','$image_nom','$message', now())");}
[...]

Et c'est là que ça coince !

- Niveau BDD >> OK
- Niveau image >> l'image est dégradée, vide ou noir !!!

Je n'arrive pas à voir d'où vient le problème !

On dirait que le stockage de l'image est interrompu ??
Si je commente les reqûetes SQL même problème !

Merci de votre aide précieuse !!!!!

A+
Coincoin22