2012-02-22 64 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