Problème avec POST [Fermé]

Signaler
-
Messages postés
5374
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
-
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

désolé dans le 1er code
<form method = POST action = insert.php > est en trop
Messages postés
5374
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
870
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;
} 
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?
Messages postés
5374
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
870
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 
Messages postés
4521
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
155
Salut,

Je te conseille plutôt d'utiliser if(!empty($_POST['nom_du_champ'])) { ...... }
car la variable $_POST est défini par défaut. :)
C'est quoi la partie formulaire? :/
Ok je vais essayé avec empty et modifier mon insert
Messages postés
4521
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
155
C'est juste la partie où tu récupères les variables de ton formulaire!
C'est toute la partie où j'ai
$Album = $_POST['album'];
$Genre = $_POST['genre']; ......?
Messages postés
4521
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
155
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.
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>";

?>
Messages postés
4521
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
155
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!
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?
Messages postés
5374
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
870
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 ?
Messages postés
4521
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
155
Désolé, je t'avais loupé! Bah ça devrait marcher sur tous les "récents" navigateurs, quoique IE est toujours à la traîne.......
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 :)
Messages postés
4521
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
155
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.
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!
Messages postés
4521
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
155
Pas de quoi, c'est quoi vos champs dans votre base de données?
Id / Album / Artist / Genre / Year / nb_pistes / Titles / Image / Link / Comment
Messages postés
4521
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
155
Ok, donc tu modifies la requête en mettant les champs appropriés :)
ça c'est dans mes cordes :p
Merci beaucoup
Messages postés
4521
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
155
Ok, Bonne soirée :)
Messages postés
5374
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
870
bonjour Bionik, j'ai testé required ne fonctionne pas avec IE 8

ok avec firefox 19.0.2 et chrome 25.0....
Messages postés
4521
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
155
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
Messages postés
5374
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
870
Ha ok, merci pour le tuyau.