2011-04-26 16 views
0

好的,所以我有這個功能,我在頁面中使用了很多時間,但只有當我調用函數一次,或者如果一個帶有結果的函數我稱它爲第一...在php中自己的函數,多個調用不同的參數問題

這是查詢:

$resultClientes = mysql_query("SELECT nombre.idNombre 
    , nombre.nombre AS nombreNombre 
    , comuna.nombre AS nombreComuna 
    , giro.nombre AS nombreGiro 
    , provincia.nombre AS nombreProvincia 
    , provincia.region_idRegion AS idRegion 
FROM nombre 
INNER JOIN comuna ON nombre.Comuna_idComuna = comuna.idComuna 
INNER JOIN giro ON nombre.Giro_idGiro = giro.idGiro 
INNER JOIN provincia ON comuna.Provincia_idProvincia = provincia.idProvincia 
ORDER BY nombreProvincia, nombreComuna, nombreGiro, nombreNombre"); 

,這是功能:

function listaClientesPorRegion($numReg,$query){ 
    $nombreProvincia = ""; 
    $nombreComuna = ""; 
    $nombreGiro = ""; 
    $nombreNombre = array(); 
    $i=0; 

    while ($row = mysql_fetch_assoc($query)) { 
    if($row['idRegion']== $numReg){ 
     if ($nombreProvincia == $row['nombreProvincia']) { 
     if ($nombreComuna == $row['nombreComuna']) { 
      if ($nombreGiro == $row['nombreGiro']) { 
      $nombreNombre[] = $row['nombreNombre']; 
      } 
      else { //nombreGiro 
      echo '<li>' . implode('</li><li>', $nombreNombre).'</li></ul></li></ul>'; 
     $nombreGiro = $row['nombreGiro']; 
     echo '<ul class="clientes_giro"><li>'.$nombreGiro.'<ul 
        class="clientes_nombre">'; 
     $nombreNombre = array($row['nombreNombre']); 
      } 
     } 
     else { // nombreComuna 
      echo '<li>' . implode('</li><li>', $nombreNombre). 
       '</li></ul></li></ul></li></ul>'; 
      $nombreComuna = $row['nombreComuna']; 
      echo '<ul class="clientes_comuna"><li>'.$nombreComuna; 
      $nombreGiro = $row['nombreGiro']; 
      echo '<ul class="clientes_giro"><li>'.$nombreGiro.'<ul 
       class="clientes_nombre">'; 
      $nombreNombre = array($row['nombreNombre']); 
     } 
     } 
     else { // nombreProvincia 
     if (!empty($nombreNombre)) { 
      echo '<li>' . implode('</li><li>', $nombreNombre). 
       '</li></ul></li></ul></li></ul></li></ul></div>'; 
     } 
     $class = $i++ % 2 ? 'clientes_floatEven' : 'clientes_floatOdd'; 

     $nombreProvincia = $row['nombreProvincia']; 
     echo '<div id="'.$class.'"><ul class="clientes_provincia"> 
       <li><div class="underline_yellow">'.$nombreProvincia.'</div>'; 
     $nombreComuna = $row['nombreComuna']; 
     echo '<ul class="clientes_comuna"><li>'.$nombreComuna; 
     $nombreGiro = $row['nombreGiro']; 
     echo '<ul class="clientes_giro"><li>'.$nombreGiro.'<ul 
     class="clientes_nombre">'; 
     $nombreNombre = array($row['nombreNombre']); 
     } 
    } 
    } 
    if (!empty($nombreNombre)) { 
    echo '<li>' . implode('</li><li>', $nombreNombre). 
     '</li></ul></li></ul></li></ul></li></ul></div>'; 
} 
} 

,這是HTML的一部分

<div id="atacama"> 
    <ul class="regiones_nomb_container"> 
    <li class="atacama"></li> 
    </ul> 
    <?php 
    listaClientesPorRegion(3,$resultClientes); 
    ?> 
</div> 

<div id="coquimbo"> 
    <ul class="regiones_nomb_container"> 
    <li class="coquimbo"></li> 
    </ul> 
    <?php 
    listaClientesPorRegion(4,$resultClientes); 
    ?> 
</div> 

<div id="valparaiso"> 
    <ul class="regiones_nomb_container"> 
    <li class="valparaiso"></li> 
    </ul> 
    <?php 
    listaClientesPorRegion(5,$resultClientes); 
    ?> 
</div> 

起初我只用一次時間和一個查詢,我知道會有記錄,如listaClientesPorRegion(9,$ resultClientes),然後我嘗試了一個數字,我知道不會有記錄,都工作,所以我打電話給我的網站所有的div多次,但現在不工作,我不知道爲什麼... (我是新的PHP和東西),謝謝你的幫助!

+0

我首先想到的是,從函數返回一個數組/對象和顯示結果分別代替在函數內'echo'ing的。或者至少返回一串結果......我只是不喜歡函數/方法中的'echo'或'print'。 – 2011-04-26 01:10:29

+0

對於這個建議,我可能會受到批評,但請看[Smarty](http://www.smarty.net/documentation)。將代碼從代碼中分離出來是讓代碼可重用和健壯(如果你做得對)的重要一步。 – 2011-04-26 01:14:50

+0

還有[Flexy](http://pear.php.net/package/HTML_Template_Flexy/docs),它更像是一個模板引擎,但我覺得這個文檔很累。 – 2011-04-26 01:22:08

回答

1

代碼有一些問題。
首先,它看起來像你正在發送IdRegion和查詢的結果作爲($ numReg,$ query)你的函數。
這意味着您將不得不通過解析結果集中的每個記錄以顯示您正在查找的內容。

將查詢移入該函數並僅傳遞idRegion。
其次,對$ numReg進行一些錯誤檢查,以確保某些事情能夠通過。
第三,在查詢中放入$numReg值以自動限制結果。
這樣你只能拉你打算使用的記錄。

下面是示例代碼:

function listaClientesPorRegion($numReg = null){ 
    if(!$numReg) { 
     // handling here (i.e. return null, echo 'Error!';, etc.) 
    } 
    $nombreProvincia = ""; 
    $nombreComuna = ""; 
    $nombreGiro = ""; 
    $nombreNombre = array(); 
    $i=0; 

    $resultClientes = mysql_query("SELECT nombre.idNombre 
     , nombre.nombre AS nombreNombre 
     , comuna.nombre AS nombreComuna 
     , giro.nombre AS nombreGiro 
     , provincia.nombre AS nombreProvincia 
     , provincia.region_idRegion AS idRegion 
    FROM nombre 
    WHERE provincia.region_idRegion = $numReg 
    INNER JOIN comuna ON nombre.Comuna_idComuna = comuna.idComuna 
    INNER JOIN giro ON nombre.Giro_idGiro = giro.idGiro 
    INNER JOIN provincia ON comuna.Provincia_idProvincia = provincia.idProvincia 
    ORDER BY nombreProvincia, nombreComuna, nombreGiro, nombreNombre"); 

    while ($row = mysql_fetch_assoc($query)) { 
    ... 
+0

thanksss,那工作! – Gmo 2011-04-26 02:12:21

相關問題