Pb enregistrement dans base mysql
Résolu
t671
-
zurg_ Messages postés 134 Date d'inscription Statut Membre Dernière intervention -
zurg_ Messages postés 134 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un formulaire où je saisi divers éléments (date, heure, texte .....), et où je peut uploader un fichier (jpg, doc, ....). Si tout est saisi, c'est ok. Mais si je ne saisi pas de fichier à uploader, rien ne s'enregistre dans la base.
J'ai essayé de mette if (empty($monfichier)) avant l'enregistrement de "monfichier" dans la base ("monfichier" étant le nom de la variable représentant le fichier à uploader). Mais cela ne fonctionne pas, et à force de bidouiller, je me mélange les pinceaux !
Pourriez-vous m'aider à résoudre ce problème ?
Voici mon code :
// --------------------récupération des données du formulaires-------------------------
$date = $_POST['date'];
$heure = $_POST['heure'];
$titre = $_POST['titre'];
$texte = $_POST['texte'];
$monfichier = $_POST['monfichier'];
..........................
// ----------------test upload fichier------------------
$dossier = './dossier_upload/';
$fichier = basename($_FILES['monfichier']['name']);
$taille_maxi = 2000000;
$taille = filesize($_FILES['monfichier']['tmp_name']);
$extensions = array('.png', '.gif', '.PNG', '.GIF', '.jpg', '.JPG', '.jpeg', '.JPEG', '.doc', '.DOC', '.txt', '.TXT');
$extension = strrchr($_FILES['monfichier']['name'], '.');
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
echo '<a href="./gestion/err_extension.html" target="wclose" onclick="window.open(\'./gestion/err_extension.html\',\'wclose\',\'width=850,height=205,toolbar=no,status=yes,left=80,top=80,scrollbars=no\')"></a>';
// $erreur = 'Vous ne pouvez uploader que des fichiers de type png, gif, jpg, jpeg, txt ou doc.';
}
if($taille>$taille_maxi)
{
echo '<a href="./gestion/err_taille.html" target="wclose" onclick="window.open(\'./gestion/err_etaille.html\',\'wclose\',\'width=850,height=205,toolbar=no,status=yes,left=80,top=80,scrollbars=no\')"></a>';
//$erreur = 'Le fichier est trop gros. Il doit être inférieur à 2Mo';
}
else //if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
//On formate le nom du fichier ici...
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $fichier);
//--------------------upload fichier----------------------
if (move_uploaded_file($_FILES['monfichier']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo 'Chargement effectué avec succès !';
// ---------------- insertion texte, jour, date ... --------
$sql = "INSERT INTO manifestations(heure, jour, date, frdate, datefr, titre, texte) VALUES('$heure', '$jour_sem', '$dateMySQL', '$frdate', '$datefr', '$titre', '$chaine')";
mysql_query($sql) or die('Erreur SQL !'.$sql.mysql_error());
$id=mysql_insert_id(); // récupération dernier id enregistré
// ---------------- insertion fichier uploadé --------
$req_fich = "INSERT INTO upload(id_liaison, lien_fichier, fichier, extension) VALUES('$id', '$dossier$fichier', '$fichier', '$extension')";
mysql_query($req_fich) or die('Erreur SQL !'.$req2_fich.mysql_error());
}
}
}
Merci d'avance ...... :o)
J'ai un formulaire où je saisi divers éléments (date, heure, texte .....), et où je peut uploader un fichier (jpg, doc, ....). Si tout est saisi, c'est ok. Mais si je ne saisi pas de fichier à uploader, rien ne s'enregistre dans la base.
J'ai essayé de mette if (empty($monfichier)) avant l'enregistrement de "monfichier" dans la base ("monfichier" étant le nom de la variable représentant le fichier à uploader). Mais cela ne fonctionne pas, et à force de bidouiller, je me mélange les pinceaux !
Pourriez-vous m'aider à résoudre ce problème ?
Voici mon code :
// --------------------récupération des données du formulaires-------------------------
$date = $_POST['date'];
$heure = $_POST['heure'];
$titre = $_POST['titre'];
$texte = $_POST['texte'];
$monfichier = $_POST['monfichier'];
..........................
// ----------------test upload fichier------------------
$dossier = './dossier_upload/';
$fichier = basename($_FILES['monfichier']['name']);
$taille_maxi = 2000000;
$taille = filesize($_FILES['monfichier']['tmp_name']);
$extensions = array('.png', '.gif', '.PNG', '.GIF', '.jpg', '.JPG', '.jpeg', '.JPEG', '.doc', '.DOC', '.txt', '.TXT');
$extension = strrchr($_FILES['monfichier']['name'], '.');
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
echo '<a href="./gestion/err_extension.html" target="wclose" onclick="window.open(\'./gestion/err_extension.html\',\'wclose\',\'width=850,height=205,toolbar=no,status=yes,left=80,top=80,scrollbars=no\')"></a>';
// $erreur = 'Vous ne pouvez uploader que des fichiers de type png, gif, jpg, jpeg, txt ou doc.';
}
if($taille>$taille_maxi)
{
echo '<a href="./gestion/err_taille.html" target="wclose" onclick="window.open(\'./gestion/err_etaille.html\',\'wclose\',\'width=850,height=205,toolbar=no,status=yes,left=80,top=80,scrollbars=no\')"></a>';
//$erreur = 'Le fichier est trop gros. Il doit être inférieur à 2Mo';
}
else //if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
//On formate le nom du fichier ici...
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $fichier);
//--------------------upload fichier----------------------
if (move_uploaded_file($_FILES['monfichier']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo 'Chargement effectué avec succès !';
// ---------------- insertion texte, jour, date ... --------
$sql = "INSERT INTO manifestations(heure, jour, date, frdate, datefr, titre, texte) VALUES('$heure', '$jour_sem', '$dateMySQL', '$frdate', '$datefr', '$titre', '$chaine')";
mysql_query($sql) or die('Erreur SQL !'.$sql.mysql_error());
$id=mysql_insert_id(); // récupération dernier id enregistré
// ---------------- insertion fichier uploadé --------
$req_fich = "INSERT INTO upload(id_liaison, lien_fichier, fichier, extension) VALUES('$id', '$dossier$fichier', '$fichier', '$extension')";
mysql_query($req_fich) or die('Erreur SQL !'.$req2_fich.mysql_error());
}
}
}
Merci d'avance ...... :o)
A voir également:
- Pb enregistrement dans base mysql
- Base de registre - Guide
- Enregistrement mp3 gratuit - Télécharger - Streaming audio
- Mysql community server - Télécharger - Bases de données
- Formules mathématiques de base - Télécharger - Études & Formations
- Telecharger studio d'enregistrement rap - Télécharger - Édition & Montage
11 réponses
Salut,
que se passe-t-il exactement : le fichier s'upload dans tous les cas ou rien ne s'enregistre dans la base dans tous les cas ?
que se passe-t-il exactement : le fichier s'upload dans tous les cas ou rien ne s'enregistre dans la base dans tous les cas ?
J'ai avancé un peu ............. !!!!!!
Donc maintenant, lorsque je saisi un texte pour l'enregistrer dans la table manifestation, celui-ci s'enregistre bien. Mais si j'ai validé le formulaire sans y associer un fichier à uploader (donc le texte n'aura pas d'élément relié avec la table upload), lors de l'affichage, le texte ne sort pas, car pas d'association avec la table upload.
Je pense que ceci doit venir de ma requête :
$requete="SELECT manifestations.id, manifestations.jour , manifestations.heure ,manifestations.datefr ,manifestations.titre ,manifestations.texte , upload.id_liaison, upload.lien_fichier, upload.fichier, upload.extension
FROM manifestations LEFT JOIN upload ON manifestations.id=upload.id_liaison
ORDER BY manifestations.date ASC";
$result = mysql_query($requete,$link) or exit ('Erreur : '.mysql_error() );
Je ne sais pas comment préciser que si le "LEFT JOIN" n'éxiste pas, il faut quand même afficher le contenu de la table "manifexstations".
Donc maintenant, lorsque je saisi un texte pour l'enregistrer dans la table manifestation, celui-ci s'enregistre bien. Mais si j'ai validé le formulaire sans y associer un fichier à uploader (donc le texte n'aura pas d'élément relié avec la table upload), lors de l'affichage, le texte ne sort pas, car pas d'association avec la table upload.
Je pense que ceci doit venir de ma requête :
$requete="SELECT manifestations.id, manifestations.jour , manifestations.heure ,manifestations.datefr ,manifestations.titre ,manifestations.texte , upload.id_liaison, upload.lien_fichier, upload.fichier, upload.extension
FROM manifestations LEFT JOIN upload ON manifestations.id=upload.id_liaison
ORDER BY manifestations.date ASC";
$result = mysql_query($requete,$link) or exit ('Erreur : '.mysql_error() );
Je ne sais pas comment préciser que si le "LEFT JOIN" n'éxiste pas, il faut quand même afficher le contenu de la table "manifexstations".
Et si tu testes avant dans ton script l'existence de ton left join, ça modifie ta requête, ou plutôt tu en fais 2, une pour chaque cas ?
Holààààààààà !!!!!! Je ne suis pas une bête en php ..........
Il faudrait qu'avant de faire la requête je teste si une égalité de $id de la table "manifestations" existe dans la table "upload" en tant que $id_liaison. Mais çà, je sais pas comment faire !!!!!
Voici mon code :
$requete="SELECT manifestations.id, manifestations.jour , manifestations.heure ,manifestations.datefr ,manifestations.titre ,manifestations.texte , upload.id_liaison, upload.lien_fichier, upload.fichier, upload.extension
FROM manifestations LEFT JOIN upload ON manifestations.id=upload.id_liaison
ORDER BY manifestations.date ASC";
$result = mysql_query($requete,$link) or exit ('Erreur : '.mysql_error() );
$idEnCours = 0;
while($row = mysql_fetch_array($result))
{
if( $idEnCours != $row['id_liaison'] )
{
if ($idEnCours = $row['id_liaison']);
// "trim" enlève les espaces pouvant être contenu dans le champs "datefr"
$tmp = trim($row['datefr']);
$tmp2 = trim($row['heure']);
if(empty($tmp))
{
//echo nl2br($row['titre']);
echo '<b><u>'.$row['titre'].'</u></b><p>';
}
elseif(empty($tmp2))
{
echo '<b><u>'.$row['jour'].' '.$row['datefr'].' : '.$row['titre'].'</u></b><p>';
}
else
{
echo '<b><u>'.$row['jour'].' '.$row['datefr'].' à '.$row['heure'].' : '.$row['titre'].'</u></b><p>';
}
echo nl2br($row['texte']);
echo '<p>';
//---------affichage de lélément upload---------
echo '<div class="centrer">';
}
if (in_array($row['extension'], array( '.jpg', '.JPG', '.png', '.PNG', '.jpeg', '.JPEG', '.gif', '.GIF')))
{
echo '<a href ="http://xxxxx ' . $row['lien_fichier'] . '"><img src="http://xxxxxx' . $row['lien_fichier'] . '" /></a>';
echo ' ';
}
elseif (in_array($row['extension'], array( '.doc', '.DOC', '.pdf', '.PDF', '.txt', '.TXT')))
{
echo '<a href ="http://xxxxx' . $row['lien_fichier'] . '"><img src="../../../images/commande.gif" /></a>';
}
}
Il faudrait qu'avant de faire la requête je teste si une égalité de $id de la table "manifestations" existe dans la table "upload" en tant que $id_liaison. Mais çà, je sais pas comment faire !!!!!
Voici mon code :
$requete="SELECT manifestations.id, manifestations.jour , manifestations.heure ,manifestations.datefr ,manifestations.titre ,manifestations.texte , upload.id_liaison, upload.lien_fichier, upload.fichier, upload.extension
FROM manifestations LEFT JOIN upload ON manifestations.id=upload.id_liaison
ORDER BY manifestations.date ASC";
$result = mysql_query($requete,$link) or exit ('Erreur : '.mysql_error() );
$idEnCours = 0;
while($row = mysql_fetch_array($result))
{
if( $idEnCours != $row['id_liaison'] )
{
if ($idEnCours = $row['id_liaison']);
// "trim" enlève les espaces pouvant être contenu dans le champs "datefr"
$tmp = trim($row['datefr']);
$tmp2 = trim($row['heure']);
if(empty($tmp))
{
//echo nl2br($row['titre']);
echo '<b><u>'.$row['titre'].'</u></b><p>';
}
elseif(empty($tmp2))
{
echo '<b><u>'.$row['jour'].' '.$row['datefr'].' : '.$row['titre'].'</u></b><p>';
}
else
{
echo '<b><u>'.$row['jour'].' '.$row['datefr'].' à '.$row['heure'].' : '.$row['titre'].'</u></b><p>';
}
echo nl2br($row['texte']);
echo '<p>';
//---------affichage de lélément upload---------
echo '<div class="centrer">';
}
if (in_array($row['extension'], array( '.jpg', '.JPG', '.png', '.PNG', '.jpeg', '.JPEG', '.gif', '.GIF')))
{
echo '<a href ="http://xxxxx ' . $row['lien_fichier'] . '"><img src="http://xxxxxx' . $row['lien_fichier'] . '" /></a>';
echo ' ';
}
elseif (in_array($row['extension'], array( '.doc', '.DOC', '.pdf', '.PDF', '.txt', '.TXT')))
{
echo '<a href ="http://xxxxx' . $row['lien_fichier'] . '"><img src="../../../images/commande.gif" /></a>';
}
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ben, c'est pas évident comme ça, je connais pas la structure de tes tables, mais, sur le principe, il te faut récupérer ton $id_liaison.
Ensuite tu parcours ta table id pour voir si tu as une correspondance, si oui, tu lances ta requête normale, si non, tu lances ta requête modifiée.
Ensuite tu parcours ta table id pour voir si tu as une correspondance, si oui, tu lances ta requête normale, si non, tu lances ta requête modifiée.
Ben pour la table manifestation, j'ai comme enregistrement : id, heure, jour, date, datefr, frdate, titre, texte.
Pour la table upload, j'ai : id, id_liaison (qui est = à id de manifestation), lien_fichier, fichier, extension.
Il n'est pas obligatoire d'avoir un id_liaison, donc un lien avec la table manifestation. Mais si il n'y a pas de lien, la manifestation ne s'affiche pas !
Au pire, t'aurais pas exemple à me donner ???
Pour la table upload, j'ai : id, id_liaison (qui est = à id de manifestation), lien_fichier, fichier, extension.
Il n'est pas obligatoire d'avoir un id_liaison, donc un lien avec la table manifestation. Mais si il n'y a pas de lien, la manifestation ne s'affiche pas !
Au pire, t'aurais pas exemple à me donner ???
Ben si j'ai bien compris, si tu as un id_liaison, il faut afficher ta manif avec les "liens" => donc requête normale.
Si pas de id_liaison alors tu fais ta requête sans ton left join.
Je peux pas trop détailler, car je suis au taf et aujourd'hui c'est un peu chaud, mais en gros tu fais ça :
Voilà, c'est fait à la va vite, ya peut-être des erreurs mais je n'ai pas le temps de faire mieux et ça peut te donner des pistes...
Bon courage.
PS: utilise le bouton code, c'est plus lisible pour nous...
Si pas de id_liaison alors tu fais ta requête sans ton left join.
Je peux pas trop détailler, car je suis au taf et aujourd'hui c'est un peu chaud, mais en gros tu fais ça :
$req1="SELECT id_liaison FROM upload ORDER BY ce que tu veux"; $rsReq1= mysql_query($req1, $tachainedeconnexion); while($row = mysql_fetch_array($rsReq1)) { $req2="SELECT id FROM manifestation"; $rsReq2= mysql_query($req2, $tachainedeconnexion); while($row2 = mysql_fetch_array($rsReq2)) { if ($row['id_liaison'] == $row2['id']) { // la tu fais ce qu'il faut faire si tu as un id_liaison qui correspond } else { // là tu fais ce qu'il faut faire si tu n'en as pas } } }
Voilà, c'est fait à la va vite, ya peut-être des erreurs mais je n'ai pas le temps de faire mieux et ça peut te donner des pistes...
Bon courage.
PS: utilise le bouton code, c'est plus lisible pour nous...
J'ai fait ce que tu m'as dit :
et j'ai l'erreur Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource sur le 2° while (while($row2 = mysql_fetch_array($rsReq2)) ).
Je pense que deux while imbriqué ça ne passe pas !?
$req1="SELECT id_liaison FROM upload ORDER BY id_liaison ASC"; $rsReq1= mysql_query($req1, $link); while($row = mysql_fetch_array($rsReq1)) { $req2="SELECT id FROM manifestation"; $rsReq2= mysql_query($req2, $link); while($row2 = mysql_fetch_array($rsReq2)) { if ($row['id_liaison'] == $row2['id']) { echo '<b><u>'.$row['titre'].'</u></b><p>'; .................
et j'ai l'erreur Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource sur le 2° while (while($row2 = mysql_fetch_array($rsReq2)) ).
Je pense que deux while imbriqué ça ne passe pas !?
Pour déboguer, fais afficher tes variables à chaque étape en plaçant un exit; après, ça va t'aider à situer le pb... je suis désolé, mais pour aujourd'hui je ne peux plus faire gd chose pour toi !
Bonjour Zurg_,
Finalement, j'ai modifié pas mal de chose ....
Voici déjà mon script qui met la base à jour (en sachant que "monfichier" correspond au fichier uploadé. Le reste, ce sont des champs texte) :
Ainsi, si je saisi un texte + titre sans fichier à uploader : l'enregistrement texte est ok, et l'id dans id_liaison ok également (le reste en NUL).
Si je saisi un texte + titre avec fichier à uploader : l'enregistrement texte est ok, mais pour le fichier uploadé, c'est comme si il n'y en avait pas (l'id dans id_liaison ok, le reste en NUL).
En fait, j'éxécute toujours le dernier "else" !!!!! Alors, est-de que mon "if (isset($monfichier))" est bon ?
J'ai enlevé le "if (isset($monfichier))", et le dernier "else", et là, le fichier est bien uploadé. Ce qui prouve que la variable $monfichier existe bien !!!!
Peux-tu m'aider à débuguer car je ne sais plus quoi faire ..... :o((
Merci
Finalement, j'ai modifié pas mal de chose ....
Voici déjà mon script qui met la base à jour (en sachant que "monfichier" correspond au fichier uploadé. Le reste, ce sont des champs texte) :
$date = $_POST['date']; $heure = $_POST['heure']; $titre = $_POST['titre']; $message = $_POST['texte']; $monfichier = $_POST['monfichier']; $frdate = $date; // conservation date saisie //-----------Convertion "date" au format mysql------------- $date = explode("/", $date); $dateMySQL = $date[2]."-".$date[1]."-".$date[0]; //----------Convertion "date" au format texte-fr--------------- list($year, $month, $day) = explode("-", $dateMySQL); $months = array("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"); $datefr = " $day ".$months[$month-1]." $year "; //--------------recherche du jour_texte-------------------- // tableau des jours de la semaine $joursem = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"); // extraction des jour, mois, an de la date list($jour, $mois, $annee) = explode('/', $frdate); // calcul du timestamp $timestamp = mktime (0, 0, 0, $mois, $jour, $annee); // le jour de la semaine $jour_sem = $joursem[date("w",$timestamp)]; // ----------------test upload fichier------------------ if (isset($monfichier)) { $dossier = './dossier_upload/'; $fichier = basename($_FILES['monfichier']['name']); $taille_maxi = 2000000; $taille = filesize($_FILES['monfichier']['tmp_name']); $extensions = array('.gif', '.jpg', '.jpeg', '.doc', '.png', '.txt', '.TXT', '.PNG', '.GIF', '.JPG', '.JPEG', '.DOC'); $extension = strrchr($_FILES['monfichier']['name'], '.'); //--------------------upload fichier---------------------- if(move_uploaded_file($_FILES['monfichier']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné... { $sql = "INSERT INTO manifestations(heure, jour, date, frdate, datefr, titre, texte) VALUES('$heure', '$jour_sem', '$dateMySQL', '$frdate', '$datefr', '$titre', '$chaine')"; mysql_query($sql) or die('Erreur SQL !'.$sql.mysql_error()); $id=mysql_insert_id(); $req_fich = "INSERT INTO upload(id_liaison, lien_fichier, fichier, extension) VALUES('$id', '$dossier$fichier', '$fichier', '$extension')"; mysql_query($req_fich) or die('Erreur SQL !'.$req_fich.mysql_error()); } } else { $sql = "INSERT INTO manifestations(heure, jour, date, frdate, datefr, titre, texte) VALUES('$heure', '$jour_sem', '$dateMySQL', '$frdate', '$datefr', '$titre', '$chaine')"; mysql_query($sql) or die('Erreur SQL !'.$sql.mysql_error()); $id=mysql_insert_id(); $req_fich = "INSERT INTO upload(id_liaison) VALUES('$id')"; mysql_query($req_fich) or die('Erreur SQL !'.$req_fich.mysql_error()); }
Ainsi, si je saisi un texte + titre sans fichier à uploader : l'enregistrement texte est ok, et l'id dans id_liaison ok également (le reste en NUL).
Si je saisi un texte + titre avec fichier à uploader : l'enregistrement texte est ok, mais pour le fichier uploadé, c'est comme si il n'y en avait pas (l'id dans id_liaison ok, le reste en NUL).
En fait, j'éxécute toujours le dernier "else" !!!!! Alors, est-de que mon "if (isset($monfichier))" est bon ?
J'ai enlevé le "if (isset($monfichier))", et le dernier "else", et là, le fichier est bien uploadé. Ce qui prouve que la variable $monfichier existe bien !!!!
Peux-tu m'aider à débuguer car je ne sais plus quoi faire ..... :o((
Merci
Salut,
Apparemment, tes variables $fichier $extension sont vides.
Pour le vérifier fais simplement un echo de ces valeurs dans ton if principal, puis dans le 2e.
Si tes variables s'affichent correctement, c'est que la condition 1 n'est jamais remplie.
Dans ton script, $monfichier fait référence à $_POST['monfichier'] ce qui provient d'un champ. Je ne connais pas ton formulaire qui appelle ce script, mais je pense que tu veux vérifier qu'il y a bien un fichier à uploader. Il faudrait donc que tu vérifie plutôt que $_FILES['monfichier'] existe.
Non ?
Apparemment, tes variables $fichier $extension sont vides.
Pour le vérifier fais simplement un echo de ces valeurs dans ton if principal, puis dans le 2e.
Si tes variables s'affichent correctement, c'est que la condition 1 n'est jamais remplie.
Dans ton script, $monfichier fait référence à $_POST['monfichier'] ce qui provient d'un champ. Je ne connais pas ton formulaire qui appelle ce script, mais je pense que tu veux vérifier qu'il y a bien un fichier à uploader. Il faudrait donc que tu vérifie plutôt que $_FILES['monfichier'] existe.
Non ?