Problème avec POST

Bonjour à tous,
J'ai un petit soucis avec ma commande POST:
***************************************
<?php
require('files/connect.php');

<!DOCTYPE html>
<html>

<head>
<meta charset=utf-8 />
<title>Add an album</title>
</head>

<form method = "POST" action = "insert.php" >
<form method = POST action = insert.php >
<strong>Album title</strong><input type=text name=album/></br>
<strong>Artist</strong><input type=text name=artist/></br>
<strong>Year</strong><input type=text name=year/></br>
<strong>Genre</strong><input type=text name=genre/></br>
<strong>Titles</strong><input type=text area name=titles/></br>
<strong>Image</strong><input type=file name=image/></br>
<strong>Link</strong><input type=text name=link/></br>
<strong>Comment</strong><input type=text area name=comment/></br>
<input type=submit value=Submit />
</form>
</font>

</body>

</html>
?>

**********
cette version ne marche pas ==> il me renvoie " Parse error: syntax error, unexpected '<' in C:\Program Files (x86)\..."
j'ai retourné le provblème dans tous les sens et j'ai même copié la syntaxe exacte de mon cours mais rien n'y fait...
J'ai également essayé de le mettre comme ceci:

********************

<?php
require('files/connect.php');

echo "<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Add an album</title>
</head>

<body background=268cab7b.jpg>";

echo "<font color=white>

<form method = POST action = insert.php >
<strong>Album title</strong><input type=text name=album/></br>
<strong>Artist</strong><input type=text name=artist/></br>
<strong>Year</strong><input type=text name=year/></br>
<strong>Genre</strong><input type=text name=genre/></br>
<strong>Titles</strong><input type=text area name=titles/></br>
<strong>Image</strong><input type=file name=image/></br>
<strong>Link</strong><input type=text name=link/></br>
<strong>Comment</strong><input type=text area name=comment/></br>

<input type=submit value=Submit />
</form>
</font>
</body>
</html>";
?>

Avec cette formulation, je n'ai pas de message d'erreur mais toutes mes valeurs dans les commandes
************************************
if (!empty ($_POST['album']))
{
$Album = $_POST['album'];
}
else
{
echo "Please enter a title<br/>";
$Album = NULL;
}
*************************************
me retourne empty

Donc je ne sais plus où chercher
Merci d'avance pour votre aide
***************************************

