Pb enregistrement dans base mysql
Résolu/Fermé
t671
-
22 oct. 2009 à 10:43
zurg_ Messages postés 134 Date d'inscription jeudi 15 octobre 2009 Statut Membre Dernière intervention 15 avril 2010 - 27 oct. 2009 à 13:41
zurg_ Messages postés 134 Date d'inscription jeudi 15 octobre 2009 Statut Membre Dernière intervention 15 avril 2010 - 27 oct. 2009 à 13:41
A voir également:
- Pb enregistrement dans base mysql
- Formules excel de base - Guide
- Mysql download - Télécharger - Bases de données
- Telecharger studio d'enregistrement rap - Télécharger - Édition & Montage
- Youtube enregistrement vidéo - Guide
- Base de registre - Guide
11 réponses
zurg_
Messages postés
134
Date d'inscription
jeudi 15 octobre 2009
Statut
Membre
Dernière intervention
15 avril 2010
27
22 oct. 2009 à 11:07
22 oct. 2009 à 11:07
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".
zurg_
Messages postés
134
Date d'inscription
jeudi 15 octobre 2009
Statut
Membre
Dernière intervention
15 avril 2010
27
22 oct. 2009 à 11:38
22 oct. 2009 à 11:38
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
zurg_
Messages postés
134
Date d'inscription
jeudi 15 octobre 2009
Statut
Membre
Dernière intervention
15 avril 2010
27
22 oct. 2009 à 14:04
22 oct. 2009 à 14:04
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 ???
zurg_
Messages postés
134
Date d'inscription
jeudi 15 octobre 2009
Statut
Membre
Dernière intervention
15 avril 2010
27
22 oct. 2009 à 15:05
22 oct. 2009 à 15:05
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 !?
zurg_
Messages postés
134
Date d'inscription
jeudi 15 octobre 2009
Statut
Membre
Dernière intervention
15 avril 2010
27
22 oct. 2009 à 17:08
22 oct. 2009 à 17:08
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 !
t671
Messages postés
1423
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
16 juillet 2024
11
24 oct. 2009 à 11:16
24 oct. 2009 à 11:16
Merci !!!! Merci pour tout, j'ai trouvé ............. ;o))
t671
Messages postés
1423
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
16 juillet 2024
11
23 oct. 2009 à 17:55
23 oct. 2009 à 17:55
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
zurg_
Messages postés
134
Date d'inscription
jeudi 15 octobre 2009
Statut
Membre
Dernière intervention
15 avril 2010
27
27 oct. 2009 à 10:58
27 oct. 2009 à 10:58
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 ?
zurg_
Messages postés
134
Date d'inscription
jeudi 15 octobre 2009
Statut
Membre
Dernière intervention
15 avril 2010
27
27 oct. 2009 à 13:41
27 oct. 2009 à 13:41
Bravo !
@ +
@ +