好的,所以我有这个功能,我在我的页面中使用了很多时间,但只在我调用该函数一次时才有效,或者如果一个带有结果的函数我先调用它...
这是查询:
$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和东西的新手),谢谢你的帮助!
答案 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)) {
...