将PHP变量分组到HTML表单字段的问题

时间:2013-08-17 18:48:57

标签: php html mysql

我在使用标记中的value属性将PHP变量中存储的数据输入HTML表单时遇到问题。问题似乎是在空格周围切割字符串,其中只有字符串的第一部分在空格之前形成。没有空格的字符串在末尾会出现正斜杠。

表单的想法是客户可以在MySQL数据库上编辑有关它们的详细信息存储,然后使用update语句更改这些值。因此,值存在于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>";

?>

3 个答案:

答案 0 :(得分: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']);

答案 1 :(得分:1)

首先,您必须将value关闭到撇号中,如下所示:

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

你应该在使用htmlspecialchars打印之前从字符串中删除撇号和其他任何在HTML 中具有特殊意义的字符:

$Name = htmlspecialchars($Name);

此外,假设CustomerID是唯一的,则在从数据库中提取数据时进行循环是不必要的。

答案 2 :(得分:-2)

将空格设为文本框的结束标记

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

也是电子邮件地址。

否则添加单引号(')

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