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!
There are a handful of issues with the code.
First, it looks like you are sending the
IdRegionand 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
$numRegvalue in the query to limit the results automatically.That way you only pull the records you intend to use.
Here is the sample code: