【问题标题】:own function in php, multiple call different parameters problemphp自带函数,多次调用不同参数问题
【发布时间】:2011-04-26 01:08:00
【问题描述】:

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

这是查询:

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

【问题讨论】:

  • 我的第一个想法是,从您的函数中返回一个数组/对象并单独显示结果,而不是在函数中使用echoing。或者至少返回结果字符串...我只是不喜欢函数/方法中的echo 或print。
  • 我可能会因为这个建议而受到谴责,但请查看Smarty。将演示文稿与代码分离是使代码可重用和健壮的重要一步(如果你做得对的话)。
  • 还有Flexy,它更像是一个模板引擎,但我觉得文档很烦。
  • 聪明?真的吗? Smarty !== 表示代码的分离。 Smarty 是浪费时间和你不需要的额外开销/学习曲线。既然可以在 HTML 中完成,为什么还要学习 Smarty? Smarty 和 Flexy 都不会帮助解决这种情况。严肃地说,这些类型的项目应该被禁止。它们没用。

标签: php mysql function parameters call


【解决方案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)) {
   ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 2021-02-06
    • 2015-01-21
    相关资源
    最近更新 更多