собственная функция в php, проблема множественных вызовов различных параметров - PullRequest
0 голосов
/ 26 апреля 2011

Хорошо, у меня есть эта функция, которую я много раз использую на своей странице, но работаю только тогда, когда я вызываю функцию один раз, или, если функцию с результатами, я вызываю сначала ...

это запрос:

$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 Ответ

1 голос
/ 26 апреля 2011

Есть несколько проблем с кодом.
Во-первых, похоже, что вы отправляете 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)) {
   ...
...