2010-09-03 16 views
1

Je suis en train de faire un tutoriel php très basique et je suis en train de créer une calculatrice pour que je puisse comprendre $ _GET, $ _POST et une syntaxe générale.Conserver les valeurs à travers POST dans une forme PHP très basique

J'ai créé une fonction php très basique calc(); dans un fichier php appelé functionadvanced.php. Tout ce qu'il fait est de prendre 2 chiffres, un opérateur, fait le calcul et crache les résultats (comme je l'ai dit, tutoriel très basique). La fonction fonctionne donc je ne publierai pas le code.

J'ai un autre fichier php appelé calc.php qui a mon formulaire pour ma calculatrice. Voici le code:

<?php 
include "functionadvanced.php"; 

$number1 = $_POST['num1']; 
$number2 = $_POST['num2']; 
$operator = $_POST['op']; 

?> 

<html> 
<body> 
    <form action='calc.php' method='POST'> 

    <input type='textbox' name='num1' value="<?php echo $_GET['$number1']; ?>"/> &nbsp; 
    <select name="op" selected="<?php echo $_GET['$operator']; ?>"> 
      <option value="+">+</option> 
      <option value="-">-</option> 
      <option value="*">*</option> 
      <option value="/">/</option> 
    </select> &nbsp; 
    <input type='textbox' name='num2' value="<?php echo $_GET['$number2']; ?>"/> 
    <input type='submit' value='=' /> 
    <input type='text' name='result' value="<?php echo calc($number1,$number2,$operator); ?>" /> 

    </form> 
</body> 
</html> 

La forme fonctionne réellement, et montre la valeur correcte que la fonction calc recrache, mais quand les messages de dernière page, il ne garde pas les valeurs réaffectés dans les champs. Je pensais que je devais utiliser un $ _GET pour récupérer les valeurs affichées dans le $ _POST?

Répondre

1

$_GET fait référence à l'information dans le passé query string (index.php?id=123 donne $_GET['id'] = '123'), tandis que $_POST est pour l'information de forme. Ceux-ci correspondent à peu près (mais pas exactement) à la correspondance http request methods.

Vous souhaitez donc utiliser à nouveau $_POST, ou simplement utiliser les variables que vous avez déjà lues depuis $_POST (comme $number1).

NOTE: Je sais que cela est juste un processus d'apprentissage, mais cette approche naïve est vulnérable à XSS, donc lu sur ce avant d'aller vivre avec quelque chose d'important ...

+0

Ahh qui est parfaitement logique. Je viens d'un arrière-plan .NET :) Merci! Oui, c'est juste l'apprentissage, je n'utiliserais pas cette fonctionnalité de base dans un environnement en direct. Merci encore! – drpcken

1

pourquoi utiliser $ _GET lorsque vous avez saisi les valeurs forment $ _POST? vous avez juste besoin de les utiliser. et devrait également ajouter par défaut

<?php 
include "functionadvanced.php"; 

$number1 = isset($_POST['num1'])?$_POST['num1']:0; 
$number2 = isset($_POST['num2'])?$_POST['num2']:0; 
$operator = isset($_POST['op'])?$_POST['op']:'+'; 

?> 

<html> 
<body> 
    <form action='calc.php' method='POST'> 

    <input name='num1' value="<?php echo $number1; ?>"/> &nbsp; 
    <select name="op" selected="<?php echo $operator; ?>"> 
      <option value="+">+</option> 
      <option value="-">-</option> 
      <option value="*">*</option> 
      <option value="/">/</option> 
    </select> &nbsp; 
    <input name='num2' value="<?php echo $number2; ?>"/> 
    <input type='submit' value='=' /> 
    <input name='result' value="<?php echo calc($number1,$number2,$operator); ?>" /> 

    </form> 
</body> 
</html> 

aussi, il n'y a pas de type = « zone de texte », seul le texte qui est par défaut. Si vous avez besoin d'une zone de texte, vous devez utiliser