Problème php/mysql transmission de données

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème php/mysql transmission de données

Re: Problème php/mysql transmission de données

par Valmont » 11 oct. 2010, 16:30

Merci, merci Sadeq !

C'était effectivement ça et maintenant ça marche ! Merci aussi pour la précision pourquoi cette erreur n'était pas détectée, ça en devenait rageant ;-) Tout ça pour une bêtise de parenthèse, j'aurais dû m'en apercevoir.
Bref, merci encore à tous ceux qui m'ont donné des indications et à phpfrance!

Re: Problème php/mysql transmission de données

par sadeq » 10 oct. 2010, 18:42

Bonjour,
Avant d'aller loin, Tu as une erreur dans ta requête SQL au niveau du mot Now() il y a une parenthèse fermante qui suit le Now() et qui est mal placée car elle devrait être à la fin du contenu de la clause VALUES. ici:
//------------------------------------------------------------------------------------------------- ici l'erreur
$req = $bdd->prepare('INSERT INTO message(date_creation, titre, auteur, genre1, genre2, contenu) VALUES(NOW()), :titre, :auteur, :genre1, :genre2, :contenu');
Du coup la syntaxe de la requête SQL INSERT est incorrecte. La correction est:
$req = $bdd->prepare('INSERT INTO message(date_creation, titre, auteur, genre1, genre2, contenu) VALUES(NOW(), :titre, :auteur, :genre1, :genre2, :contenu)');
Ainsi la forme normale de INSERT est respectée, soit: INSERT table(champs ...) VALUES (valeurs ...)

A rappeler que cette erreur n'est pas détectée par PHP car c'est une erreur de syntaxe niveau SQL.

Re: Problème php/mysql transmission de données

par stealth35 » 10 oct. 2010, 16:46

normale faut faire un fetch, et même au delà du fetch faut récupérer la valeur derrière, il te manque plein d'étape

Re: Problème php/mysql transmission de données

par Valmont » 09 oct. 2010, 15:21

Merci à tous pour vos réponses.

Alors : J'ai mis le header en commentaire : Aucune erreur affichée.
Je fais un var_dump() il m'affiche tout correctement, dans le bon ordre et tout.

Par contre Julien_37, je ne comprends pas très bien comment faire un echo de ma requête. J'ai essayé de le mettre après la prépatation et après l'execution comme ça :
$req = $bdd->prepare('INSERT INTO message(date_creation, titre, auteur, genre1, genre2, contenu) VALUES(NOW()), :titre, :auteur, :genre1, :genre2, :contenu');
							[b]echo $req;[/b]
							$req->execute(array(
								'titre' => $titre,
								'auteur' => $auteur,
								'genre1' => $genre1,
								'genre2' => $genre2,
								'contenu' => $contenu
								));
et comme ça :
$req = $bdd->prepare('INSERT INTO message(date_creation, titre, auteur, genre1, genre2, contenu) VALUES(NOW()), :titre, :auteur, :genre1, :genre2, :contenu');
							
							$req->execute(array(
								'titre' => $titre,
								'auteur' => $auteur,
								'genre1' => $genre1,
								'genre2' => $genre2,
								'contenu' => $contenu
								));
                                                               [b]echo $req;[/b]
Dans les deux cas ça m'affiche l'erreur suivante :
Catchable fatal error: Object of class PDOStatement could not be converted to string in /Users/Alban/Sites/MyWeb/LivreSms/traitement_sms.php on line 25

(ça change juste le numéro de la ligne). Et j'ai l'impression que c'est plutôt parce que je ne peux pas simplement faire un echo de $req comme ça...

J'ai encore essayé de faire un echo lorsque j'execute :
 [b]echo[/b] $req->execute(array(
								'titre' => $titre,
								'auteur' => $auteur,
								'genre1' => $genre1,
								'genre2' => $genre2,
								'contenu' => $contenu
								));
Et là ça ne m'affiche aucune erreur, mais je ne vois aucun résultat de l'echo. Probablement que je fais faux je ne sais pas. Quelqu'un peut-il m'en dire plus ?

Merci encore !

Re: Problème php/mysql transmission de données

par Valmont » 09 oct. 2010, 15:18

Merci à tous pour vos réponses.

