我正在使用PHP & MYSQL進行分配。使用PHP和MYSQL進行字段搜索的組合
其中一個任務是搜索任何字段的組合。這包括從數據庫填充的下拉框。和文本字段。
t2ath包含
ID
SPORT
COUNTRY
GENDER
FIRSTNAME
LASTNAME
Image
我已經對這個代碼的工作了一個星期才能夠在沒有任何錯誤的任意組合進行搜索。
我想知道是否有另一種更有效的方法來做到這一點。
$selectedSport = $_POST['sport']; $gender =$_POST['gender']; $fName =$_POST['fname']; $lName =$_POST['lname']; $country =$_POST['country'];
$sql_fName=""; $sql_lName=""; $sql_gender=""; $sql_sport=""; $sql_country="";
$checkFiled=False;
$where="";
$and="";
//
if ($selectedSport=="showAll")
{
!isset($selectedSport);
}
else
{
if (isset($selectedSport))
{
if ($checkFiled==True)
{
$sql_sport = " AND t2ath.sport = '$selectedSport'" ;
}
else
{
$sql_sport = " t2ath.sport = '$selectedSport' " ;
$checkFiled=True;
}
}
else {
$sql_sport = "";
}
}
//
if ($country =="showAll")
{
!isset($country);
}
else
{
if (isset($country))
{
if ($checkFiled ==True)
{
$sql_country = " AND t2ath.country = '$country'" ;
}
else
{
$sql_country = " t2ath.country = '$country' " ;
$checkFiled=True;
}
}
else {
$sql_country = "";
}
}
//
if ($gender=="Gender")
{
!isset($gender);
}
else
{
if (isset($gender))
{
if ($checkFiled ==True)
{
$sql_gender = " AND t2ath.gender = '$gender'" ;
}
else
{
$sql_gender = " t2ath.gender = '$gender' " ;
$checkFiled=True;
}
}
else {
$sql_gender = "";
}
}
//
if ($fName =="")
{
!isset($fName);
}
else
{
if (isset($fName))
{
if ($checkFiled==True)
{
$sql_fName = " AND t2ath.firstName = '$fName'" ;
}
else
{
$sql_fName = " t2ath.firstName = '$fName' " ;
$checkFiled=True;
}
}
else {
$sql_fName = "";
}
}
//
if ($lName =="")
{
!isset($lName);
}
else
{
if (isset($lName))
{
if ($checkFiled==True)
{
$sql_lName = " AND t2ath.lastName = '$lName' " ;
}
else
{
$sql_lName = " t2ath.lastName = '$lName' " ;
$checkFiled=True;
}
}
else
{
$sql_lName = "";
}
}
if ($checkFiled == True)
$where=" where ";
$selectString = "SELECT t2ath.lastName,t2ath.firstName,t2ath.image,t2ath.sport,t2ath.gender,t2ath.country,t2country.flag FROM t2ath LEFT JOIN t2country
ON t2ath.country = t2country.name $where $sql_sport $sql_country $sql_gender $sql_fName $sql_lName ";
$result = mysql_query($selectString);
如果您現在剛剛學習,停止使用棄用MySQL擴展和使用的mysqli(http://us1.php.net/manual/en/book.mysqli.php)擴展。除其他外,它還支持準備好的語句,這將使您的代碼更易於管理。另外代碼'!isset($ lName);'不會取消設置變量,它會返回變量是否已經設置。要取消設置變量,請使用'unset($ lName);' – Anthony
爲什麼您需要取消設置這些變量?你從不在「if」塊之外引用它們。 – Barmar
@Anthony實際上,像這樣動態生成的SQL是使用mysqli預處理語句的_harder_,因爲使用一組動態參數調用'mysqli_stmt_bind_params'很困難。這種類型的事情在PDO中更容易,因爲您可以使用一組參數。 – Barmar