Problème d'affichage d'image dans tableau

aichatou - 2 mai 2024 à 13:25
 vermoulu - 2 mai 2024 à 17:29

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

A voir également:

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.

0