2014-02-18 31 views
0

我試圖用一個名爲myinfo.php的小PHP腳本來顯示用戶信息。其中的相關部分如下所示:

while($return = mysql_fetch_assoc($result)) { 
    echo "<form action=UpdateInfo.php method=post>"; 
    echo "<p id=greeting> Hi ".$return['FirstName'].", below is all of your personal information: </p>"; 
    echo '<p> First Name: <input type="text" name="firstname" value= "'.$return['FirstName'].'"/></p>'; 
    echo '<p> Surname: <input type="text" name="surname" value= "'.$return['Surname'].'" /></p>'; 
    echo '<p> House Number: <input type="number" name="housenumber" value= "'.$return['HouseNumber'].'"/></p>'; 
    echo '<p> Address Line One: <input type=text name="addressone" value= "'.$return['AddressLineOne'].'" /></p>'; 
    echo '<p> Address Line Two: <input type=text name="addresstwo" value= "'.$return['AddressLineTwo'].'" /></p>'; 
    echo '<p> County: <input type=text name="county" value= "'.$return['County'].'" /></p>'; 
    echo '<p> Phone Number: <input type=number name="phonenumber" value= "' .$return['PhoneNumber'].'" /></p>'; 
    echo '<p> Email: <input type=email name="email" value= "'.$return['Email'].'" /></p>'; 
    echo '<p> Username: <input type=text name="username" value= "'.$return['Username'].'" /></p>'; 
    echo '<p> Password: <input type=password name="password" value= "'.$return['Password'].'" /></p>'; 
    echo '<p> User Type: <input type="text" name="usertype" value= "'.$return['UserType'].'" /></p>'; 
    echo '<input id="submit" type="submit" value="Update Info" />'; 
    echo "</form>"; 
} 

的輸入都是預填充與用戶自己的信息,以便用戶可以編輯的輸入值,然後點擊「更新信息」提交按鈕,以更新他/她的信息。一旦這個按鈕被點擊的用戶被髮送到「updateinfo.php」頁面,他們必須確認信息的變化,並表示他們將要進行更改,如下圖所示:

echo '<p id="confirmation">Are you sure you wish to make the following changes to your personal information?</p>'; 
    echo '<form action="CompleteUpdate.php" method="post">'; 
    echo "<p>First Name: " . $_POST["firstname"] . "</p>"; 
    echo "<p>Surname: " . $_POST["surname"] . "</p>"; 
    echo "<p>House Number: " . $_POST["housenumber"] . "</p>"; 
    echo "<p>Address Line One: " . $_POST["addressone"] . "</p>"; 
    echo "<p>Address Line Two: " . $_POST["addresstwo"] . "</p>"; 
    echo "<p>County: " . $_POST["county"] . "</p>"; 
    echo "<p>Phone Number: " . $_POST["phonenumber"] . "</p>"; 
    echo "<p>Email: " . $_POST["email"] . "</p>"; 
    echo "<p>Username: " . $_POST["username"] . "</p>"; 
    echo "<p>Password: " . $_POST["password"] . "</p>"; 
    echo "<p>Usertype: " . $_POST["usertype"] . "</p>"; 
    echo '<input id="submit" type="submit" value="Update Info" /></form>'; 
    echo '<form action="CancelUpdate.php"><input id="submit" type="submit" value="Cancel" /></form>'; 

這裏用戶現在單擊「更新信息」按鈕或決定取消更新。如果點擊更新信息按鈕下面的PHP腳本調用:

$sql=("UPDATE completeinfo SET FirstName='$_POST[firstname]', Surname='$_POST[surname]', AddressLineOne='$_POST[addresslineone]', AddressLineTwo='$_POST[addresslinetwo]', County='$_POST[county]', Email='$_POST[email]', Username='$_POST[username]', Password=SHA1('$_POST[password]'), UserType='$_POST[usertype]' WHERE Username='".$_SESSION['username']."'"); 

我遇到的問題是,更新查詢,而不是用新的替換舊的值,由$ _ POST值表示,它現在讓他們完全空白。該查詢確切地知道在我的數據庫中編輯的位置,所以我必須假定「where」子句正在工作,但由於某些原因,$ _POST並未在查詢中獲取正確的值,即使它在以前的PHP腳本中工作得非常好。任何想法如何解決這個問題將不勝感激。由於

+2

有關SQL注入的一些想法。 .. – Ray

+1

只需使用一些輸入類型=「隱藏」來存儲值;) – Hackerman

+1

讓我們說,我不會做任何「網上銀行」與此。 '$ this =「code」;' - ['Lovely'](http://stackoverflow.com/q/60174/) –

回答

1

首先,你應該避免使用mysql_功能(而不是見​​PDOmysqli
這樣,您將能夠保護您的查詢。

無論如何,這裏您的查詢應該是這樣的:

$sql = "UPDATE completeinfo SET FirstName='".$_POST['firstname']."', 
     Surname='".$_POST['surname']."', AddressLineOne='".$_POST['addresslineone']."', 
     AddressLineTwo='".$_POST['addresslinetwo']."', County='".$_POST['county']."', 
     Email='".$_POST['email']."', Username='".$_POST['username']."', 
     Password=SHA1('".$_POST['password']."'), UserType='".$_POST['usertype']."' 
     WHERE Username='".$_SESSION['username']."'"; 

不要去瘋狂的單/雙引號。這只是一個很好的方法來連接

另外,在updateinfo.php上,不要像顯示POST那樣顯示數據。而應將其存儲在輸入字段中(輸入hidden)。這樣,數據將被髮送到您正在執行SQL查詢的頁面。

+0

感謝您的幫助。 – user3298004

1

在UpdateInfo.php頁面上,您正在使用發送按鈕創建一個空表單。將$ _post值回顯到頁面不足以將值傳遞到CompleteUpdate.php的下一個步驟。您需要爲每個值創建隱藏字段(用當前值填充),或者您可以使用只填充當前值的只讀文本字段(然後您不必分別回顯值)

+0

你能否解釋你的評論,我想在UpdateInfo.php頁面上我創建了兩種形式。我知道其中的一個是空的,只是一個按鈕,但是這個按鈕取消了所有需要的更新操作。將值傳遞給CompleteUpdate.php的其他形式不是空的嗎?除非我犯了一個錯誤,並且做到了。感謝您的幫助,因爲我是PHP新手。 – user3298004