2012-03-21 81 views
3
<html> 
<body> 

<form action="http://localhost/index1.php" method="post"> 
     Type your name: <input type="text" name="name" value="<?php echo $_POST['name'];?>"> 
       <input type="submit" value="Submit"> 
</form> 

</body> 
</html> 

我想要做的就是在用戶輸入一個值並按下提交按鈕後,保持輸入的數據在文本框中。在html中嵌入php以便在用戶提交值後在文本框中保留文本

當我按下提交按鈕,它會在文本框中發出一個通知,說這個名字是 一個未定義的索引,我明白爲什麼。 $ _POST ['name']沒有值。

我只是想知道是否有辦法做到這一點。 我是初學PHP和HTML。

+0

大家請閱讀 - http://blog.astrumfutura.com/2012/03/a-hitchhikers-guide-to-cross-site-scripting-xss-in-php-part-1-how-not- to-use-htmlspecialchars-for-output-escaping/ – Phil 2012-03-21 05:07:56

回答

0

@達拉斯

你在正確的軌道上;這裏是一個(非常粗糙和骯髒的)例子顯示在其原來的文本提交的POST字段的值形式

<form action="thispage.php" method="post"> 
    <input type="text" name="mytext" value="<?php echo isset($_POST['mytext'])?$_POST['mytext']:''?>" /> 
    <input type="submit" value="submit"/> 
</form> 

這樣做是檢查POST場,mytext,定義和(如果所以)把這個值放回到文本框中。如果沒有定義,它只是一個空白值。

如果它不適合你,我會重新檢查文本框的name屬性是否與你在$ _POST中搜索的關鍵值匹配。

+0

這仍然會拋出相同的'E_NOTICE'錯誤 – Phil 2012-03-21 04:56:31

+0

是的,只是注意到我忘記了POST周圍的isset。固定 – jonathanl 2012-03-21 04:57:16

+0

我認爲反對是因爲你的建議暴露了一個非常簡單和天真的注入攻擊。重新創建此表單,然後發佈內容爲''讓我們知道發生了什麼。 – 2012-03-21 04:57:56

0

當你的表單action屬性指向index1.php那麼我想給定的HTML代碼在同index1.php給出,在這種情況下,那麼你必須要做到這一點

<html> 
<body> 

<form action="http://localhost/index1.php" method="post"> 
    Type your name: input type="text" name="name" value="<?php if(isset($_POST['name'])){echo $_POST['name'];}?> 
        input type="submit" value="Submit"> 
</form> 

</body> 
</html> 

<?php echo isset($_POST['name'])?$_POST['name']:''?>是在另一種方式,使屬性值條件

3

試試這個(假設這是index1.php和你使用UTF-8爲您的內容類型)

<?php 
$name = isset($_POST['name']) ? $_POST['name'] : null; 
?> 

<!-- your HTML, form, etc --> 

<input type="text" name="name" 
    value="<?php echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8') ?>"> 
+0

isset不是正確的做法,你必須檢查'name'鍵是否在$ _POST數組中。 – AsTeR 2012-03-21 17:28:19

+0

@AsTeR也許你不知道'isset()'做了什麼。對於XSS漏洞,我建議您[閱讀手冊](http://php.net/manual/en/function.isset.php#example-4825) – Phil 2012-03-21 23:34:15

6
<?php 
//check whether the variable $_POST['name'] exists 
//this condition will be false for the loading 
if(isset($_POST['name']){ 
    $name = $_POST['name']; 
} 
else{ 
    //if the $_POST['name'] is not set 
    $name = ''; 
} 


?> 

<html> 
<body> 

<form action="http://localhost/index1.php" method="post"> 
    Type your name: <input type="text" name="name" value="<?php echo $name;?>"> 
        <input type="submit" value="Submit"> 
</form> 

</body> 
</html> 
+1

-1 – Phil 2012-03-21 05:25:57

1

從@菲爾的回答考慮目前正使用「isset」不是解決辦法(編輯:我錯了,就這點看評論),右邊的功能是測試$ _POST的「名稱」項的試圖訪問:

<?php 
$name = null; 
if (array_key_exists('name', $_POST)) { 
    $name = $_POST['name']; 
} 
//more condensed : $name = array_key_exists('name', $_POST) ? $_POST['name'] : null; 
?> 

<!-- your HTML, form, etc --> 

<input type="text" name="name" 
    value="<?php echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8') ?>"> 

出現的消息是一個PHP警告,閱讀your environment error_reporting in PHP可能是一個好主意。

相關問題