自己在php中的功能,多次调用不同的参数问题

时间:2011-04-26 01:08:01

标签: php mysql function parameters call

好的,所以我有这个功能,我在我的页面中使用了很多时间,但只在我调用该函数一次时才有效,或者如果一个带有结果的函数我先调用它...

这是查询:

$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和东西的新手),谢谢你的帮助!

1 个答案:

答案 0 :(得分: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)) {
   ...