Problème avec POST

Fermé
Adeline - 18 mars 2013 à 13:22
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 20 mars 2013 à 14:16
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
***************************************



A voir également:

13 réponses

désolé dans le 1er code
<form method = POST action = insert.php > est en trop
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
18 mars 2013 à 14:00
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
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
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 18/03/2013 à 14:59
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bionik Messages postés 4234 Date d'inscription jeudi 19 août 2010 Statut Modérateur Dernière intervention 3 août 2016 183
18 mars 2013 à 15:58
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
C'est quoi la partie formulaire? :/
Ok je vais essayé avec empty et modifier mon insert
0
Bionik Messages postés 4234 Date d'inscription jeudi 19 août 2010 Statut Modérateur Dernière intervention 3 août 2016 183
18 mars 2013 à 18:58
C'est juste la partie où tu récupères les variables de ton formulaire!
0
C'est toute la partie où j'ai
$Album = $_POST['album'];
$Genre = $_POST['genre']; ......?
0
Bionik Messages postés 4234 Date d'inscription jeudi 19 août 2010 Statut Modérateur Dernière intervention 3 août 2016 183
Modifié par Bionik le 18/03/2013 à 19:13
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
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
Bionik Messages postés 4234 Date d'inscription jeudi 19 août 2010 Statut Modérateur Dernière intervention 3 août 2016 183
18 mars 2013 à 19:48
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
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
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
18 mars 2013 à 20:51
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
Bionik Messages postés 4234 Date d'inscription jeudi 19 août 2010 Statut Modérateur Dernière intervention 3 août 2016 183
18 mars 2013 à 23:50
Désolé, je t'avais loupé! Bah ça devrait marcher sur tous les "récents" navigateurs, quoique IE est toujours à la traîne.......
0
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
Bionik Messages postés 4234 Date d'inscription jeudi 19 août 2010 Statut Modérateur Dernière intervention 3 août 2016 183
18 mars 2013 à 21:10
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
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
Bionik Messages postés 4234 Date d'inscription jeudi 19 août 2010 Statut Modérateur Dernière intervention 3 août 2016 183
18 mars 2013 à 23:16
Pas de quoi, c'est quoi vos champs dans votre base de données?
0
Id / Album / Artist / Genre / Year / nb_pistes / Titles / Image / Link / Comment
0
Bionik Messages postés 4234 Date d'inscription jeudi 19 août 2010 Statut Modérateur Dernière intervention 3 août 2016 183
18 mars 2013 à 23:46
Ok, donc tu modifies la requête en mettant les champs appropriés :)
0
ça c'est dans mes cordes :p
Merci beaucoup
0
Bionik Messages postés 4234 Date d'inscription jeudi 19 août 2010 Statut Modérateur Dernière intervention 3 août 2016 183
19 mars 2013 à 00:01
Ok, Bonne soirée :)
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
20 mars 2013 à 09:22
bonjour Bionik, j'ai testé required ne fonctionne pas avec IE 8

ok avec firefox 19.0.2 et chrome 25.0....
0
Bionik Messages postés 4234 Date d'inscription jeudi 19 août 2010 Statut Modérateur Dernière intervention 3 août 2016 183
20 mars 2013 à 10:55
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
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
20 mars 2013 à 14:16
Ha ok, merci pour le tuyau.
0