Problème d'affichage d'image dans tableau
vermoulu -
Bonjour, j'ai créé un formulaire( dans lequel on remplit certains champs tels nom,prenom,photo) et un tableau pour afficher ce qui a été rempli dans le formulaire. Le problème est que photo ne s'affiche pas dans le tableau et ne s'enregistre pas dans la base de données. ça m'affiche un message d'erreur. Je travaille avec php sous xampp.
Voici le message d'erreur qui s'affiche:
Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'photo' cannot be null in C:\Nouveau dossier\htdocs\ALI3\funda-service\admin\operation.php:86 Stack trace: #0 C:\Nouveau dossier\htdocs\ALI3\funda-service\admin\operation.php(86): PDOStatement->execute(Array) #1 {main} thrown in C:\Nouveau dossier\htdocs\ALI3\funda-service\admin\operation.php on line 86
Voici le fichier dans lequel j'ai créé le tableau:
<div class="card-body"> <table id="example1" class="table table-bordered table-striped"> <thead> <tr> <th width="5%">Num_mat</th> <th width="15%">Nom</th> <th width="15%">Prenom</th> <th>Fonction</th> <th>Profession</th> <th>Photo</th> <th width="10%">Action</th> </tr> </thead> <tbody> <?php $re=$cn->query(' SELECT num_mat,nom,prenom,fonction,profession,photo FROM employe'); while ($tabRe=$re->fetch()) {?> <tr> <td><?php echo $tabRe['num_mat']; ?></td> <td><?php echo $tabRe['nom']; ?></td> <td><?php echo $tabRe['prenom']; ?></td> <td><?php echo $tabRe['fonction']; ?></td> <td><?php echo $tabRe['profession'] ?></td> <td><img width="40" height="30" src="assets/dist/img/<?php echo $tabRe['photo']; ?>"> <td> <a href=""> <button class="btn btn-sm btn-primary"><i class="fa fa-pen"></i></button></a> <a href=""><button class="btn btn-sm btn-danger"><i class="fa fa-trash"></i></button></a> </td> </tr> <?php }?> </tbody> </table> </div>
voici le fichier pour l'insertion des données:
<?php //affichage du message d'erreur error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //fin d'affichage session_start(); if(!empty($_SESSION['id']) || isset($_SESSION['id'])){ header('location:accueil.php?msg=1'); } include('config/cn.php'); extract($_POST); if(isset($_POST['c'])){ try{ $num_mat = $_POST['num_mat'] ?? ''; $nom = $_POST['nom'] ?? ''; $prenom = $_POST['prenom'] ?? ''; $photo = $_POST['photo'] ?? ''; $profession = $_POST['profession'] ?? ''; $fonction = $_POST['fonction'] ?? ''; $statut = $_POST['statut'] ?? ''; $type_cont = $_POST['type_cont'] ?? ''; $date_debut_cont = $_POST['date_debut_cont'] ?? ''; $date_fin_cont = $_POST['date_fin_cont'] ?? ''; $nom_per_urg = $_POST['nom_per_urg'] ?? ''; $prenom_per_urg = $_POST['prenom_per_urg'] ?? ''; $tel_per_urg = $_POST['tel_per_urg'] ?? ''; #----------------------------fichier pour stocker les photos--------------------------- if (($_POST['c']==3) or ($_POST['c']==4) or ($_POST['c']==1)) { # code... $tmp_photo=$_FILES['photo']['tmp_name'];//pour recuperer ce qui a ete envoye dans temp $photo=$_FILES['photo']['name']; $photo_type=$_FILES['photo']['type'];// is_uploaded_file if(is_uploaded_file($tmp_photo)) { if(!strstr($photo_type,"jpg")) { echo "ceci n'est pas une photo jpg"; } if(!move_uploaded_file($tmp_photo,"./image/$photo"))//image c'est le dossier ou sera place les photos des agents { echo "Destination invalide"; } } } #--------------------------------------------------------------------------------- /*$content_dir = 'photo/'; // dossier où sera déplacé le fichier $photo = $_POST['photo'] ?? ''; $tmp_file = $_FILES['photo']['tmp_name']; if( !is_uploaded_file($tmp_file) ) { exit("Le fichier est introuvable"); } // on vérifie maintenant l'extension $type_file = $_FILES['photo']['type']; if(!strstr($type_file, 'png') && !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') ) { exit("Le fichier n'est pas une image"); } // on copie le fichier dans le dossier de destination $photo = $_FILES['photo']['name']; if( !move_uploaded_file($tmp_file, $content_dir .$photo) ) { exit("Impossible de copier le fichier dans $content_dir"); } echo "Le fichier a bien été uploadé"; */ #------------------------------------------------fin-------------------------------- if($_POST['c']==1){ $ins=$cn->prepare('INSERT INTO employe(num_mat,nom,prenom,datenaiss,lieunaiss,email,tel,cin,cnss,sitmat,charge,nationalite,profession,photo,fonction,statut,type_cont,date_debut_cont,date_fin_cont,nom_per_urg,prenom_per_urg,tel_per_urg) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'); $ins->execute([$num_mat,$nom,$prenom,$datenaiss,$lieunaiss,$email,$tel,$cin,$cnss,$sitmat,$charge,$nationalite,$profession,$photo,$fonction,$statut,$type_cont,$date_debut_cont,$date_fin_cont,$nom_per_urg,$prenom_per_urg,$tel_per_urg]); header("location:enseignant.php"); } }catch(Exeception $e){ echo "Erreur".$e->getMessage(); echo "num_mat,nom,prenom,photo"; print_r([$num_mat,$nom,$prenom,$photo]); } //var_dump($_POST); } ?>
Merci d'avance pour votre aide!
Windows / Firefox 125.0
- Problème d'affichage d'image dans tableau
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Image iso - Guide
1 réponse
Salut, pour faire avancer la chose, il faudrait voir ce que vaut $photo avant l'enregistrement, à mon avis, c'est une chaine vide.
Un truc quand même pas clair dans ton script est que tu stockes différentes choses dans cette variable, $_FILES['photo']['name'], $_POST['photo'] ou même une chaine vide, ce qui ne devrait pas être possible s'il est obligatoire de fournir cette image.
Il fudrait voir à séparer contrôle de l'image et enregistrement dans des fonctions afin de rendre cela plus clair.
Attention aussi à virer (transformer) les caractères spéciaux du nom de l'image, bref garder alphanumériques tiret et underscore et aussi y ajouter un id unique afin d'éviter les écrasements en cas de même noms.