2010-11-21 12 views
0

J'essaie d'obtenir un livre d'or pour travailler en utilisant PHP. J'ai réussi à le faire fonctionner, la chose est que je ne veux pas que le livre d'or soit dans mon index.php. Je veux que ce soit sur une page dynamique, index.php? = Livre d'or par exemple. Le problème est que lorsque je mets le code sur une autre page plutôt que sur index.php, la chose qui se passe quand je remplis les champs et j'appuie sur le bouton soumettre, je suis redirigé vers index.php et rien n'est envoyé à mon base de données. Tout fonctionne correctement tant que le code est dans index.php.PHP: Utiliser POST sur une page dynamique me redirige vers index.php et ne publie pas les valeurs

Ma première question est: Quelle en est la cause? Deuxième question: Comment faire pour que le code fonctionne correctement même si je l'ai dans index.php? = Guestbook?

Merci d'avance!

J'utilise xampp btw.

Voir ci-dessous le code:

<html> 

<head> 
<link rel="stylesheet" href="stylesheet.css" type="text/css"> 
</head> 

<body> 

<h1>Guestbook</h1><hr> 

<?php 

mysql_select_db ("guestbookdatabase") or die ("Couldn't find database!"); 

$queryget = mysql_query ("SELECT * FROM guestbook ORDER BY id ASC") or die("Error witch query."); 

$querygetrownum = mysql_num_rows ($queryget); 

if ($querygetrownum == 0) 
echo "No posts have been made yet. Be the first!"; 

while ($row = mysql_fetch_assoc ($queryget)) 
{ 
$id = $row ['id']; 
$name = $row ['name']; 
$email = $row ['email']; 
$message = $row ['message']; 
$date = $row ['date']; 
$time = $row ['time']; 

    if ($id%2) 
    $guestbookcomment = "guestbookcomment"; 
    else 
    $guestbookcomment = "guestbookcommentdark"; 


    echo " 
    <div class='$guestbookcomment'> 
    <div class='postheader'> 
    <b>Posted by $name ($email) on $date at $time</b> 
    </div> 

     <div class='message'> 
     ".nl2br(strip_tags($message))." 
     </div> 
    </div> 
    ";} 

echo "<hr>"; 

if($_POST['submit']) 
{ 
$name = $_POST['name']; 
$email = $_POST['email']; 
$message = $_POST['message']; 
$date = date("Y-m-d"); 
$time = date("H:i:s"); 

    if ($name&&$email&&$message) 
    { 
    $querypost = mysql_query ("INSERT INTO guestbook VALUES ('','$name','$email','$message','$date','$time')"); 
    echo "Please wait... <meta http-equiv='refresh' content='2'>"; 
    } 
    else 
    echo "Please fill out all fields."; 
} 

echo " 
<form action='index.php' method='POST'> 

Your name: <input type='text' name='name' class='name' maxlength='25' ><br> <br> 

Your email: <input type='text' name='email' class='email' maxlength='35'><br><br> 

<div class='your_message'> 
Your message:<input type='textarea' name='message' class='messagetextarea' maxlength='250'><br><br> 
</div> 

<input type='submit' name='submit' value='Post'> 

</form> 

"; 

?> 

</body> 

</html> 
+0

Utilisez-vous mod_rewrite? Si oui, pouvez-vous poster votre .htaccess? – netcoder

+0

quel fichier est-ce que vous montrez? index.php? – jordanstephens

Répondre

2

1) La propriété action de votre formulaire doit être identique au nom du fichier dans lequel se trouve le code. :) Vous créez un guestbook.php, par exemple, mais l'action est toujours 'index.php' . D'où le problème. Vous envoyez les données POST à ​​index.php mais il n'y a pas de code pour le traiter.

2) La chaîne de requête n'affecte pas le formulaire. Seul le nom de fichier

J'espère avoir bien compris votre problème.

+0

Oh, c'est tellement évident maintenant que vous le signalez! Cela résout en effet le problème. Merci beaucoup! – Axel

+0

Heureux que votre problème a été résolu. Continue à travailler dur! 8D –

1

Avez-vous essayé de mettre à jour le paramètre d'action de votre formulaire:

index.php?=guestbook 

au lieu de simplement index.php?

1

Si le problème réside sur l'extrémité du serveur que la victime de votre problème est .htaccess (mod rewrite);

Sinon, que voulez-vous vraiment dire par cette ligne de code?

echo "Please wait... <meta http-equiv='refresh' content='2'>"; 

< meta> balise de rafraîchissement nécessite lieu de mentionner où la redirection autrement selon vous Actualise la page en cours ..

<meta http-equiv="refresh" content="2;url=http://stackoverflow.com/"> 
0

D'abord, je suppose que le fichier que vous montrez est index.php

Deuxièmement, n'utilisez pas index.php?=guestbook. Les paramètres d'URL fonctionnent dans une structure de clé => valeur. Dans votre cas, vous n'avez défini que la valeur et aucune clé.

Essayez d'utiliser index.php?page=guestbook. De cette façon, dans votre fichier index.php vous pouvez faire quelque chose comme:

, puis mettre
if($_GET['page'] == 'guestbook') { 
    // ... your guestbook php code. 
} 

vos formes action attribut comme ceci: action="index.php?page=guestbook". Troisièmement, je vais supposer que vous avez un code de connexion mysql qui n'est pas montré ici. Sinon, jetez un oeil à mysql_connect().

Quatrièmement, NE JAMAIS utiliser des données non échappées dans une requête SQL. Vous DOIT échapper vos données pour protéger votre base de données d'être détruit. Jetez un oeil à cet article wikipedia qui décrit l'injection SQL plus en détail: http://en.wikipedia.org/wiki/SQL_injection Ensuite, jetez un oeil à mysql_real_escape_string() pour apprendre comment l'empêcher avec PHP et MySQL.

Cinquièmement, n'utilisez pas <meta http-equiv='refresh' content='2'> pour la redirection. Utilisez la fonction de PHP header() pour rediriger les utilisateurs, comme ceci:

header('location: index.php'); 
exit(); // be sure to call exit() after you call header() 

Aussi, si vous le savez, vous pouvez fermer les balises PHP pour les grands blocs HTML plutôt que d'utiliser echo pour imprimer de gros morceaux statiques de HTML:

<?php 
// ... a bunch of PHP 
?> 

<form action="index.php" method="POST"> 

Your name: <input type="text" name="name" class="name" maxlength="25" ><br> <br> 

Your email: <input type="text" name="email" class="email" maxlength="35"><br><br> 

<div class="your_message"> 
Your message:<input type="textarea" name="message" class="messagetextarea" maxlength="250"><br><br> 
</div> 

<input type="submit" name="submit" value="Post"> 

</form> 


<?php 
// ... some more PHP 
?> 
+0

Comme indiqué par Bored Elf le problème était que je n'ai pas changé l'action de forme lorsque j'ai déplacé le code. Je suis encore assez nouveau à ce sujet, donc ces problèmes stupides se produisent malheureusement. Premier: En effet. Deuxième: J'utilise index.php? P = ... et $ GET_. J'ai fait une faute de frappe dans mon post ici. Troisième: Oui, je ne l'ai pas inclus ici. Quatrième: Merci! N'ayant toujours pas appris les tenants et les aboutissants de la sécurité, je vais certainement lire ces articles. Je ne savais pas que vous pouviez le faire, alors je vous remercie pour le pourboire. Merci pour tous les pointeurs! – Axel

+0

De bons conseils en effet, jordanstephens. :RÉ –