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

发布于 2024-11-03 01:49:47 字数 4093 浏览 0 评论 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 
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 之类的新手),谢谢您的帮助!

Ok, so I have this function, wich I use many time in my page, but only work when I call the function one time, or if a function with results i call it first...

this is the query:

$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");

and this is the function:

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>';  
 }
}

and this is part of the 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>

At first I tried the function with only one time and with a query that I knew would have records, like listaClientesPorRegion(9, $resultClientes), then I tried with a number I knew would not have records, both worked, so I called multiple times for all the divs in my website, but now is not working, I have no idea why...
(I'm new in php and stuff), thank you for your help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只为守护你 2024-11-10 01:49:47

代码存在一些问题。
首先,您似乎正在将 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)) {
   ...

There are a handful of issues with the code.
First, it looks like you are sending the IdRegion and the results of the query to your function as ($numReg,$query).
This means you will have to parse through every record in the results set to display what you are looking for.

Move the query into the function and only pass the idRegion.
Second, do some error checking on the $numReg to make sure something gets passed.
Third, put the $numReg value in the query to limit the results automatically.
That way you only pull the records you intend to use.

Here is the sample code:

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)) {
   ...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文