2013-04-17 312 views
0

我已經花了數小時解決這個問題,並在網上搜索答案,但沒有發現任何幫助我的東西。如果語句不起作用while循環裏面的循環

因此,我正在爲酒店網站製作過濾器,而酒店搜索的標準之一就是酒店所在的區域。我使用GET方法:

<?php if (isset($_GET['District1'])){ 
    $district1= ($_GET["District1"]); 
    }else ($district1=0); 
if (isset($_GET['District2'])){ 
    $district2= ($_GET["District2"]); 
    }else ($district2=0); 
if (isset($_GET['District3'])){ 
    $district3= ($_GET["District3"]); 
    }else ($district3=0); 
if (isset($_GET['District4'])){ 
    $district4= ($_GET["District4"]); 
    }else ($district4=0); 
?> 

其中$ district1,$ district2,$ district3,$ district4是城市的4個不同區域。

我所試圖做的是通過使用for循環(在變量名的末尾數字將被1升建區變量:$ district1 .. .. 。 。)

然後把這些區變量中一個如果子句其內部while循環如下:

<?php 
$districts_filter_query="SELECT * FROM districts_table "; 
     $districts_filter_result = mysql_query($districts_filter_query, $connect); 
     $districts_filter_row = mysql_fetch_array($districts_filter_result); 
     for($count = 1; $count <= 4 ; $count++){ 

do { 

     $district_name = $districts_filter_row['district_name']; 
     $district_value = $districts_filter_row['district_value']; 



    echo ' 
      <label for="group13"> <p '; ?> <?php 
      if (eval(' return $district'.$count.';') !=0){echo 'class="greenBG"';} 
        else {echo ' class="checkbox" ';}?> <?php echo ' > 
        <input type="checkbox" name="District'.$count.'" id="group13" value="'.$district_value.'" 
         onClick="this.form.submit();" ';?> 
        <?php if (eval (' return $district'.$count.';') !=0){echo ' checked ';};?><?php echo '/> '.$district_name.' 
       </p> 
      </label> '; 

    } 
    while($districts_filter_row = mysql_fetch_array ($districts_filter_result)); 
    } 
?> 

問題在這裏,我猜:eval('return $ district'。$ count。';'),通過這個我嘗試構造分區變量名稱。但它不起作用。

一切完美的作品,如果我用這個代碼:

  <label for="group1"> <p <?php 
      if ($district1!=0){echo 'class="greenBG"';} 
        else echo 'class="checkbox"';?>> 
        <input type="checkbox" name="District1" id="group1" value='1013' onClick="this.form.submit();" 
        <?php if ($district1!=0){echo 'checked ';};?>/> district1 
       </p> 
      </label> 
      <label for="group2"> <p <?php 
      if ($district2!=0){echo 'class="greenBG"';} 
        else echo 'class="checkbox"';?>> 
        <input type="checkbox" name="District2" id="group2" value='1014' onClick="this.form.submit();" 
        <?php if ($district2!=0){echo 'checked ';};?>/> district2 
       </p> 
      </label> 
      <label for="group3"> <p <?php 
      if ($district3!=0){echo 'class="greenBG"';} 
        else echo 'class="checkbox"';?>> 
        <input type="checkbox" name="District3" id="group3" value='1015' onClick="this.form.submit();" 
        <?php if ($district3!=0){echo 'checked ';};?>/> district3 
       </p> 
      </label> 
      <label for="group4"> <p <?php 
      if ($district4!=0){echo 'class="greenBG"';} 
        else echo 'class="checkbox"';?>> 
        <input type="checkbox" name="District4" id="group4" value='1016' onClick="this.form.submit();" 
        <?php if ($district4!=0){echo 'checked ';};?>/> district4 
       </p> 
      </label> 

但是,這並不適合我,因爲有超過30個地區,它需要佔用大量的時間和精力做任何微小的變化編碼。

如果你能幫我解決這個問題並節省我的時間,我會非常感激。謝謝,希望我的問題很清楚。

回答

0

使用http://php.net/manual/en/language.variables.variable.php而不是一些醜陋的eval()。 (例如${"district$count"}

$count = 0; 
do { 
    $count++; 
    $district_name = $districts_filter_row['district_name']; 
    $district_value = $districts_filter_row['district_value']; 
?> 
<label for="group<?php echo $count; ?>"> 
    <p <?php 
     if (${"district$count"} != 0) echo 'class="greenBG"'; 
     else echo 'class="checkbox"'; ?>> 
     <input type="checkbox" name="District<?php echo $count; ?>" id="group<?php echo $count; ?>" value='<?php echo $district_value; ?>' onClick="this.form.submit();" 
     <?php if (${"district$count"} != 0) echo 'checked '; ?>/> <?php echo $district_name; ?> 
    </p> 
</label> 
<?php 
} 
while($districts_filter_row = mysql_fetch_array ($districts_filter_result)); 

然後刪除此for循環它。

+0

完美!你做了我的一天,男人! :) 謝謝! – user2170133

0

,這是一個有點令人費解作爲一種方法,而是一個快速的解決方案來擺脫eval是使用可變變量:

<?php 
$district_name = "district$count"; 
if ($$district_name != 0) { ... } 
?> 

......雖然一個更好的解決辦法是隻使用數組和循環通過它。

+0

謝謝,傑森! – user2170133