Alors : J'ai mis le header en commentaire : Aucune erreur affichée.
Je fais un var_dump() il m'affiche tout correctement, dans le bon ordre et tout.

Par contre Julien_37, je ne comprends pas très bien comment faire un echo de ma requête. J'ai essayé de le mettre après la prépatation et après l'execution comme ça :
$req = $bdd->prepare('INSERT INTO sms(date_creation, titre, auteur, genre1, genre2, contenu) VALUES(NOW()), :titre, :auteur, :genre1, :genre2, :contenu');
							[b]echo $req;[/b]
							$req->execute(array(
								'titre' => $titre,
								'auteur' => $auteur,
								'genre1' => $genre1,
								'genre2' => $genre2,
								'contenu' => $contenu
								));
et comme ça :
$req = $bdd->prepare('INSERT INTO sms(date_creation, titre, auteur, genre1, genre2, contenu) VALUES(NOW()), :titre, :auteur, :genre1, :genre2, :contenu');
							
							$req->execute(array(
								'titre' => $titre,
								'auteur' => $auteur,
								'genre1' => $genre1,
								'genre2' => $genre2,
								'contenu' => $contenu
								));
                                                               [b]echo $req;[/b]
Dans les deux cas ça m'affiche l'erreur suivante :
Catchable fatal error: Object of class PDOStatement could not be converted to string in /Users/Alban/Sites/MyWeb/LivreSms/traitement_sms.php on line 25

(ça change juste le numéro de la ligne). Et j'ai l'impression que c'est plutôt parce que je ne peux pas simplement faire un echo de $req comme ça...

J'ai encore essayé de faire un echo lorsque j'execute :
 [b]echo[/b] $req->execute(array(
								'titre' => $titre,
								'auteur' => $auteur,
								'genre1' => $genre1,
								'genre2' => $genre2,
								'contenu' => $contenu
								));
Et là ça ne m'affiche aucune erreur, mais je ne vois aucun résultat de l'echo. Probablement que je fais faux je ne sais pas. Quelqu'un peut-il m'en dire plus ?

Merci encore !

Re: Problème php/mysql transmission de données

par Julien_37 » 09 oct. 2010, 10:13

Fais un echo de ta requête, et regarde ce qui s'il passe, je pense que le problème vient de là...

Re: Problème php/mysql transmission de données

par Ryle » 08 oct. 2010, 20:57

Le header() en haut n'est pas gênant car php va quand même exécuter le code qui suit avant de transmettre l'information de redirection au navigateur... mais c'est pas vraiment intuitif et personnellement je préfère le mettre après mon traitement :)

L'inconvénient du header, c'est que si le buffer php est activé (et je crois qu'il l'est par défaut sur les dernières versions de php), erreur ou pas, php fait la redirection. Du coup si message d'erreur il y a, tu te retrouves sur la page suivante sans savoir ce qui n'a pas fonctionné (genre un problème de connexion à la bdd)... donc pour debuger il vaut mieux le mettre temporairement en commentaire.

Concernant ton problème, je ne vois pas d'erreur flagrante, donc faudra procéder par étape. La première, faire un var_dump() de $_POST pour vérifier que tu récupères bien les valeurs du formulaire. Vérifie également qu'il n'y a pas d'erreur de connexion à la base ni dans ta requête (nom de la table ou des champs, ...)

Re: Problème php/mysql transmission de données

par Valmont » 08 oct. 2010, 16:42

Merci Staan,

Je sais c'est pas top le header en haut de la page, mais j'avais fait un mini chat (exercice du tutoriel sur le site du zéro si tu connais), et ça marche bien. J'ai même essayé en l'enlevant cette fois mais ça ne change rien. Par contre oui, je travail en local, mais je n'ai pas bien compris ta remarques sur le mot de passe... En l'occurrence il y en a un, mais j'ai fait exprès de l'enlever (peut-être qu'il n'y à aucune raison, mais j'essaie de toujours prendre un minimum de précaution).

Donc non ce n'est pas le header, mais merci quand même ! et merci pour le tip pour l'édition du message, je l'avais pourtant cherché ce bouton, mais pas trouvé !

Re: Problème php/mysql transmission de données

par staan » 08 oct. 2010, 01:32

Bonsoir

Bon, j'ai regardé ton code vite fait, et une chose me parait étrange.


Pourquoi utilise tu
<?php header('Location: add_message.php');
dans ton fichier de traitement (traitement_message.php) ?

Logiquement un header location sert à rediriger, hors si tu rediriges vers la page add_message.php avant d'avoir posté les infos, c'est normal que ca ne rentre rien dans la bdd .



Après, petite remarque hors sujet, mais tu test ca en local ?

Parce que laisser un dédié avec un root sans mot de passe ...

Bonne soirée, en espérant t'avoir aidé!


PS: pas besoin de poster deux fois le même message si tu as oublié les balises code ou php sur le forum, utilise le bouton EDIT en haut à droite ;)

