2013-08-17 84 views
0

我遇到了使用標記中的value屬性將存儲在PHP變量中的數據輸入到HTML表單中的問題。問題似乎是字符串正在圍繞空格切割,其中只有字符串的第一部分在空格形成表單之前。沒有空格的字符串在最後以正斜槓出現。將PHP變量轉換爲HTML表單字段的問題

表單的想法是客戶可以在MySQL數據庫上編輯關於它們的詳細信息存儲,然後使用更新語句更改值。因此,值存儲在PHP變量中時顯示值非常重要。

例子:

http://i.imgur.com/pvfYApy.png

<?php 
//session start// 
session_start(); 

//Connect to the server and database// 
$con=mysqli_connect("127.0.0.1","root","","mia"); 

//Generate the sql statement for retrieval of customer details// 
$customerdetails="SELECT Name, BusinessName, Address, Postcode, TelNo, Email 
        FROM customer 
        WHERE CustomerID = " . $_SESSION['CustomerID'] . ""; 

//execute the 'Customer details retrieve' sql statement// 
$result= mysqli_query($con, $customerdetails); 

while ($row = mysqli_fetch_array($result)) 
    { 
     $Name='' . $row['Name'] . ''; 
     $BusinessName=$row['BusinessName']; 
     $Addresss=$row['Address']; 
     $Postcode=$row['Postcode']; 
     $TelNo=$row['TelNo']; 
     $Email=$row['Email']; 
    } 

//Write the web page// 
echo "<!Doctype html> 
<html> 
<head> 
<title> 
    Edit Details 
</title> 
</head> 

<body> 
<h1>Edit Details</h1> 
<p>Please change values below where apropriate</p> 
<form name='input' 
      action='../php/update_customer.php' 
      method='post'> 
     Name:   <input type='string' 
           name='Name' value=" . $Name ."/> </br> 
     Business Name: <input type='text' 
           name='BusinessName' value=" . $BusinessName ."/> </br> 
     Address:  <input type='text' 
           name='Address' value=" . $Addresss ."/> </br>      
     Post Code:  <input type='text' 
           name='Postcode' value=" . $Postcode ."/> </br> 
     Telephone No: <input type='text' 
           name='TelNo' value=" . $TelNo ."/> </br> 
     Email Address: <input type='text' 
           name='Email' value=" . $Email ."/> </br> 
     <input type='submit' value='Update'/> 
    </form> 

<p>" . $Name . "</p> 
<p>" . $_SESSION['CustomerID'] . "</p> 
</body> 
</html>"; 

?> 
+2

你的意思是除了HTML注入問題嗎?考慮'Bob'的名稱值>

回答

5

你缺少你周圍引號值,否則添加單引號(')。您應該添加如下的引號:

<input type='text' name='Name' value='" . $Name ."'/> 

請注意第一個雙引號之前和第二個之後的單引號。

另一個問題是您使用的是無效類型。 string是無效的輸入類型,它應該是文本。

你最大的問題可能是你正在獲取一個數組,然後遍歷它,並在每次迭代中覆蓋你以後在表單中使用的所有變量。因此,您將始終獲得您在數據庫中找到的最後一條記錄的名稱,地址等等。

除非您在將值插入數據庫之前將其轉義,否則應該確保它們不包含任何特殊的html字符。你可以逃避特殊字符是這樣的:

$Name = htmlspecialchars($row['Name']); 
$BusinessName = htmlspecialchars($row['BusinessName']); 
$Addresss = htmlspecialchars($row['Address']); 
$Postcode = htmlspecialchars($row['Postcode']); 
$TelNo = htmlspecialchars($row['TelNo']); 
$Email = htmlspecialchars($row['Email']); 
+0

是的,這個工程!非常感謝你,我昨天從PHP開始,我的老師看起來和我一樣有經驗。他無法幫助我,我一整天都在爲此而苦苦掙扎。修正了while循環,但它是我被教導從數組中調用多個值的唯一方式,這種方式對我來說更有意義。 – user2692640

+0

如果您確定只返回一行,您也可以只取一行,或者只使用'$ resultarray [0] ['Name']''來訪問第一行。另外請注意我關於轉義變量輸出的編輯。另外,如果這解決了您的問題,請接受答案。這樣別人可以很快看到你的問題已經解決了。 –

-2

騰出空間文本框的結束標記

<input type='text' name='TelNo' value=" . $TelNo ." /> </br> 

而且電子郵件地址。

<input type='text' name='TelNo' value='" . $TelNo ."'/> </br> 
1

首先,你必須關閉value成單引號,像這樣:

<input type='string' name='Name' value='" . $Name ."' /> 

你應該逃脫撇號和具有特殊的任何其他字符HTML中的含義在打印之前以及使用之前htmlspecialchars

$Name = htmlspecialchars($Name); 

此外,假設CustomerID是唯一的,從數據庫獲取數據時循環是不必要的。

+0

請使用'htmlspecialchars'功能進行字符轉義。這樣你就可以確定所有不需要的字符都被擋住了。 –

+0

@PatrickKostjens - 是的,當然。我差點忘了有這樣一個功能,我在想什麼?謝謝! –