[RESOLU] problème d'affichage d'une image uploader enregistré sur phpmyad

Eléphant du PHP | 89 Messages

23 août 2022, 00:36

Bonjour, voilà j'ai une boucle while qui affiche du texte (+une checkbox) et à côté duquel je voudrais que l'utilisateur puisse upload une image. Jusqu'ici tout marchais presque j'usquà ce que je me rende compte que lorsque l'on upload une image celle-ci s'affiche pour tous les éléments de la boucle hors j'aimerais qu'elle s'affiche une seul fois (à l'endroit où on l'a upload) j'ai pensé à modifié le nom d'une des fonctions avec un nom de fonction changeant à chaque fois que le boucle recommence mais je ne sais pas comment m'y prendre. Pouvez vous m'aider ?

Code : Tout sélectionner

<h3>Agir, s'exprimer,comprendre à travers l'éducation physique </h3> <?php $fp = @fopen("popup/compétence/agir, s'exprimer,comprendre à travers l'éducation physique.txt", "r"); require './bdd.php'; $id=100; $id1=150; $i=1; if ($fp) { while ($buffe = fgets($fp)) { echo "<input type='checkbox' name='$id' onClick='GereChkbox('div_chck','1');' />".$buffe.'<form action="saisir.php" method="POST" enctype="multipart/form-data"> <label for="file2"></label> <input type="file" name="file2"> <button type="submit">Enregistrer</button> </form>'; ${'doc' . $i} = $i; echo 'doc' . $i; $i++; echo "<br><br>"; if(isset($_FILES['file2'])){ $tmpName = $_FILES['file2']['tmp_name']; $name = $_FILES['file2']['name']; $size = $_FILES['file2']['size']; $error = $_FILES['file2']['error']; $tabExtension = explode('.', $name); $extension = strtolower(end($tabExtension)); $extensions = ['jpg', 'png', 'jpeg', 'gif']; $maxSize = 400000; if(in_array($extension, $extensions) && $size <= $maxSize && $error == 0){ $file2 = $name; //$file = 5f586bf96dcd38.73540086.jpg move_uploaded_file($tmpName, './upload/'.$file2); ${'req' . $i} = $db->prepare('INSERT INTO file2 (name) VALUES (?)'); ${'req' . $i}->execute([$file2]); } } ${'req' . $i} = $db->query('SELECT name FROM file2'); while($data = ${'req' . $i}->fetch()){ echo "<img src='./upload/".$data['name']."' width='100px' id='$id1'><br>"; } if (isset( $_POST['envoie'])) { if (isset( $_POST['value_1'])) echo $_POST['value_1'].'<br />'; // Contenu de la global P_POST print_r($_POST); } } fclose($fp); } ?>

Mammouth du PHP | 1967 Messages

23 août 2022, 08:31

il faut que le nom de ton input de type file ai un nom différent à chaque itération

le plus simples est d'utiliser $i qui est ton compteur
<input type="file" name="file2-$i">
tu devra aussi incrémenté ton compteur à un autre endroit
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 89 Messages

23 août 2022, 09:59

Bonjour, merci pour ton retour j'ai changer le <input type="file" name="file2-$i"> qui est à la ligne 14 mais je me demande si il n'y a pas à changer un file2 en file2.$i à d'autres endroits car cela n'affiche plus aucune image (je te met ce à quoi ressemble le code à l'heure actuel

Code : Tout sélectionner

<h3>Agir, s'exprimer,comprendre à travers l'éducation physique </h3> <?php $fp = @fopen("popup/compétence/agir, s'exprimer,comprendre à travers l'éducation physique.txt", "r"); require './bdd.php'; $id=100; $id1=150; $i=1; if ($fp) { while ($buffe = fgets($fp)) { echo "<input type='checkbox' name='$id' onClick='GereChkbox('div_chck','1');' />".$buffe.'<form action="saisir.php" method="POST" enctype="multipart/form-data"> <label for="file2"></label> <input type="file" name="{file2.$i}"> <button type="submit">Enregistrer</button> </form>'; $i++; echo "<br><br>"; if(isset($_FILES['file2'])){ $tmpName = $_FILES['file2']['tmp_name']; $name = $_FILES['file2']['name']; $size = $_FILES['file2']['size']; $error = $_FILES['file2']['error']; $tabExtension = explode('.', $name); $extension = strtolower(end($tabExtension)); $extensions = ['jpg', 'png', 'jpeg', 'gif']; $maxSize = 400000; if(in_array($extension, $extensions) && $size <= $maxSize && $error == 0){ $file2 = $name; //$file = 5f586bf96dcd38.73540086.jpg move_uploaded_file($tmpName, './upload/'.$file2); ${'req' . $i} = $db->prepare('INSERT INTO file2 (name) VALUES (?)'); ${'req' . $i}->execute([$file2]); } } ${'req' . $i} = $db->query('SELECT name FROM file2'); while($data = ${'req' . $i}->fetch()){ echo "<img src='./upload/".$data['name']."' width='100px' id='$id1'><br>"; } if (isset( $_POST['envoie'])) { if (isset( $_POST['value_1'])) echo $_POST['value_1'].'<br />'; // Contenu de la global P_POST print_r($_POST); } } fclose($fp); } ?>

Mammouth du PHP | 1967 Messages

23 août 2022, 13:18

bien sur qu'il va faloir changer d'autre file2, a toi de voir où. C'est comme cela qu'on apprends.

Il est important de savoir ce que fait ton code et pourquoi.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 89 Messages

23 août 2022, 15:45

Bonjour, j'ai beau essayer je ne trouve pas quel file2 il faut modifier (j'ai essayer en modifiant celui qui est en <label for="file2" et j'ai essayer en modifiant tous ceux qui sont dans le if(isset($_FILES['file2']))
Les modifications que j'ai faites donne ça mais ça ne marche toujours pas (je n'ai plus rien qui s'affiche ni même qui s'enregistre.
Donc je crois que je vais avoir besoin d'aide pour m'indiquer pourquoi ça ne fonctionne pas :cry:

Code : Tout sélectionner

<h3>Agir, s'exprimer,comprendre à travers l'éducation physique </h3> <?php $fp = @fopen("popup/compétence/agir, s'exprimer,comprendre à travers l'éducation physique.txt", "r"); require './bdd.php'; $id=100; $id1=150; $i=1; if ($fp) { while ($buffe = fgets($fp)) { echo "<input type='checkbox' name='$id' onClick='GereChkbox('div_chck','1');' />".$buffe.'<form action="saisir.php" method="POST" enctype="multipart/form-data"> <label for="file2"></label> <input type="file" name="file2.$i"> <button type="submit">Enregistrer</button> </form>'; $i++; echo "<br><br>"; if(isset($_FILES['file2.$i'])){ $tmpName = $_FILES['file2.$i']['tmp_name']; $name = $_FILES['file2.$i']['name']; $size = $_FILES['file2.$i']['size']; $error = $_FILES['file2.$i']['error']; $tabExtension = explode('.', $name); $extension = strtolower(end($tabExtension)); $extensions = ['jpg', 'png', 'jpeg', 'gif']; $maxSize = 400000; if(in_array($extension, $extensions) && $size <= $maxSize && $error == 0){ $file2 = $name; //$file = 5f586bf96dcd38.73540086.jpg move_uploaded_file($tmpName, './upload/'.$file2); $req = $db->prepare('INSERT INTO file2 (name) VALUES (?)'); $req->execute([$file2]); } } $req = $db->query('SELECT name FROM file2'); while($data = $req->fetch()){ echo "<img src='./upload/".$data['name']."' width='100px' id='$id1'><br>"; } if (isset( $_POST['envoie'])) { if (isset( $_POST['value_1'])) echo $_POST['value_1'].'<br />'; // Contenu de la global P_POST print_r($_POST); } } fclose($fp); } ?>

Mammouth du PHP | 1967 Messages

24 août 2022, 08:22

tu devra aussi incrémenté ton compteur à un autre endroit
vérifie le contenu de tes variables avec des var_dump pour comprendre le cheminement de ton code.

Connais tu la différence entre simple quote et double quote ?
c'est important, et cela change tout
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 89 Messages

24 août 2022, 13:44

A vrai dire non je ne connais pas la différence entre simple quote et double quote mais si je me fit à la traduction de l'expression je dirais que le simple quote = ' et le double quote = " mais je ne sais pas quel est la différence dans l'utilisation que l'on en fait dans le code

Mammouth du PHP | 2703 Messages

24 août 2022, 14:12

il faut donc se renseigner ou faire ce simple test :
$i = 1;
echo 'file2.$i';
echo "file2.$i";

Eléphant du PHP | 89 Messages

24 août 2022, 14:30

tu devra aussi incrémenté ton compteur à un autre endroit
Oui le conteur, actuellement, s'ouvre au début de la saisi du php ($i=1;) et se voit ajouter +1 à la fin de chaque boucle ($i++;)
et lorsque j'entre la commande :
var_dump ($_FILES['file']);

alors que j'ai modifier pour mettre des $_FILES['file'.$i] j'obtiens ceci:
C:\wamp64\www\test\test.php:34:
array (size=5)
'name' => string '6g.jpg' (length=6)
'type' => string 'image/jpeg' (length=10)
'tmp_name' => string 'C:\wamp64\tmp\php86FE.tmp' (length=25)
'error' => int 0
'size' => int 133600
et si je met :
var_dump ($_FILES['file'.$i]);

j'obtiens:
Notice: Undefined index: file1 in C:\wamp64\www\test\test.php on line 34

C:\wamp64\www\test\test.php:34:null

Donc je ne vois pas pourquoi (je te met le code afin que tu puisse voir ce que j'ai fait

Code : Tout sélectionner

<h3>Agir, s'exprimer, comprendre à travers l'éducation artistique </h3> <?php $fp = @fopen("test.txt", "r"); require './bdd.php'; $id=200; $id1=250; $i=1; echo 'file'.$i; echo "file".$i; if ($fp) { while ($buffe = fgets($fp)) { echo "<input type='checkbox' name='$id' onClick='GereChkbox('div_chck','1');' />".$buffe.'<form action="test.php" method="POST" enctype="multipart/form-data"> <label for="file".$i></label> <input type="file" name="file".$i> <button type="submit">Enregistrer</button> </form>' ; var_dump ($_FILES['file'.$i]); "<br><br>"; $req = $db->query('SELECT name FROM file'); while($data = $req->fetch()){ echo "<img src='./upload/".$data['name']."' width='300px' id='$id1'><br>"; } if (isset( $_POST['envoie'])) { if (isset( $_POST['value_1'])) echo $_POST['value_1'].'<br />'; // Contenu de la global P_POST print_r($_POST); } $id=$id+1; $id1=$id1+1; $i++; } if(isset($_FILES['file'.$i])){ $tmpName = $_FILES['file'.$i]['tmp_name']; $name = $_FILES['file'.$i]['name']; $size = $_FILES['file'.$i]['size']; $error = $_FILES['file'.$i]['error']; $tabExtension = explode('.', $name); $extension = strtolower(end($tabExtension)); $extensions = ['jpg', 'png', 'jpeg', 'gif']; $maxSize = 400000; if(in_array($extension, $extensions) && $size <= $maxSize && $error == 0){ $file = $name; //$file = 5f586bf96dcd38.73540086.jpg move_uploaded_file($tmpName, './upload/'.$file); $req = $db->prepare('INSERT INTO file (name) VALUES (?)'); $req->execute([$file]); } } fclose($fp); } ?>

Mammouth du PHP | 1967 Messages

24 août 2022, 17:31

si tu regarde le code source généré tu devrais voir du code qui ne correspond pas à ce qu'il faudrait.

c'est en partie à cause des ' et " qui ne sont pas correctement utilisé
en php, avec des " il est possible de mettre des variables qui seront interprété
alors qu'avec des ' tous sera pris litéralement
$i = 1;
echo "$i"; // 1
echo '$i'; // $i
l'autre erreur que je vois est que ta partie de récupèration de fichier est en dehors de ta boucle, du coup $i est égal à tonnombre d'itération donc dans ton tableau $_FILES c'est sur que ca correspond à rien. tu devrais parcourir ton tableau $_FILES et grâce à l'index tu sauras à quel $i ton fichier correspond
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 89 Messages

24 août 2022, 20:52

Je me pose une question : est ce que le fait que le :

Code : Tout sélectionner

.'<form action="saisir.php" method="POST" enctype="multipart/form-data"> <label for="file2"></label> <input type="file" name="file2"> <button type="submit">Enregistrer</button> </form>';
Soit dans la partie php sous cette forme n'empêche pas de mettre le file2$i pour le <label for="file2" et pour le name="file2" ?

Mammouth du PHP | 1967 Messages

24 août 2022, 21:12

bien sur, mais tu as plusieurs solution

tu continue ta concaténation

Code : Tout sélectionner

.'<form action="saisir.php" method="POST" enctype="multipart/form-data"> <label for="file'.$i.'"></label> <input type="file" name="file'.$i.'"> <button type="submit">Enregistrer</button> </form>';
tu passe en double quote et tu échappe celle dont tu as besoin

Code : Tout sélectionner

."<form action=\"saisir.php\" method=\"POST\" enctype=\"multipart/form-data\"> <label for=\"file$i\"></label> <input type=\"file\" name=\"file$i\"> <button type=\"submit\">Enregistrer</button> </form>";
mais je trouve la 1ère solution plus élégante
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 89 Messages

24 août 2022, 22:45

Alors le code on y est presque mais je ne peux avoir qu'une seule image à la fois car si je ne peux en afficher qu'à un seul endroit à la fois (une fois la première image afficher si on en upload une seconde la première disparait et on a plus que la seconde mais je ne vois pas comment régler le problème.

Code : Tout sélectionner

<h3>Agir, s'exprimer,comprendre à travers l'éducation physique </h3> <?php $fp = @fopen("popup/compétence/agir, s'exprimer,comprendre à travers l'éducation physique.txt", "r"); require './bdd.php'; $id=200; $id1=250; $i=1; if ($fp) { while ($buffe = fgets($fp)) { echo "<input type='checkbox' name='$id' onClick='GereChkbox('div_chck','1');' />".$buffe.'<form action="saisir.php" method="POST" enctype="multipart/form-data"> <label for="file2'.$i.'"></label> <input type="file" name="file2'.$i.'"> <button type="submit">Enregistrer</button> </form>'; var_dump($i); if(isset($_FILES["file2$i"])){ $tmpName = $_FILES["file2$i"]['tmp_name']; $name = $_FILES["file2$i"]["name"]; $size = $_FILES["file2$i"]['size']; $error = $_FILES["file2$i"]['error']; $tabExtension = explode('.', $name); $extension = strtolower(end($tabExtension)); $extensions = ['jpg', 'png', 'jpeg', 'gif']; $maxSize = 400000; if(in_array($extension, $extensions) && $size <= $maxSize && $error == 0){ $file2 = $name; //$file = 5f586bf96dcd38.73540086.jpg move_uploaded_file($tmpName, './upload/'.$file2); $req = $db->prepare("INSERT INTO file2$i (name) VALUES (?)"); $req->execute([$file2]); $req = $db->query("SELECT name FROM file2$i"); while($data = $req->fetch()){ echo "<img src='./upload/".$data['name']."' width='300px' id='$id1'><br>"; } } } $id=$id++; $id1=$id1++; $i++; } fclose($fp); } ?>

Mammouth du PHP | 1967 Messages

25 août 2022, 08:30

La partie qui check ta BDD pour afficher les/l'image est bloqué dans ta condition d'avoir un fichier à uploader, retire là de cette condition et ca devrait marcher
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 89 Messages

25 août 2022, 14:53

Merci beaucoup c'est bon tout marche correctement maintenant
(voici le code complet pour ceux que ça peux intéressé)

Code : Tout sélectionner

<h3>Mobiliser le langage dans toutes ses dimensions </h3> <?php $fp = @fopen("popup/compétence/mobiliser le langage dans toutes ses dimensions.txt", "r"); require './bdd.php'; $id=200; $id1=250; $i=1; if ($fp) { while ($buffe = fgets($fp)) { echo "<input type='checkbox' name='$id' onClick='GereChkbox('div_chck','1');' />".$buffe.'<form action="saisir.php" method="POST" enctype="multipart/form-data"> <label for="file1'.$i.'"></label> <input type="file" name="file1'.$i.'"> <button type="submit">Enregistrer</button> </form>'; if(isset($_FILES["file1$i"])){ $tmpName = $_FILES["file1$i"]['tmp_name']; $name = $_FILES["file1$i"]["name"]; $size = $_FILES["file1$i"]['size']; $error = $_FILES["file1$i"]['error']; $tabExtension = explode('.', $name); $extension = strtolower(end($tabExtension)); $extensions = ['jpg', 'png', 'jpeg', 'gif']; $maxSize = 400000; if(in_array($extension, $extensions) && $size <= $maxSize && $error == 0){ $file1 = $name; //$file = 5f586bf96dcd38.73540086.jpg move_uploaded_file($tmpName, './upload/'.$file1); $req = $db->prepare("INSERT INTO file1$i (name) VALUES (?)"); $req->execute([$file1]); }} $req = $db->query("SELECT name FROM file1$i"); while($data = $req->fetch()){ echo "<img src='./upload/".$data['name']."' width='300px' id='$id1'><br>"; } $id=$id++; $id1=$id1++; $i++; echo"<br>"; } fclose($fp); } ?>