我想創建一個使用PHP頁面和MySQL數據庫來存儲細節的祕密聖誕老人系統,如果有人忘記了他們的匹配,他們可以重新請求它。使用MySQL和PHP創建一個「祕密聖誕老人」生成器
第1步:我根據數據庫中列表中的人數創建了一個隨機數生成器。
計數功能:
$maxSQL = "SELECT COUNT(id) as total FROM secretsanta";
$maxRS = mysqli_query($conn, $maxSQL);
$maxQuery = mysqli_fetch_array($maxRS);
$maxpersons = $maxQuery['total'];
然後隨機數生成器:
$assigned = rand(1,$maxpersons);
第2步:如果隨機數相匹配的人自己的ID,如果真再生一個新的號碼測試。
do {
$assigned = rand(1,$maxpersons);
} while ($assigned==$id);
第3步:寫配對ID的個人數據庫記錄。
$assignSQL = "UPDATE secretsanta SET assigned = '".$assigned."' WHERE secretsanta.id = ".$id;
if (mysqli_query($conn, $assignSQL)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . mysqli_error($conn);
}
問題:現在我需要檢查,其他人都沒有分配給該人或其他一些可能錯過了和其他人會得到比別人更多。
我試圖實現一個函數,其中包含一個查詢來測試每條記錄,看看這個數字是否已經存在,並希望將它作爲一個條件添加到一段時間或做while語句?
if (!function_exists('checkRandom')){
function checkRandom($funcid){
$Check_SQL = "SELECT assigned FROM secretsanta ORDER BY id ASC";
$Check_RES = mysqli_query($conn, $Check_SQL);
if (Check_RES) {
while ($CheckArray = mysqli_fetch_array($Check_RES, MYSQLI_ASSOC)) {
$CheckAsgn = $CheckArray['assigned'];
if ($funcid==$CheckAsgn) {return true;}else{return false;}
}
}
}
}
然後落實到了做,而這樣的說法:
do {
$assigned = rand(1,$maxpersons);
} while ($assigned==$id||checkRandom($assigned));
至今沒有運氣...幫助..請:)
附:我知道有些網站已經這樣做了,我只是不相信他們發佈我的和家人的電子郵件地址',如果我可以自己製作我自己的私人版本。
我想有一個更強大的筆記本電腦,所以我可以回答你的問題更快:-) –
您的代碼很容易受到[** SQL注入**](HTTPS: //en.wikipedia.org/wiki/SQL_injection)攻擊。您應該通過[** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)或[** PDO **](https ://secure.php.net/manual/en/pdo.prepared-statements.php)驅動程序。 [**這篇文章**](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)有一些很好的例子。 –
謝謝亞歷克斯,這是非常有用的信息。我從來不知道這是我能做的事情,再次感謝你,我會更多地研究這個。 – Biscuits