éclaircissement sur le POST

Looki
Invité n'ayant pas de compte PHPfrance

29 mai 2006, 17:04

Bonjour,
voila pour tester si un formulaire pouvait transmettre des données à une fonction sur la même page j'ai fait ce code. Il se trouve que cette solution marche au bout d'un nombre aléatoire d'essais et continue de marcher de facon stable ensuite, mais lorsque le serveur est redémarré, ce code ne marche plus...

Je voulais savoir si mettre la fonction directement dans "action" est théoriquement impossible et n'est pas censé marcher ou celà est tout à fait possible et il s'agit alors d'un bug (de ma version php ??) ?

Je précise que je suis sous PHP 4.x et pas sous PHP 5...

Est ce que cela marche alors sous PHP5 ? ou la seule solution est la facon classique, c'est à dire d'appeler la page php dans le "action".

Voici mon code :

Code : Tout sélectionner

<html> <head><title>philatelie</title></head> <body> <form method="POST" action="<?php connexion() ?>"> <input type="text" name="login">Login</input><br /> <input type="password" name="password">Password</input> <input type="submit" name="envoi">Envoyer</input> </form> <?php function connexion() { $login = $_POST['login']; $pass = $_POST['password']; $db = mysql_connect('localhost', 'root', ''); mysql_select_db('philatelie',$db); $req = mysql_query("INSERT INTO user(id_user,login_user,password_user) Values('','$login','$pass')") or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); mysql_close($db); } ?> </body> </html>
Merci de votre éclaircissement.

Mammouth du PHP | 1353 Messages

29 mai 2006, 17:18

Je n'ai pas de réponse précise à ta question mais si j ai bien compris ton probleme je te conseille plutot la méthode suivante :

Dans la mesure ou tu ne pourras pas avoir le contenu dynamiquement en php je te conseille de faire un formulaire qui appelle la page sur laquelle il est, à savoir action=<?php echo $_SERVER["PHP_SELF"];?>

Ensuite lorsque tu arrives sur la page tu fais un test AVANT ton formulaire :
if(isset($_POST["login"]) && isset($_POST["password"]))
{
//alors tu fais tes insertions puis une redirection par exemple
}
et ainsi de suite....

j espere que cela t aidera.

Looki
Invité n'ayant pas de compte PHPfrance

29 mai 2006, 21:34

Ouais, c'est ce que je pensais faire, masi j'ai trouvé ca curieux que ca marche je voulais savoir si ca ressemblait plus à un bug que autre chose c'est tout :p

surtout que ca évite de rafraichir la page, mais bon apparement c'est de la chance alors, on est pas censé pouvoir utiliser ces données dynamiquement ? :P

Eléphant du PHP | 197 Messages

29 mai 2006, 21:45

pour ton formulaire tu met <form method="post"> met pas action... si tu met rien ça redirige vers ta propre page :D

Mammouth du PHP | 1353 Messages

30 mai 2006, 09:10

on est pas censé pouvoir utiliser ces données dynamiquement ? :P
A ma connaissance non on ne peut pas faire cela dynamiquement en PHP, après en javascript par exemple c'estr déjà beaucoup plus simple de gérer un contenu dynamique sans rafraichir la page.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

30 mai 2006, 10:29

Php n'est executé que côté serveur, tu ne peux donc pas mettre une fonction qui sera exécuté "plus tard" par ta page :) (y a qu'à regarder le source de ta page pour voir que la fonction n'apparait pas)

Ce qui se passe, c'est que comme ton code php n'affiche pas de code html (echo etc.) ton attribut action est vide. Le formulaire est par conséquent envoyé par défaut à la page en cours qui exécute le php sur le serveur avant de te réafficher la page (cela reviendrait donc au même si tu plaçais ton code php au début de ta page).

Pour éviter le rechargement, tu peux effectivement utiliser javascript (ajax) pour appeller une page php sur le serveur (php étant toujours exécuté par le serveur) et en récupérer les résultat dans ta page en cours sans recharger celle ci :)

Petit nouveau ! | 1 Messages

30 mai 2006, 11:04

Merci des ces réponses, voila qui me semble largement plus clair. :wink: