Petit problème pour récupérer directement les donées

Résolu/Fermé
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 - 19 juin 2016 à 17:49
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 - 23 juin 2016 à 13:00
Bonjour,
Depuis quelque semaines je fait des expériences avec le magnifique langage html, css, php et sql.

Mais je me suis heurté a un problème, je n'arrive pas récupérer une valeur alors j'ai contourné le problème en affichant la valeur puis je le rentre moi même via une autre page mais bon pas très intuitive tous cela.

La page pour mettre l'image sur le serveur.

<html>
<head>
<title>TUTO PHP</title>
<meta charset="utf-8">
</head>
<body>
<br /> <br />
<div align="center">
<table>
<tr>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fichier" /><br />
<input type="submit" name="envoie" value="Envoyer le fichier" />
</form>
</tr>
</table>
</form>
</div>
</body>
</html>


Le fichier "upload.php"

`<?php
move_uploaded_file($_FILES['fichier']['tmp_name'], 'upload/'.basename($_FILES['fichier']['name']));
$message = "".$_FILES['fichier']['name'];
$info = "Action effectuer avec succès";
echo $message;
echo '<br /><font color="green">'.$info."</font><br /><a href=\"site4.php\">Retour<a/>";
?>
<html>
<body>
<br />
<br />
<a href="site5.php">Envoie</a>
</body>
</html>



Le fichier envoie pour l'enregistrement dans la base de donnée avec un commentaire sous la photo.


<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=site1', 'root', '');
if(isset($_POST['envoie']))
{
if(!empty($_POST['adresse']))
{
$adresse = ($_POST['adresse']);
$legende = ($_POST['legende']);
$insertmbr = $bdd->prepare("INSERT INTO photo(adresse, text) VALUES(?, ?)");
$insertmbr->execute(array($adresse, $legende));
$info = "La photo et le commentaire a était inscrit au serveur ! <a href=\"/sites/site7.php\">Aller voir !<a/>";
}
}
else
{
$erreur = "La photo et le commentaire n'ont pas était envoyer !";
}
?>
<html>
<head>
<title>TUTO PHP</title>
<meta charset="utf-8">
</head>
<body>
<div align="center">
<h1>Inscription</h1>
<img src="" class="image" alt="Photo" />
<br /> <br />
<form method="POST" action="">
<table>
<tr>
<td align="right">
<label for="photo">Adresse de la photo :</label>
</td>
<td align="right">
<input type="text" size="100" style="height:25px;" placeholder="Adresse du serveur" id="adresse" name="adresse" />
</td>
</tr>
<tr>
<td align="right">
<label for="legende">Commentaire sous la photo :</label>
</td>
<td align="right">
<input type="text" size="100" style="height:25px;" placeholder="Commentaire" id="legende" name="legende" />
</td>
</tr>
<tr>
<td></td>

<td align="center">
<br />
<input type="submit" name="envoie" value="Enregistrement dans la base de donnée !" />
</td>
</tr>
</table>
</form>
<?php
if(isset($erreur))
{
echo '<font color="red">'.$erreur."</font>";
}
if(isset($info))
{
echo '<font color="green">'.$info."</font>";
}
?>
</div>
</body>
</html>



Puis la page de résultat pour voir ce qui sais passé. ( je sais je devrait utiliser du CSS au lieu des <br /> mais sais juste pour tester).


<?php
session_start();

$bdd = new PDO('mysql:host=127.0.0.1;dbname=site1', 'root', '');

?>

<html>
<head>
<title>TUTO PHP</title>
<meta charset="utf-8">
</head>
<body>
<style type="text/css">
p
{
color: blue;
}
h2
{
color: blue;
}


</style>
<div align="center">
<?php
$reponse = $bdd->query('SELECT * FROM accueil');


// On affiche chaque entrée une à une

while ($mess = $reponse->fetch())

{

?>
<h2><?php echo $mess['presentation']; ?></h2>
<?php
}
?>
<div align="center">
<table align="center">
<form method="POST" action="" enctype="multipart/form-data">
<tr>
<td align="center">

<?php
$reponse = $bdd->query('SELECT * FROM photo');


// On affiche chaque entrée une à une

while ($donnees = $reponse->fetch())

{

?>


<br />
<br />
<br />
<br />
<br />
<p><img src="upload/<?php echo $donnees['adresse']; ?>" height="550" width="700 alt="" title="" /></p>
<p><?php echo $donnees['text']; ?></p>
</td>
</tr>
<br /><br />
<td></td>

<?php
}

?>

</form>

</table>
</div>
</body>
</html>


2 réponses

jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
19 juin 2016 à 20:18
Bonjour,

Peux tu expliquer exactement le souci rencontré ?
Quelle partie du code, selon toi, ne fonctionne pas ?


0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
20 juin 2016 à 20:48
Bonjour,
Donc le code fonctionne mais je voudrais que cela sois plus simple.
J'aimerai sur la page que sur la page pour sélectionner la photo et l'envoyer au serveur stocké dans le dossier "upload".


<html>
<head>
<title>TUTO PHP</title>
<meta charset="utf-8">
</head>
<body>
<br /> <br />
<div align="center">
<table>
<tr>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fichier" /><br />
<input type="submit" name="envoie" value="Envoyer le fichier" />
</form>
</tr>
</table>
</form>
</div>
</body>
</html>


Après j'aimerai que cela sois traité en récupérant la valeur de la cible de la photo et laisser un message qui me dit que sais bon que cela sais bien effectuer.

Je vais travailler la dessus.
Merci d'avance.
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
20 juin 2016 à 22:05
Re, j'ai tester de tous réunir dans une seule et unique page mais la problème rien ne fonctionne :/
Si quelqu’un peu m'aider ,....


<?php
session_start();

$bdd = new PDO('mysql:host=127.0.0.1;dbname=site1', 'root', '');
if(isset($_POST['envoie']))
{
move_uploaded_file($_FILES['fichier']['tmp_name'], 'upload/'.basename($_FILES['fichier']['name']));
$message = "".$_FILES['fichier']['name'];
$info = "Action effectuer avec succès";
echo $message;
echo '<br /><font color="green">'.$info."</font><br /><a href=\"site4.php\">Retour<a/>";
if(!empty($_POST['$legende']))
{
$message = ($_SESSION['message']);
$legende = ($_POST['legende']);
$insertmbr = $bdd->prepare("INSERT INTO photo(adresse, text) VALUES(?, ?)");
$insertmbr->execute(array($message, $legende));
$info = "La photo et le commentaire a était inscrit au serveur ! <a href=\"/sites/site7.php\">Aller voir !<a/>";
echo "<p>tout marche</p>";
}
}
else
{
$erreur = "La photo et le commentaire n'ont pas était envoyer !";
}
?>
<html>
<head>
<title>TUTO PHP</title>
<meta charset="utf-8">
</head>
<body>
<br /> <br />
<div align="center">
<table>
<label for="fichier">Votre photo :</label>
<p>La taille maximum de la photo doit être de 20 MO !</p>
<td>
<tr>
<form action="envoie.php" method="post" enctype="multipart/form-data">
<input type="file" name="fichier" id="fichier" /><br />
</tr>
</td>
<br />
<br />
<br />
<td>
<tr>
<label for="legende">Commentaire sous la photo :</label><br /><br />
</tr>
</td>
<td>
<tr>
<textarea name="legende" id="legende" rows="10" cols="40">Saisir un texte ici.</textarea>
</tr>
</td>
<br /><br />
<td>
<tr>
<input type="submit" name="envoie" value="Envoyer le fichier" />
</tr>
</td>
</form>
</table>
</form>
</div>
</body>
</html>

0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
Modifié par jordane45 le 21/06/2016 à 16:31
Bonjour,

Déjà... il est préférable de mettre le code de connexion à ta BDD dans un fichier à part
que tu n'auras qu'à inclure dans tes pages (au lieu de le copier/coller 50 fois....)
Puis pour que PDO t'affiche les erreurs... il faut, lors de la connexion ajouter quelques options.

Modifie ta connexion à la bdd en t'inspirant de ce code :

<?php
//Fichier de connexion à la BDD : cnxBDD.php
$host = 'localhost';
$user = 'root';
$pwd  = '';
$dbname  = 'site1';
$charset = ";charset=UTF8"; //si tu veux avoir de l'utf8
 try{
   $bdd= new PDO("mysql:host=".$host.";dbname=".$dbname.$charset.",".$user.",".$pwd);
   $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}
?>


Pense aussi à récupérer "proprement" les variables (via ISSET ou !EMPTY et l'écriture ternaire) AVANT de les utiliser
Et enfin.. pense à mettre des bloc TRY/CATCH sur tes requêtes pour t'assurer qu'elles se passent bien.

Ce qui donne dans ton code:
<?php
//Affichage des erreurs PHP
error_reporting(E_ALL);

//Demarrage des sessions
session_start();

//connexion à la BDD (on inclus le fichier)
require_once "cnxBDD.php";

//Récupération 'propre' des varialbes
$legende = isset($_POST['legende']) ? $_POST['legende'] : '';
$s_msg = !empty($_SESSION['message']) ? $_SESSION['message'] : '';
$files = !empty($_FILES['fichier']) ? $_FILES['fichier'] : NULL;

//traitement du formulaire
if(isset($_POST['envoie'])) {

    $tmpName = $files['tmp_name'];
 $fileName = $files['name'];
 
 if(!move_uploaded_file($tmpName, 'upload/'.$fileName)){
   echo "<br>Move error ! " . $tmpName . "-->".'upload/'.$fileName;
 }else{
   $info = $fileName. " Importé avec avec succès";
    }
 echo '<br /><font color="green">'.$info."</font><br /><a href=\"site4.php\">Retour<a/>";
 
    $sql = "INSERT INTO photo(adresse, text) VALUES(:adresse, :text)";
    $datas = array(':adresse'=>$fileName ,':text'=> $legende);
    try{
      $insertmbr = $bdd->prepare($sql);
      $insertmbr->execute($datas);
    }catch(Exception $e){
      echo "Erreur ! ".$e->getMessage();
    }
  $info = "La photo et le commentaire a était inscrit au serveur ! <a href=\"/sites/site7.php\">Aller voir !<a/>";
 
}else{
 $erreur = "La photo et le commentaire n'ont pas était envoyer !";
}
?>
<html>
 <head>
  <title>TUTO PHP</title>
  <meta charset="utf-8">
 </head>
 <body>
  <br /> <br />
   <div align="center">
    <form action="envoie.php" method="post" enctype="multipart/form-data">
  <table>
   <tr>
    <td>
     <label for="fichier">Votre photo :</label>
     <p>La taille maximum de la photo doit être de 20 MO !</p>
    </td>
    <td>
     <input type="file" name="fichier" id="fichier" /><br />
    </td>
  </tr>
  <tr>
    <td>
     <label for="legende">Commentaire sous la photo :</label><br /><br />
    </td>
    <td>
     <textarea name="legende" id="legende" rows="10" cols="40">Saisir un texte ici.</textarea>
    </td>
  </tr>
  <tr>
    <td>
     <input type="submit" name="envoie" value="Envoyer le fichier" />
    </td>
  </tr>
  </table>
       </form>
   </div>
 </body>
</html>


NB: Tu avais également un souci dans les TR / TD de ton tableau HTML ....
TR => LIGNE du tableau
TD => CELLULE de la ligne
Donc un Tableau contient des TR ... les TR contiennent des TD .... (c'est comme ça...)



Cordialement, 
Jordane                                                                 
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
23 juin 2016 à 10:26
Bonjour, merci encore pour votre aide.
Et merci pour la petite précision du TD et TR, moi qui avais un problème de CSS sa devrait m'aider.

Donc après avoir essayer votre code j'ai un code erreur.

Erreur : SQLSTATE[HY000] [2019] Unknown character set

On dirait que ça vient du
$charset = ";charset=UTF8";
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
23 juin 2016 à 10:29
Je dirait même plus avec cette méthode je peu pas accéder a la base de donnée.
Erreur : SQLSTATE[HY000] [1045] Acc�s refus� pour l'utilisateur: ''@'@localhost' (mot de passe: NON)
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
23 juin 2016 à 10:33
J'ai corriger le problème je sais pas si sais bien ce que j'ai fait.

Voila mon code de "cnxBDD.php"


<?php
try{
$bdd = new PDO('mysql:host=localhost;dbname=site1;charset=utf8', 'root', '');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch(PDOException $e) {
die('Erreur : ' . $e->getMessage());
}
?>
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705 > flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021
Modifié par jordane45 le 23/06/2016 à 10:45
Si si c'est bon normalement.
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
23 juin 2016 à 13:00
Oui super merci a vous Jordane :)
Bon j'ai encore pas mal de chose a faire mais a force de chercher je vais trouvé :)
0