$_POST
和$_GET
陣列可以包含危險的數據,所以你需要將它們插入到數據庫之前準備從這些陣列的數據。
首先,您需要對正確的數據類型進行類型轉換。在PHP中,可以使用以下結構:字符串數據爲(string)
,數字數據爲(int)
和(float)
,布爾數據爲(bool)
。
字段email
需要檢查有效的電子郵件,使用正則表達式。
跟蹤代碼檢查數據的樣本:
<?php
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
$username = mysqli_real_escape_string($link, (string) $_POST['username']);
$nicename = mysqli_real_escape_string($link, (string) $_POST['nicename']);
$email = mysqli_real_escape_string($link, (string) $_POST['email']);
$email = preg_replace('/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|coop|info|museum|name))$/', $email);
$password = sha1((string) $_POST['password']);
$position = mysqli_real_escape_string($link, (string) $_POST['position']);
$race = mysqli_real_escape_string($link, (string) $_POST['race']);
$type = mysqli_real_escape_string($link, (string) $_POST['type']);
$admin = $_SESSION['admin_login'];
$query = "UPDATE `user`
SET `username`='$username',
`nicename`='$nicename',
`email`='$email',
`password`='$password',
`position`='$position',
`race`='$race',
`type`='$type'
WHERE `username`='$admin'";
mysqli_query($link, $query);
mysqli_close($link);
你到底想達到什麼目的? – janenz00
用戶有一張表格可以填寫所有信息的位置。提交後,它應該更新他們的所有個人資料信息。 –
**你的代碼容易受到SQL注入**你真的*應該使用[prepared statements](http://stackoverflow.com/a/60496/623041),將你的變量作爲參數傳遞給你沒有得到評估的SQL。如果你不知道我在說什麼,或者如何解決它,請閱讀[Bobby Tables]的故事(http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain) 。 – eggyal