2012-02-22 38 views
0

我想提出一个PHP的形式,以自我,但之后提交页面返回页面的源代码,而不是处理过的数据。腓提交到自回复源代码

我有一个issset检查表单已经提交,然后有在同一页上的功能来处理提交的数据。

下面是代码:

 
    if(isset($_POST['submit'])){ 

     if ($_POST['name' == 'px']) { 
      $pxValue = $_POST['value']; 
      $value = convertToEm($pxValue); 
     } 

     if ($_POST['name' == 'em']) { 
      $emValue = $_POST['value']; 
      $value = convertToPx($emValue); 
     } 

     function convertToEm($value) { 
      $base_font = 16; 
      $em_value = $value/$base_font; 
      return $em_value; 

     } 
    } 

下面的形式:

<form action="" id="converterPx" method="POST"> 
    <h3>Convert Pixels to Ems:</h3> 
    <label>PX:</label> 
    <input type="text" name="value" value="" /> 
    <?php echo 'Result:'. $value; ?> 
    <input type="hidden" name="type" value="px" /> 
    <input type="submit" name="submit" id="submit-px" /> 
</form> 

试图在同一页

使用浏览器检查的处理形式,我看到POST被提交了值。

任何帮助,这将是巨大的

+0

你忘了''标签? – 2012-02-22 17:12:52

回答

1

要在同一页面使用自行动这一形式的行动$ _ SERVER [ 'REQUEST_URI']

//这是你的问题的确切答案代码

<?php 
if(isset($_POST['submitBtn'])){ 


    function convertToEm($value) { 

      $base_font = 16; 
      $px_value = $value/$base_font; 
     return $px_value; 
     } 
     function convertToPx($value) { 
      $base_font = 32; 
      $em_value = $value/$base_font; 
      return $em_value; 
     } 

     if (isset($_POST['type']) && $_POST['type']=='px') { 

      $pxValue = $_POST['value']; 
     $value = convertToEm($pxValue); 

     } 

     if (isset($_POST['type']) && $_POST['type'] == 'em') { 

      $emValue = $_POST['value']; 
      $value = convertToPx($emValue); 

     } 


    } 

//form data 

<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" id="converterPx" method="POST"> 
    <h3>Convert Pixels to Ems:</h3> 
    <label>PX:</label> 
    <input type="text" name="value" /> 
    <?php echo 'Result:'.$value; ?> 
    <input type="hidden" name="type" value="px" /> 
    <input type="submit" name="submitBtn" id="submit-px" /> 
</form> 
+0

如果action =“”为空,它会发布到它自己的 – 2012-02-22 17:27:15

+0

@LawrenceCherone ,,但它不是提交数据的正确方式,,在php标准中它应该遵循一些编码风格 – 2012-02-22 18:13:36

+0

@Sam Arul Raj - 感谢您的帮助,现在运作良好! – estern 2012-02-22 18:17:53

0

$_POST['name' == 'px']大概应该是$_POST['name'] == 'px'](有类似的变化正在对类似的结构制造)。

您正在尝试使用两个字符串(这将是假的)作为数组索引之间的比较的结果。

0

你是不是忘记了<?php ?>标签?也$_POST['name' == 'px']应该$_POST['name'] == 'px',convertToPx功能丢失,您在表格上没有PARAM叫名字annnnd你没有任何呼应。

<?php if(isset($_POST['submit'])){ 

     if ($_POST['name']== 'px') { 
      $pxValue = $_POST['value']; 
      $value = convertToEm($pxValue); 
     } 

     if ($_POST['name'] == 'em') { 
      $emValue = $_POST['value']; 
      $value = convertToPx($emValue); 
     } 

     function convertToEm($value) { 
      $base_font = 16; 
      $em_value = $value/$base_font; 
      return $em_value; 
     } 
     function convertToPx($value) { 
      $base_font = 32; 
      $em_value = $value/$base_font; 
      return $em_value; 
     } 


    echo $value; 
    } 
?> 
+0

耶我知道该函数是缺少我只测试convertToPx形式。也是你确定应该有第二个],它不应该是:$ _POST ['name'] =='px' – estern 2012-02-22 17:21:39

+0

我有PHP标签也没有复制到这里的代码 – estern 2012-02-22 17:29:50

0

你不服从自我,您要提交到什么

<form action="" id="converterPx" method="POST">

编辑:正如劳伦斯指出,应避免使用我下面最初描述的方法。相反,使用$_SERVER['SCRIPT_NAME'];和更多信息,请参阅http://www.webadminblog.com/index.php/2010/02/23/a-xss-vulnerability-in-almost-every-php-form-ive-ever-written/

原始:根据您所说的表格,你可以尝试:

<form action="<?php echo $_SERVER['PHP_SELF'] ?>" id="converterPx" method="POST">

更多细节在这里:http://www.html-form-guide.com/php-form/php-form-action-self.html

+0

当我这样做我得到的URL附加到它:%3C?php%20echo%20 $ _SERVER%5B'PHP_SELF'%5D%20?%3E – estern 2012-02-22 17:19:19

+0

你应该永远不要使用'<?php echo $ _SERVER ['PHP_SELF']? >'在一个表单中,这将使XSS和XSRF更好地使用'action =“”'如果发布到自己... – 2012-02-22 17:21:53

+0

您的表单是否由与处理相同的脚本生成? – msanford 2012-02-22 17:22:06

1

如果PHP源代码出现在返回的页面上,这是因为您忘记了标签

或者是因为服务器没有被配置为执行PHP正确

(或部分文件名具有扩展名错误)

+0

如何检查我的服务器是否配置为执行PHP,我做了一个phpinfo(),它似乎工作正常......? – estern 2012-02-22 17:31:56

1

这是你的代码一个错字,,您使用的名称,而不是类型

if ($_POST['type']== 'px') { 
     $pxValue = $_POST['value']; 
     $value = convertToEm($pxValue); 
    } 

    if ($_POST['type'] == 'em') { 
     $emValue = $_POST['value']; 
     $value = convertToPx($emValue); 
    } 
+0

@estern查看我最近的回答,这就是你要求的 – 2012-02-22 18:12:17