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
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
A voir également:
- Problème avec POST
- Post it windows - Télécharger - Agendas & Calendriers
- Brouillon post instagram - Guide
- Comment faire un post instagram avec plusieurs photos - Guide
- Code post - Télécharger - Vie quotidienne
- Biling post code ✓ - Forum Réseaux sociaux
13 réponses
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
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; }
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?
<?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?
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
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é
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
18 mars 2013 à 15:58
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. :)
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
Ok je vais essayé avec empty et modifier mon insert
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
18 mars 2013 à 18:58
18 mars 2013 à 18:58
C'est juste la partie où tu récupères les variables de ton formulaire!
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
Modifié par Bionik le 18/03/2013 à 19:13
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.
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>";
?>
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>";
?>
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
18 mars 2013 à 19:48
18 mars 2013 à 19:48
Comme t'as pu le constater, ce code est très verbeux. Je te conseille ceci:
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!
<!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?
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?
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
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 ?
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 ?
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
18 mars 2013 à 23:50
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.......
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 :)
Oui c'est bon le require marche pour moi, et tout fonctionne correctement!
Merci beaucoup à vous 2 pour votre aide et vos conseils :)
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
18 mars 2013 à 21:10
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:
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.
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!
Je ne code pas de la même manière donc je vais plancher dessus pour tout comprendre :)
merci!
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
18 mars 2013 à 23:16
18 mars 2013 à 23:16
Pas de quoi, c'est quoi vos champs dans votre base de données?
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
18 mars 2013 à 23:46
18 mars 2013 à 23:46
Ok, donc tu modifies la requête en mettant les champs appropriés :)
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
19 mars 2013 à 00:01
19 mars 2013 à 00:01
Ok, Bonne soirée :)
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
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....
ok avec firefox 19.0.2 et chrome 25.0....
Bionik
Messages postés
4232
Date d'inscription
jeudi 19 août 2010
Statut
Modérateur
Dernière intervention
3 août 2016
184
20 mars 2013 à 10:55
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
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
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
20 mars 2013 à 14:16
Ha ok, merci pour le tuyau.