alone06
Messages postés115Date d'inscriptionmardi 9 novembre 2010StatutMembreDernière intervention18 mai 2016
-
16 févr. 2016 à 06:53
alone06
Messages postés115Date d'inscriptionmardi 9 novembre 2010StatutMembreDernière intervention18 mai 2016
-
17 févr. 2016 à 02:36
Bonjour,
Je me tourne vers vous après avoir chercher la solution à mon soucis pendant un bon moment sans résultat
voila mon soucis :
je voudrais charger une image via un formulaire et ne l'envoyer qu'après le traitement final de tout les autres champs le soucis c'est que quans le traitement se fais le fichier de traitement ne retrouve plus l'image dans le temp.
<?php
include "functions.php";
if(!empty($_POST['nom_check'])){
$nom=htmlspecialchars(ltrim(rtrim($_POST['nom_check'])), ENT_QUOTES);
//Connexion à la base de données
require "dataconn.php";
$sql1 = "SELECT id FROM test WHERE nom='$nom'";
$req1 = mysql_query($sql1);
$res1 = mysql_num_rows($req1);
if($res1!=0)
{
echo 'Cet extra existe déjà dans notre base de données !';
exit();
} else {
echo 'success_nom';
exit();
}
}
if(!empty($_POST['img_check'])){
$img=htmlspecialchars(ltrim(rtrim($_POST['img_check'])), ENT_QUOTES);
//Connexion à la base de données
require "dataconn.php";
$sql1 = "SELECT id FROM test WHERE img='$img'";
$req1 = mysql_query($sql1);
$res1 = mysql_num_rows($req1);
if($res1!=0)
{
echo 'Cet image existe déjà dans notre base de données !';
exit();
} else {
echo 'success_img';
exit();
}
}
//Traitement de l'inscription
if(isset($_POST['nom'])){
include "dataconn.php";
$data['file'] = $_FILES;
$data['text'] = $_POST;
$nom=$_POST['nom'];
$img=$_FILES['img']['name'];
$sql12 = "SELECT id FROM test WHERE img='$img'";
$req12 = mysql_query($sql12);
$img_check = mysql_num_rows($req12);
$sql13 = "SELECT id FROM test WHERE nom='$nom'";
$req13 = mysql_query($sql13);
$nom_check = mysql_num_rows($req13);
if(empty($nom) || empty($img))
{
echo "Tous les champs n'ont pas été remplis.";
}
else {if($nom_check > 0) {
echo "Ce nom existe déjà dans notre base de données !";
}
else {if($img_check > 0) {
echo "Cette image existe déjà dans notre base de données !";
}
else {
$sql = "
INSERT INTO `test`(`id`, `nom`, `img`) VALUES ('', '$nom', '$img')";
$uploads_dir = $_SERVER['DOCUMENT_ROOT'].'/manage/uploads';
$tmp_name = $_FILES['img']['tmp_name'];
$name = $_FILES['img']['name'];
$o=$uploads_dir.'/'.$name;
move_uploaded_file($tmp_name, $o);
$inser_exec = mysql_query($sql);
if ($inser_exec === true)
{
echo 'register_success';
exit();
}else {echo "Erreur lors de l'enregistrement.<br> ".$sql;
exit();}
}}}
exit();
}
?>
J'avais lu quelque part qu'il faut une iframe pour l'upload mais je ne sais pas si c'est ça la solution.
Ensuite... ton fichier ajax php est mal fichu.
Pourquoi charges tu plusieurs fois ton fichier de connexion à la BDD ?? Une seule fois au début de ton script suffit !
Il est également préférable de récupérer "proprement" les variables AVANT de les utiliser.
Pour ça.... tu peux utiliser l'écriture TERNAIRE de la façon suivante
alone06
Messages postés115Date d'inscriptionmardi 9 novembre 2010StatutMembreDernière intervention18 mai 2016 16 févr. 2016 à 17:13
Merci Jordane toujours le premier à la rescousse.
Pour ce qui est du reste du code, il fonctionne très bien je sais que je dois m'améliorer mais pour l'instant j'essaie juste de l'adapter pour pouvoir uploader des images.
pour le tuto je l'ai déjà consulté mais j'ai pas pu m'en servir car ce que j'ai mis là c'est juste une petite partie du code j'ai d'autre champs à vérifier et à insérer dans la bd et puisque comme j'ai dis jusqu'à là ce bout de code fonctionnait très bien j'ai pas voulu le changer.
Je m'explique :
dans mon formulaire j'utilise
jordane45
Messages postés37845Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention29 novembre 2023342
>
alone06
Messages postés115Date d'inscriptionmardi 9 novembre 2010StatutMembreDernière intervention18 mai 2016 16 févr. 2016 à 17:56
Si si... cet exemple fonctionne très bien
alone06
Messages postés115Date d'inscriptionmardi 9 novembre 2010StatutMembreDernière intervention18 mai 2016
>
jordane45
Messages postés37845Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention29 novembre 2023 Modifié par alone06 le 16/02/2016 à 18:13
Je sais qu'il fonctionne si on le prend comme c'est mais moi je dois l'adapter et ne plus passer par process_form.php mais faire les traitement sur aj-nn.php et alors ne pas passer par action="" car si c'est le cas les autres traitement ne se feront plus (je crois)
-Pour l'extension mysql, je suis entrain de passer à PDO merci pour le conseil
Voila après presque 4 jours dessus, je viens de trouver une solution qui marche et en meme adapté à mon script.
Honnetemenet je ne vois toujours pas ou etait mon erreur mais au moins j'en ai profité pour passer en PDO
voila la solution qui marche si quelqu'un avait le meme soucis.
<?php
include "dataconn2.php";
$nom_check = !empty($_POST['nom_check']) ? $_POST['nom_check']: NULL;
$img_check = !empty($_POST['img_check']) ? $_POST['img_check']: NULL;
if(!empty($_POST['nom_check'])){
$nom=htmlspecialchars(ltrim(rtrim($_POST['nom_check'])), ENT_QUOTES);
//Connexion à la base de données
$sql1=$conn->query("SELECT id FROM test WHERE nom='$nom'");
$sql1->execute();
$res1 =$sql1->rowCount();
if($res1!=0)
{
echo 'Cet extra existe déjà dans notre base de données !';
exit();
} else {
echo 'success_nom';
exit();
}
}
if(!empty($_POST['img_check'])){
$img=htmlspecialchars(ltrim(rtrim($_POST['img_check'])), ENT_QUOTES);
//Connexion à la base de données
$sql2=$conn->query("SELECT id FROM test WHERE img='$img'");
$sql2->execute();
$res2 =$sql2->rowCount();
if($res2!=0)
{
echo 'Cette image existe déjà dans notre base de données !';
exit();
} else {
echo 'success_img';
exit();
}
}
//Traitement de l'inscription
if(isset($_POST['nom'])){
$nom = !empty($_POST['nom']) ? $_POST['nom']: NULL;
$img = isset($_FILES['img']['name']) ? $_FILES['img']['name']: NULL;
$tmp = isset($_FILES['img']['tmp_name']) ? $_FILES['img']['tmp_name']: NULL;
$sql12=$conn->query("SELECT id FROM test WHERE img='$img'");
$sql12->execute();
$img_check =$sql12->rowCount();
$sql13=$conn->query("SELECT id FROM test WHERE nom='$nom'");
$sql13->execute();
$nom_check =$sql13->rowCount();
if(empty($nom) || empty($img))
{
echo "Tous les champs n'ont pas été remplis.";
}
else {if($nom_check > 0) {
echo "Ce nom existe déjà dans notre base de données !";
}
else {if($img_check > 0) {
echo "Cette image existe déjà dans notre base de données !";
}
else {
$valid_extensions = array('jpeg', 'jpg', 'png', 'gif', 'bmp'); // valid extensions
$path = 'uploads/'; // upload directory
// get uploaded file's extension
$ext = strtolower(pathinfo($img, PATHINFO_EXTENSION));
// can upload same image using rand function
$final_image = $img;
// check's valid format
if(in_array($ext, $valid_extensions))
{
$path = $path.strtolower($final_image);
if(move_uploaded_file($tmp,$path))
{
$req = $conn->prepare("INSERT INTO `test`(`id`, `nom`, `img`) VALUES (:id, :nom, :img)");
$inser_exec = $req->execute(array(
"id" => '',
"nom" => $nom,
"img" => $img
));
if ($inser_exec === true)
{
echo 'register_success';
exit();
}else {echo "Erreur lors de l'enregistrement.<br> ";
exit();}
}
}
else
{
echo 'invalid file';
}
}}}
exit();
}
?>
Bien sur il faut encore le peaufiner et traiter les cas d'erreurs d'upload, mais l'essentiel pour moi était d'uploader l'image.
Merci encore pour les conseils jordane
16 févr. 2016 à 17:13
Pour ce qui est du reste du code, il fonctionne très bien je sais que je dois m'améliorer mais pour l'instant j'essaie juste de l'adapter pour pouvoir uploader des images.
pour le tuto je l'ai déjà consulté mais j'ai pas pu m'en servir car ce que j'ai mis là c'est juste une petite partie du code j'ai d'autre champs à vérifier et à insérer dans la bd et puisque comme j'ai dis jusqu'à là ce bout de code fonctionnait très bien j'ai pas voulu le changer.
Je m'explique :
dans mon formulaire j'utilise
alors que dans l'exemple on utilise
je crains que les autres check ne marchent plus
16 févr. 2016 à 17:56
Modifié par alone06 le 16/02/2016 à 18:13
-Pour l'extension mysql, je suis entrain de passer à PDO merci pour le conseil