0

タグの value プロパティを使用して、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>";

?>
4

3 に答える 3

5

値を囲む引用符がありません。次のように引用符を追加する必要があります。

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

最初の二重引用符の前と 2 番目の後の単一引用符に注意してください。

もう 1 つの問題は、無効な型を使用していることです。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']);
于 2013-08-17T18:58:44.280 に答える
1

まず、次のvalueようにアポストロフィで閉じる必要があります。

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

また、HTML で特別な意味を持つアポストロフィやその他の文字は、次のように印刷する前に文字列からエスケープする必要がありますhtmlspecialchars

$Name = htmlspecialchars($Name);

CustomerIDまた、一意であると仮定すると、データベースからデータを取得する際のループは不要です。

于 2013-08-17T19:00:56.720 に答える