Probleme d'upload fichiers div ajax(c urgent)
Fermé
fati123456
Messages postés
10
Date d'inscription
vendredi 11 septembre 2009
Statut
Membre
Dernière intervention
12 septembre 2009
-
11 sept. 2009 à 13:13
fati123456 Messages postés 10 Date d'inscription vendredi 11 septembre 2009 Statut Membre Dernière intervention 12 septembre 2009 - 12 sept. 2009 à 14:23
fati123456 Messages postés 10 Date d'inscription vendredi 11 septembre 2009 Statut Membre Dernière intervention 12 septembre 2009 - 12 sept. 2009 à 14:23
A voir également:
- Probleme d'upload fichiers div ajax(c urgent)
- Div c++ - Télécharger - Langages
- Wetransfer gratuit fichiers lourd - Guide
- Youtube upload - Télécharger - Diffusion
- Renommer plusieurs fichiers en même temps - Guide
- Explorateur de fichiers - Guide
15 réponses
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
11 sept. 2009 à 13:49
11 sept. 2009 à 13:49
Bonjour,
Pourrions nous avoir le code PHP de ton script de traitement 'creer.php' ?
Car à priori, si tu n'arrive pas à récupérer le fichier (l'image), le problème devrait se situer dans ce script.
Pourrions nous avoir le code PHP de ton script de traitement 'creer.php' ?
Car à priori, si tu n'arrive pas à récupérer le fichier (l'image), le problème devrait se situer dans ce script.
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
11 sept. 2009 à 13:53
11 sept. 2009 à 13:53
je vois deux erreurs:
- il te manque la partie traitement de la réponse Ajax lorsque elle est reçue (on verifie que l'on a bien tout reçu)
- ensuite tu as une erruer de principe:
Ajax permet d'appeler un script php distant sans recharger la page donc sans le submit, hors toi tu as mis ton appel de la fonction ajax dans action="javascript:ajax('Agenda/creer.php', 'hf', 'post', 'formulaire') " donc au moment de l'envoi de la page par le bouton submit
donc ça ne peut pas marcher
remplace ton bouton submit par un type="button" et mets y un onClick="javascript:ajax('Agenda/creer.php', 'hf', 'post', 'formulaire') "
et dans action="..." mets le nom du script qui est censé enregistrer dans la bdd
- il te manque la partie traitement de la réponse Ajax lorsque elle est reçue (on verifie que l'on a bien tout reçu)
xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status == 200) { //etc..
- ensuite tu as une erruer de principe:
Ajax permet d'appeler un script php distant sans recharger la page donc sans le submit, hors toi tu as mis ton appel de la fonction ajax dans action="javascript:ajax('Agenda/creer.php', 'hf', 'post', 'formulaire') " donc au moment de l'envoi de la page par le bouton submit
donc ça ne peut pas marcher
remplace ton bouton submit par un type="button" et mets y un onClick="javascript:ajax('Agenda/creer.php', 'hf', 'post', 'formulaire') "
et dans action="..." mets le nom du script qui est censé enregistrer dans la bdd
fati123456
Messages postés
10
Date d'inscription
vendredi 11 septembre 2009
Statut
Membre
Dernière intervention
12 septembre 2009
11 sept. 2009 à 14:03
11 sept. 2009 à 14:03
Bonjour kij_82
Voila la page de traitement creer.php
<?php
session_start();
include '../../../../connexion.php';
include '../../../../langues/lang_fr.php';
?>
<style type="text/css">
<!--
a:link {
color: #006699;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #006699;
}
a:hover {
text-decoration: underline;
color: #006699;
}
a:active {
text-decoration: none;
color: #006699;
}
-->
</style>
<?php
$hf=$_SESSION['email2'];
$req = "SELECT id FROM user where email='$hf'";
$res = mysql_query($req);
if ( $res == false )
die (" Erreur dans la requete ");
$n = mysql_num_rows( $res );
$Col1 = " BGCOLOR=\"F8F8FF\"";
$Col2 = " BGCOLOR=\"FFFAF0\"";
$Col = $Col1;
$l = 2;
for ( $i=1 ; $i <= $n ; $i++){
$r = mysql_fetch_row( $res );
$Y = ($i % $l);
if($Y == 0){
$Col = $Col2;
}else
$Col = $Col1;
?>
<?
$hi=$r[0];
?>
<?php
$titre=$_POST['titre'];
$details=$_POST['detail'];
$pays=$_POST['pays'];
$lien=$_POST['lien'];
$lien=$_POST['lien'];
$ville=$_POST['ville'];
$jour=$_POST['jour'];
$mois=$_POST['mois'];
$annee=$_POST['annee'];
$daten=date("Y-m-d");
$date="$annee-$mois-$jour";
$datecreation=date("d-m-Y");
if (isset($_FILES['file'])){
//On récupère les valeurs entrées par l'utilisateur :
/*?>$adresse=$_POST['txtadresse'];
$siteweb=$_POST['txtsite']; <?php */
unset($erreur);
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg','PNG', 'GIF', 'JPG', 'JPEG');
$taille_max = 4000000000;
$dest_dossier = 'Agenda/photosagenda/';
$name=$_FILES['file']['name'];
// utilisez également des slashes sous windows : $dest_dossier = 'd:/damien/photos/';
// vérifications
if( !in_array( substr(strrchr($_FILES['file']['name'], '.'), 1), $extensions_ok))
{
$erreur = '';
}
elseif( file_exists($_FILES['file']['tmp_name'])
and filesize($_FILES['file']['tmp_name']) > $taille_max)
{
$erreur = 'Votre fichier doit faire moins de 4Mo !';
}
// copie du fichier
if(!isset($erreur))
{
$dest_fichier = basename($_FILES['file']['name']);
$img_blob = mysql_escape_string(file_get_contents($_FILES['file']['tmp_name']));
// formatage nom fichier
// enlever les accents
// copie du fichier
move_uploaded_file($_FILES['file']['tmp_name'], $dest_dossier.$dest_fichier);
}
}
if ($date >= $daten){
$sql = "INSERT INTO agenda(`id_agenda`,`titre`,`detail`,`img_agenda`,`pays`,`id_user`,`date_agenda`,`lien`,`date_evenement`,`ville`)VALUES('','$titre','$details','$dest_fichier','$pays','$hi','$datecreation','$lien','$date','$ville')";
/*echo "<script language='javascript'>alert('insertion effectuee');</script>";
echo "<script language='javascript'>document.location.href='confirm.php';</script>";*/
/*on lance la commande (mysql_query) et au cas où,
on rédige un petit message d'erreur si la requête ne passe pas (or die)
(Message qui intègrera les causes d'erreur sql)*/
mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());
}else
echo "<br><br><font style='font-family:Arial' style='font-size:12px' style='color:#006699'><center>";
echo "Cet évenement est deja passée";
echo "<br><br><a href=\"#\" onClick=\"envoiRequete('Agenda/agenda.php','hf');\" >";
echo 'Retour';
echo "</a></center></font>";
// .......................................................................................
}
?>
Voila la page de traitement creer.php
<?php
session_start();
include '../../../../connexion.php';
include '../../../../langues/lang_fr.php';
?>
<style type="text/css">
<!--
a:link {
color: #006699;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #006699;
}
a:hover {
text-decoration: underline;
color: #006699;
}
a:active {
text-decoration: none;
color: #006699;
}
-->
</style>
<?php
$hf=$_SESSION['email2'];
$req = "SELECT id FROM user where email='$hf'";
$res = mysql_query($req);
if ( $res == false )
die (" Erreur dans la requete ");
$n = mysql_num_rows( $res );
$Col1 = " BGCOLOR=\"F8F8FF\"";
$Col2 = " BGCOLOR=\"FFFAF0\"";
$Col = $Col1;
$l = 2;
for ( $i=1 ; $i <= $n ; $i++){
$r = mysql_fetch_row( $res );
$Y = ($i % $l);
if($Y == 0){
$Col = $Col2;
}else
$Col = $Col1;
?>
<?
$hi=$r[0];
?>
<?php
$titre=$_POST['titre'];
$details=$_POST['detail'];
$pays=$_POST['pays'];
$lien=$_POST['lien'];
$lien=$_POST['lien'];
$ville=$_POST['ville'];
$jour=$_POST['jour'];
$mois=$_POST['mois'];
$annee=$_POST['annee'];
$daten=date("Y-m-d");
$date="$annee-$mois-$jour";
$datecreation=date("d-m-Y");
if (isset($_FILES['file'])){
//On récupère les valeurs entrées par l'utilisateur :
/*?>$adresse=$_POST['txtadresse'];
$siteweb=$_POST['txtsite']; <?php */
unset($erreur);
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg','PNG', 'GIF', 'JPG', 'JPEG');
$taille_max = 4000000000;
$dest_dossier = 'Agenda/photosagenda/';
$name=$_FILES['file']['name'];
// utilisez également des slashes sous windows : $dest_dossier = 'd:/damien/photos/';
// vérifications
if( !in_array( substr(strrchr($_FILES['file']['name'], '.'), 1), $extensions_ok))
{
$erreur = '';
}
elseif( file_exists($_FILES['file']['tmp_name'])
and filesize($_FILES['file']['tmp_name']) > $taille_max)
{
$erreur = 'Votre fichier doit faire moins de 4Mo !';
}
// copie du fichier
if(!isset($erreur))
{
$dest_fichier = basename($_FILES['file']['name']);
$img_blob = mysql_escape_string(file_get_contents($_FILES['file']['tmp_name']));
// formatage nom fichier
// enlever les accents
// copie du fichier
move_uploaded_file($_FILES['file']['tmp_name'], $dest_dossier.$dest_fichier);
}
}
if ($date >= $daten){
$sql = "INSERT INTO agenda(`id_agenda`,`titre`,`detail`,`img_agenda`,`pays`,`id_user`,`date_agenda`,`lien`,`date_evenement`,`ville`)VALUES('','$titre','$details','$dest_fichier','$pays','$hi','$datecreation','$lien','$date','$ville')";
/*echo "<script language='javascript'>alert('insertion effectuee');</script>";
echo "<script language='javascript'>document.location.href='confirm.php';</script>";*/
/*on lance la commande (mysql_query) et au cas où,
on rédige un petit message d'erreur si la requête ne passe pas (or die)
(Message qui intègrera les causes d'erreur sql)*/
mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());
}else
echo "<br><br><font style='font-family:Arial' style='font-size:12px' style='color:#006699'><center>";
echo "Cet évenement est deja passée";
echo "<br><br><a href=\"#\" onClick=\"envoiRequete('Agenda/agenda.php','hf');\" >";
echo 'Retour';
echo "</a></center></font>";
// .......................................................................................
}
?>
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
11 sept. 2009 à 14:08
11 sept. 2009 à 14:08
Effectivement, Alain n'a pas tord sur ces points.
Mais le gros problème c'est que justement, le script PHP qu'elle appelle via Ajax est celui qui doit faire l'enregistrement.
Ce qui risque de poser problème pour ce qui est du fichier à uploader. Je n'ai jamais fait d'upload via de l'Ajax, mais j'ai trouvé ces deux pages qui semble résoudre le problème :
http://blogs.developpeur.org/cyril/archive/2007/03/24/ajax-et-upload-part-1.aspx
http://www.webtoolkit.info/ajax-file-upload.html
Mais le gros problème c'est que justement, le script PHP qu'elle appelle via Ajax est celui qui doit faire l'enregistrement.
Ce qui risque de poser problème pour ce qui est du fichier à uploader. Je n'ai jamais fait d'upload via de l'Ajax, mais j'ai trouvé ces deux pages qui semble résoudre le problème :
http://blogs.developpeur.org/cyril/archive/2007/03/24/ajax-et-upload-part-1.aspx
http://www.webtoolkit.info/ajax-file-upload.html
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fati123456
Messages postés
10
Date d'inscription
vendredi 11 septembre 2009
Statut
Membre
Dernière intervention
12 septembre 2009
11 sept. 2009 à 14:10
11 sept. 2009 à 14:10
Bonjour Alain_42,
j'ai suivi la procedure que tu as donnée mais ca marche pas, quand j'ai modifié: action="javascript:ajax('Agenda/creer.php', 'hf', 'post', 'formulaire') " par : onclick="javascript:ajax('Agenda/creer.php', 'hf', 'post', 'formulaire') " et action="page de traitement.php"
Lors de remplissage de premier champ il méne vers la page de traitement avant de remplir les champs
Concernant
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
//etc..
j'ai pa bien compris cette partie
j'ai suivi la procedure que tu as donnée mais ca marche pas, quand j'ai modifié: action="javascript:ajax('Agenda/creer.php', 'hf', 'post', 'formulaire') " par : onclick="javascript:ajax('Agenda/creer.php', 'hf', 'post', 'formulaire') " et action="page de traitement.php"
Lors de remplissage de premier champ il méne vers la page de traitement avant de remplir les champs
Concernant
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
//etc..
j'ai pa bien compris cette partie
fati123456
Messages postés
10
Date d'inscription
vendredi 11 septembre 2009
Statut
Membre
Dernière intervention
12 septembre 2009
11 sept. 2009 à 14:15
11 sept. 2009 à 14:15
Merci kij_82 je vais voir les pages que tu m'as envoyé et j'espere que ca va marcher.
Merci frount de me répondre
Merci frount de me répondre
fati123456
Messages postés
10
Date d'inscription
vendredi 11 septembre 2009
Statut
Membre
Dernière intervention
12 septembre 2009
11 sept. 2009 à 14:38
11 sept. 2009 à 14:38
Quand je fait l'enregistrement d'un enregistrement, il stocke tous les champs dans la base de dn sauf l'image et il me donne cet erreur:
Notice: Undefined variable: dest_fichier in c:\program files\easyphp1-8\www\wall5 sans iframe 07-09\public\users\maboite\agenda\creer.php on line 108
Cet évenement est deja passée
Retour
Notice: Undefined variable: dest_fichier in c:\program files\easyphp1-8\www\wall5 sans iframe 07-09\public\users\maboite\agenda\creer.php on line 108
Cet évenement est deja passée
Retour
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
11 sept. 2009 à 14:48
11 sept. 2009 à 14:48
Oui, ce qui est normal à priori pour la raison suivante :
Dans un formulaire, ton fichier à uploader est envoyé plus ou moins automatiquement, dans le sens où tu n'as pas vraiment besoin de t'en pré occupé en temps que développeur, tu te contente de le réceptionner dans ton script de traitement, chose que tu fais donc.
Le truc, c'est que ton script de traitement n'est pas appelé de manière "naturelle" - si je puis dire. Tu l'appelle depuis un objet XHR, depuis du javascript donc et non via le formulaire directement.
Et tu ne peux pas transmettre ton fichier de la même manière que tu transmets tes variables de type texte.
Bref, autant pour le reste des données, tu peux garder ta manière de faire (qui est la manière standard de passer les valeur au script PHP appellé), mais pour ce qui est de ton fichier à uploader, il faut procéder différemment.
Par contre, oubli les deux liens que j'ai mis plus haut, j'ai lu trop vite, ce sont des "fake" script d'upload Ajax, tout ce qu'il y a d'Ajax dedans c'est un affichage dynamique du statut de l'upload, nous ce qui nous intéresse c'est de transmettre ce fichier via Ajax.
Par contre, ce tutoriel (en anglais, désolé j'ai pas trouvé en francais un truc qui vaille la peine) t'explique tout :)
https://www.valums.com/
Dans un formulaire, ton fichier à uploader est envoyé plus ou moins automatiquement, dans le sens où tu n'as pas vraiment besoin de t'en pré occupé en temps que développeur, tu te contente de le réceptionner dans ton script de traitement, chose que tu fais donc.
Le truc, c'est que ton script de traitement n'est pas appelé de manière "naturelle" - si je puis dire. Tu l'appelle depuis un objet XHR, depuis du javascript donc et non via le formulaire directement.
Et tu ne peux pas transmettre ton fichier de la même manière que tu transmets tes variables de type texte.
Bref, autant pour le reste des données, tu peux garder ta manière de faire (qui est la manière standard de passer les valeur au script PHP appellé), mais pour ce qui est de ton fichier à uploader, il faut procéder différemment.
Par contre, oubli les deux liens que j'ai mis plus haut, j'ai lu trop vite, ce sont des "fake" script d'upload Ajax, tout ce qu'il y a d'Ajax dedans c'est un affichage dynamique du statut de l'upload, nous ce qui nous intéresse c'est de transmettre ce fichier via Ajax.
Par contre, ce tutoriel (en anglais, désolé j'ai pas trouvé en francais un truc qui vaille la peine) t'explique tout :)
https://www.valums.com/
fati123456
Messages postés
10
Date d'inscription
vendredi 11 septembre 2009
Statut
Membre
Dernière intervention
12 septembre 2009
11 sept. 2009 à 14:52
11 sept. 2009 à 14:52
Ok merci bcp je vais revoir les liens et appliquer le code et je vais voir qu'est que ca donne.Merci bcp encors
fati123456
Messages postés
10
Date d'inscription
vendredi 11 septembre 2009
Statut
Membre
Dernière intervention
12 septembre 2009
11 sept. 2009 à 14:58
11 sept. 2009 à 14:58
ok kij_82
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
11 sept. 2009 à 14:58
11 sept. 2009 à 14:58
J'ai édité mon précédent message, relis la fin (en gras) attentivement ^^
fati123456
Messages postés
10
Date d'inscription
vendredi 11 septembre 2009
Statut
Membre
Dernière intervention
12 septembre 2009
11 sept. 2009 à 14:59
11 sept. 2009 à 14:59
Ok je vais le voir tt de suite
fati123456
Messages postés
10
Date d'inscription
vendredi 11 septembre 2009
Statut
Membre
Dernière intervention
12 septembre 2009
11 sept. 2009 à 15:07
11 sept. 2009 à 15:07
j'ai telecharger le fichier ajaxupload.3.5.js mais je c pas comment je vais l'utiliser. désolé si je te dérange par mes question
fati123456
Messages postés
10
Date d'inscription
vendredi 11 septembre 2009
Statut
Membre
Dernière intervention
12 septembre 2009
12 sept. 2009 à 14:23
12 sept. 2009 à 14:23
Slt,
J'ai tester le code que tu m'a donné mais ca marche pas il ya toujours meme erreur :
Notice: Undefined variable: dest_fichier in c:\program files\easyphp1-8\www\wall\public\users\maboite\agenda\creer.php on line 107
Cet évenement est deja passée
Retour
J'ai tester le code que tu m'a donné mais ca marche pas il ya toujours meme erreur :
Notice: Undefined variable: dest_fichier in c:\program files\easyphp1-8\www\wall\public\users\maboite\agenda\creer.php on line 107
Cet évenement est deja passée
Retour