13 réponses

  1. désolé dans le 1er code
    <form method = POST action = insert.php > est en trop
    0
    1. voir commentaires:
      <?php
      require('files/connect.php');
      //il te manquait le tag de fermeture de php ici, puisque ensuite c'est du coide HTML
      ?>
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="utf-8" />
      <title>Add an album</title>
      </head>
      <!-- pourquoi deux fois <form ??, de plus dans la deuxième balise il te manque une " dans action= -->
      <form method = "POST" action = "insert.php" >
      <!--
      <form method = POST action = insert.php >
      -->
      <strong>Album title</strong><input type=text name=album/></br>
      <strong>Artist</strong><input type=text name=artist/></br>
      <strong>Year</strong><input type=text name=year/></br>
      <strong>Genre</strong><input type=text name=genre/></br>
      <strong>Titles</strong><input type=text area name=titles/></br>
      <strong>Image</strong><input type=file name=image/></br>
      <strong>Link</strong><input type=text name=link/></br>
      <strong>Comment</strong><input type=text area name=comment/></br>
      <input type=submit value=Submit />
      </form>
      </font>
      
      </body>
      
      </html>
      <!--
      
      le tag de fermeture de php ne doit pas être ici !!
      
      ?>
      --->
      
      
      **********
      cette version ne marche pas ==> il me renvoie " Parse error: syntax error, unexpected '<' in C:\Program Files (x86)\..."
      j'ai retourné le provblème dans tous les sens et j'ai même copié la syntaxe exacte de mon cours mais rien n'y fait...
      J'ai également essayé de le mettre comme ceci:
      
      ********************
      
      <?php
      require('files/connect.php');
      //avec cette version pourquoi passer par des echo php pour ecrire ton code html ??
      //et n'oublies pas les "  " dans TOUS les arguments de toutes les balises
      //ex: method="post" action="insert.php" etc..
      ?>
      
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="utf-8" />
      <title>Add an album</title>
      </head>
      
      <body background="268cab7b.jpg">
      	<font color="white">
      		<form method = "POST" action = "insert.php" >
      			<strong>Album title</strong><input type="text" name="album" /></br>
      			<strong>Artist</strong><input type="text" name="artist" /></br>
      			<strong>Year</strong><input type="text" name="year" /></br>
      			<strong>Genre</strong><input type="text" name="genre" /></br>
      			<!-- un texarea c'est pas comme ça 
      			<strong>Titles</strong><input type="text" area name="titles" /></br>
      			-->
      			<strong>Titles</strong><textarea name="titles" col="25" rows="5"></textarea>
      			<strong>Image</strong><input type="file" name="image" /></br>
      			<strong>Link</strong><input type="text" name="link" /></br>
      			<!--
      			<strong>Comment</strong><input type="text area name=comment/></br>
      			-->
      			<strong>Comment</strong><textarea name="comment" col="25" rows="5"></textarea><br /><br />
      
      
      			<input type="submit" name="envoyer" value="Envoyer" />
      		</form>
      	</font>
      </body>
      </html>";
      
      
      
      Avec cette formulation, je n'ai pas de message d'erreur mais toutes mes valeurs dans les commandes
      ************************************
      if (!empty ($_POST['album']))
      {
      $Album = $_POST['album'];
      }
      else
      {
      echo "Please enter a title<br/>";
      $Album = NULL;
      } 
      0
      1. Merci beaucoup pour toutes ces corrections, j'ai commencé ce langage tout récemment et j'ai encore un peu de mal à faire la différence entre php et html. Je n'ai effectivement plus de message d'erreur mais mon fichier qui récupère toutes ces valeurs me renvoie tout de même empty à chaque fois:
        <?php
        require('files/connect.php');

        if (isset($_POST['album']))
        {
        $Album = $_POST['album'];
        }
        else
        {
        echo "Please enter a title<br/>";
        $Album = NULL;
        }
        if (isset($_POST['artist'])){
        $Artiste = $_POST['artist'];
        }else{
        echo "Please enter an artist<br/>";
        $Artiste = NULL;
        }
        if (isset($_POST['year'])){
        $Year = $_POST['year'];
        }else{
        echo "Please enter a year<br/>";
        $Year = NULL;
        }
        if (isset($_POST['genre'])){
        $Genre = $_POST['genre'];
        }else{
        echo "Please enter a genre<br/>";
        $Gender = NULL;
        }

        [...](pour toutes mes catégories)

        if($Album && $Artiste && $Year && $Genre && $Titles && $Image && $Link && $Comment){
        $query = "INSERT INTO 'album' VALUES ('ID','Album','Artiste','Year','Genre','Nb_pistes','Image','Link','Comment')
        (NULL,'$Album','$Artiste','$Year','$Genre','$Titles','$Image','$Link','$Comment',NOW())";
        $result = mysqli_query($connection,$query);
        if($result){
        echo "Album inserted";
        }else{
        echo "Album not inserted";
        }

        }
        echo "<br/><a href = 'index.php'>Go back to the home page</a>";

        ?>
        ***********************************
        Ai-je à nouveau confondu les langages quelque part?
        0
        1. il nous faudrait aussi la partie formulaire

          de plus dans ta req d'insertion:
          $query = "INSERT INTO 'album' VALUES ('ID','Album','Artiste','Year','Genre','Nb_pistes','Image','Link','Comment')
          (NULL,'$Album','$Artiste','$Year','$Genre','$Titles','$Image','$Link','$Comment',NOW())";


          le champ ID doit être en autoincrement donc ne pas mettre NULL comme valeur mais rien ''
          et tu as now() comme valeur et le champ tu ne l'as pas précisé
          $query = "INSERT INTO 'album' VALUES ('ID','Album','Artiste','Year','Genre','Nb_pistes','Image','Link','Comment','date') 
          ('','$Album','$Artiste','$Year','$Genre','$Titles','$Image','$Link','$Comment',NOW())";  
          j'ai mis date mais tu peux changer bien sur 
          
          0
          1. Modérateur
            Salut,

            Je te conseille plutôt d'utiliser if(!empty($_POST['nom_du_champ'])) { ...... }
            car la variable $_POST est défini par défaut. :)
            0
            1. C'est quoi la partie formulaire? :/
              Ok je vais essayé avec empty et modifier mon insert
              0
              1. Modérateur
                C'est juste la partie où tu récupères les variables de ton formulaire!
                0
              2. C'est toute la partie où j'ai
                $Album = $_POST['album'];
                $Genre = $_POST['genre']; ......?
                0
              3. Modérateur
                C'est cette partie :
                if (!empty($_POST['album']))
                {
                $Album = $_POST['album'];
                } ......

                Tu peux aussi te faciliter la tache en utilisant l'attribut required dans tes input, comme ça t'es sûre que tant que l'utilisateur n'aura pas mis une valeur dans le champ, le formulaire ne sera pas soumis.
                0
              4. J'avoue je n'y avait pas penser
                Donc dans mon formulaire j'ai :
                <?php
                require('files/connect.php');
                ?><body background=268cab7b.jpg><font color=white><?php

                if (!empty($_POST['album']))
                {
                $Album = $_POST['album'];
                }
                else
                {
                echo "Please enter a title<br/>";
                $Album = NULL;
                }
                if (!empty($_POST['artist'])){
                $Artiste = $_POST['artist'];
                }else{
                echo "Please enter an artist<br/>";
                $Artiste = NULL;
                }
                if (!empty($_POST['year'])){
                $Year = $_POST['year'];
                }else{
                echo "Please enter a year<br/>";
                $Year = NULL;
                }
                if (!empty($_POST['genre'])){
                $Genre = $_POST['genre'];
                }else{
                echo "Please enter a genre<br/>";
                $Gender = NULL;
                }
                if (!empty($_POST['titles'])){
                $Titles = $_POST['titles'];
                }else{
                echo "Please enter the album's titles<br />";
                $Titles = NULL;
                }
                if (!empty($_POST['image'])){
                $Image = $_POST['image'];
                }else{
                echo "Please insert an image<br />";
                $Image = NULL;
                }
                //je ne suis pas sur que pour une image ça marche comme ça

                if (!empty($_POST['link'])){
                $Link = $_POST['link'];
                }else{
                echo "Please enter a link<br />";
                $Link = NULL;
                }
                if (!empty($_POST['comment'])){
                $Comment = $_POST['comment'];
                }else{
                echo "Please enter a comment about this album<br />";
                $Comment = NULL;
                }

                if($Album && $Artiste && $Year && $Genre && $Titles && $Image && $Link && $Comment){
                $query = "INSERT INTO 'album' VALUES ('ID','Album','Artiste','Year','Genre','Nb_pistes','Image','Link','Comment')
                ('ID','Album','Artiste','Year','Genre','Nb_pistes','Image','Link','Comment','int');
                $result = mysqli_query($connection,$query);
                if($result){
                echo "Album inserted";
                }else{
                echo "Album not inserted";
                }

                }
                echo "<br/><a href = 'index.php'>Go back to the home page</a>";

                ?>
                0
              5. Modérateur
                Comme t'as pu le constater, ce code est très verbeux. Je te conseille ceci:

                <!DOCTYPE html> 
                <html> 
                  <head> 
                    <meta charset=utf-8 /> 
                    <title>Add an album</title>	
                  </head> 
                  <body>
                      <form method = POST action = insert.php > 
                            <strong>Album title</strong><input type=text name=album required /></br> 
                            <strong>Artist</strong><input type=text name=artist required /></br> 
                            <strong>Year</strong><input type=text name=year required /></br> 
                            <strong>Genre</strong><input type=text name=genre required /></br> 
                            <strong>Titles</strong><input type=text area name=titles required /></br> 
                            <strong>Image</strong><input type=file name=image required /></br> 
                            <strong>Link</strong><input type=text name=link require /></br> 
                            <strong>Comment</strong><input type=text area name=comment required /></br> 
                            <input type=submit value=Submit /> 
                      </form> 
                    </body> 
                </html> 
                


                Comme tu utilises de l'HTML5, tu peux juste ajouter l'attribut required sur tes champs de type input comme j'ai fait. Ca forcera l'utilisateur à entrer une valeur, sinon le formulaire ne sera pas posté. Et quand c'est posté, tu récupères juste les valeurs (sans pour autant vérifier s'il a rempli un champ ou non, car c'est sûr que si le formulaire est posté c'est parce qu'il a déjà rempli tous les champs) en les stockant dans des variables.

                Penses aussi à te protéger des injections SQL en échappant ces variables avec la fonction htmlspecialchars(); Fais jamais confiance à l'utilisateur!
                0
            2. waw effectivement mon code est beaucoup plus léger ^^
              Et du coup
              <?php
              $query = INSERT INTO 'album' VALUES ('ID','Album','Artiste','Year','Genre','Nb_pistes','Image','Link','Comment')
              ('ID','Album','Artiste','Year','Genre','Nb_pistes','Image','Link','Comment','int');
              $result = mysqli_query($connection,$query);
              if($result){
              echo "Album inserted";
              }else{
              echo "Album not inserted";
              }
              ?>
              ça suffit pour insérer les données dans ma database?
              0
              1. adeline les deux pages n'ont pas le mêm rôle

                celle de Bionik c'est la page formulaire pour saisir les données, celle que tu donnes c'est celle pour enregistrer dans la BDD

                Bionik est tu sûr que require HTML5 est compatible pour tous les navigateurs ?
                0
                1. Modérateur
                  Désolé, je t'avais loupé! Bah ça devrait marcher sur tous les "récents" navigateurs, quoique IE est toujours à la traîne.......
                  0
              2. ok, je ne suis pas encore aasez au point pour arriver à les distinguer correctement ^^
                Oui c'est bon le require marche pour moi, et tout fonctionne correctement!
                Merci beaucoup à vous 2 pour votre aide et vos conseils :)
                0
                1. Modérateur
                  Non ça ne suffit pas, bon, on va écrire ce script :)

                  Dans le fichier traitement.php (C'est juste un nom que j'ai donné comme ça), on va d'abord récupérer toutes les valeurs que l'utilisateur a entré dans le formulaire:

                  
                  
                  if(!empty($_POST)) {
                  
                  $artist = htmlspecialchars($_POST['artist']);
                  $year = htmlspecialchars($_POST['year']);
                  $genre = htmlspecialchars($_POST['genre']);
                  $titles = htmlspecialchars($_POST['titles']);
                  $image = htmlspecialchars($_POST['image']);
                  $link = htmlspecialchars($_POST['link']);
                  
                  
                  // Tu établies une connexion avec la base de données, j'utilise ici l'API PDO qui est //beaucoup plus flexible et sûr, veille à changer les valeurs conformement à celles que //t'utilise pour te connecter
                  
                  try {
                    $db = new PDO('mysql:host=ton_hote;dbname=ta_base', 'ton_identifiant', 'ton_mot_de_passe') ;
                  } catch(PDOExeption $e) {
                  die('Erreur lors de la connexion a la base de donnees' .$e->getMessage());
                  }
                  
                  //On prépare la requête pour plus de sécurité 
                  $query = $db->prepare('INSERT INTO album (artist, year, genre, titles, image, link) VALUES (:artist, :year, :genre, :titles, :image, :link) or die (print_r($db->errorInfo()));
                  
                  //On execute la requête
                  $query->execute(array('artist' => $artist, 'year' => $year, 'genre' => $genre,
                  'titles' => $titles, 'image' => $image, 'link' => $link);
                  
                  // On ferme le curseur
                  $query->closeCursor();
                  }
                  

                  Normalement ça devrait insérer ça dans ta base, puisque tu utilises PDO, t'as pas besoin d'importer le fichier connect.php.

                  Dans la requête, il faut aussi spécifier les champs à insérer, dans cet exemple j'ai supposé que les nom des ces champs étaient celui de tes inputs.
                  0
                  1. ok je vois, j'avais commencer quasiment de la même manière.
                    Je ne code pas de la même manière donc je vais plancher dessus pour tout comprendre :)
                    merci!
                    0
                    1. Modérateur
                      Pas de quoi, c'est quoi vos champs dans votre base de données?
                      0
                    2. Id / Album / Artist / Genre / Year / nb_pistes / Titles / Image / Link / Comment
                      0
                    3. Modérateur
                      Ok, donc tu modifies la requête en mettant les champs appropriés :)
                      0
                    4. ça c'est dans mes cordes :p
                      Merci beaucoup
                      0
                    5. Modérateur
                      Ok, Bonne soirée :)
                      0
                  2. bonjour Bionik, j'ai testé required ne fonctionne pas avec IE 8

                    ok avec firefox 19.0.2 et chrome 25.0....
                    0
                    1. Modérateur
                      Salut Alain,

                      Comme je te l'ai dit, IE est toujours à la traîne. Cependant tu peux utiliser des Shims ou Polyfills pour aider ce navigateur à bien interpréter les balises où attributs de l'HTML5.

                      J'ai écrit un article sur cela, tu peux le consulter pour plus de détails: Polyfills & Shims
                      0