Problème php/mysql transmission de données

par Valmont » 08 oct. 2010, 00:07

Bonjour,

Je débute en programmation php et mysql et voilà qu'en voulant réaliser un formulaire pour soumettre un message, tout semble aller pour le mieux dans le meilleur des monde (pas de message d'erreur ni rien), sauf que la donnée n'est visiblement pas transmise, puisque je ne la retrouve pas dans ma base de donneé (j'utilise MAMP). Si quelqu'un pouvait m'aider, ce serait vraiment formidable !

Voici le code de la page du formulaire (add_message.php):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Inscrire un message</title>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       <link rel="stylesheet" media="screen" type="text/css" title="Design" href="accueil_design.css" />
   </head>
   		<body>
   		
			<div id="en-tete">
				<h1>
					<a href="accueil.php" > Bannière ! </a>
				</h1>
			</div>
			
			<div id="corps">
			
				<?php include("menu.php") ;?>
							
				
				<div class="contenu">
					<h3> Inscrivez votre message ! </h3>
					<form action="traitement_message.php" method="post" >
						<p>
							<label for="genre1">Préciser le genre 1: </label>
							<select name="genre1" id="genre1">
								<option value="rigolo"> Rigolo </option>
								<option value="triste"> Triste </option>
								<option value="break-up"> Break-Up </option>
								<option value="excuse"> Excuse </option>
							</select>
							<br/>
							
							<label for="genre2">Préciser le genre 2: </label>
							<select name="genre2" id="genre2">
								<option value="rigolo"> Rigolo </option>
								<option value="triste"> Triste </option>
								<option value="break-up"> Break-Up </option>
								<option value="excuse"> Excuse </option>
							</select>
							<br/><br/>
							
							Nom de l'auteur :<input type="text" name="auteur" id="auteur"/>
							<br/>
							Titre du Sms : <input type="text" name="titre" id="titre"/>
							<br/><br/>
							
							<label for="soumettre_message"> </label>
							<textarea name="contenu" id="contenu" rows=10 columns = 50> Votre sms...</textarea>
							<br/><br/>
							<input type="submit" value="valider"/>

						</p>
					</form>
				</div>
			
			</div>
			
			<div id="pied-de-page">
			
			</div>
   		
   		
   		
   	</body>
   	
</head>

---------------------------------Et le code de la page de traitement (traitement_message.php):
<?php 	header('Location: add_message.php');
				
						try
					{
						$bdd = new PDO('mysql:host=localhost;dbname=message_bdd', 'root', ' ');
					}
					catch(Exception $e)
					{
							die('Erreur : '.$e->getMessage());
					}
					
					
							$titre = $_POST['titre'];
							$auteur = $_POST['auteur'];
							$genre1 = $_POST['genre1'];
							$genre2 = $_POST['genre2'];
							$contenu = $_POST['contenu'];
							//$time = getdate();
							$req = $bdd->prepare('INSERT INTO message(date_creation, titre, auteur, genre1, genre2, contenu) VALUES(NOW()), :titre, :auteur, :genre1, :genre2, :contenu');
							$req->execute(array(
								'titre' => $titre,
								'auteur' => $auteur,
								'genre1' => $genre1,
								'genre2' => $genre2,
								'contenu' => $contenu
								));
													
?>





------------------------------------------------

Voilà, j'ai aussi essayer sans le header, la page s'affiche (blanche), mais pas d'erreur, et toujours rien d'ajouté dans la base de donnée.

Si quelqu'un pouvait m'aider ce serait vraiment super, merci beaucoup!