Foros del Web » Programando para Internet » PHP »

Inconvenientes con consultas en PHP

Estas en el tema de Inconvenientes con consultas en PHP en el foro de PHP en Foros del Web. Hola a todos....tengo dos páginas una de ellas la primera pasa a la segunda 4 juegos de arreglos, los cuales llevan id's de preguntas, estos ...
  #1 (permalink)  
Antiguo 19/11/2007, 23:37
 
Fecha de Ingreso: junio-2002
Mensajes: 261
Antigüedad: 21 años, 10 meses
Puntos: 0
Inconvenientes con consultas en PHP

Hola a todos....tengo dos páginas una de ellas la primera pasa a la segunda 4 juegos de arreglos, los cuales llevan id's de preguntas, estos serán procesados en la segunda página, que debe realizar entonces 4 consultas independientes pero en la misma tabla para obtener las subpreguntas ligadas a los id's contenidos en los arreglos. De entrada el primer error:

1. Si selecciono 3 preguntas en la primera página y estas poseen 2 subpreguntas cada una, osea debería retornar 6, solo retorna 4, debido a q la última pregunta seleccionada se pierde al procesar el array.
2. Las demas consultas al ser independientes deberian mostrar sus resultados, pero reflejan los resultados de la primera consulta pero en un correcto número de preguntas, es decir. Si las primeras preguntas (grupo 1), son 6 y las del segundo grupo (segunda consulta), son 4...se muestran 4, pero con el texto de las 4 primeras del grupo1, y lo mismo ocurre con el grupo3 y el grupo4.

Akí posteo el código para q pueda ser revisado y me indiquen en q subyace el error.....GRACIAS

<?php
if(!empty($_POST['ChkPreg3']))
{
$cLista=array_keys($_POST['ChkPreg3']);
}
mysql_select_db($database_Audito, $Audito);
$query_RecPreg3 = "SELECT * FROM preguntas WHERE PregMaster IN (".implode(',',$cLista).")";
$RecPreg3 = mysql_query($query_RecPreg3, $Audito) or die(mysql_error());
$row_RecPreg3 = mysql_fetch_assoc($RecPreg3);
$totalRows_RecPreg3 = mysql_num_rows($RecPreg3);

if(!empty($_POST['ChkPreg1']))
{
$aLista=array_keys($_POST['ChkPreg1']);
}
mysql_select_db($database_Audito, $Audito);
$query_RecPreg1 = "SELECT * FROM preguntas WHERE PregMaster IN (".implode(',',$aLista).")";
$RecPreg1 = mysql_query($query_RecPreg1, $Audito) or die(mysql_error());
$row_RecPreg1 = mysql_fetch_assoc($RecPreg1);
$totalRows_RecPreg1 = mysql_num_rows($RecPreg1);

if(!empty($_POST['ChkPreg2']))
{
$bLista=array_keys($_POST['ChkPreg2']);
}
mysql_select_db($database_Audito, $Audito);
$query_RecPreg2 = "SELECT * FROM preguntas WHERE PregMaster IN (".implode(',',$bLista).")";
$RecPreg2 = mysql_query($query_RecPreg2, $Audito) or die(mysql_error());
$row_RecPreg2 = mysql_fetch_assoc($RecPreg2);
$totalRows_RecPreg2 = mysql_num_rows($RecPreg2);

if(!empty($_POST['ChkPreg4']))
{
$dLista=array_keys($_POST['ChkPreg4']);
}
mysql_select_db($database_Audito, $Audito);
$query_RecPreg4 = "SELECT * FROM preguntas WHERE PregMaster IN (".implode(',',$dLista).")";
$RecPreg4 = mysql_query($query_RecPreg4, $Audito) or die(mysql_error());
$row_RecPreg4 = mysql_fetch_assoc($RecPreg4);
$totalRows_RecPreg4 = mysql_num_rows($RecPreg4);
?>
</head>
<tr class="Celdas" >
<td width="3%" class="Celdas"><label>
<input name="ChkPreg2a[]" type="checkbox" id="ChkPreg2a[]" value="<?php echo $row_RecPreg1['codigo']; ?>">
</label></td>
<td width="86%" class="Celdas"><?php echo $row_RecPreg1['detalle']; ?>
<input name="pregunta1[]" type="hidden" id="pregunta1[]" value="<?php echo $row_Preg1['detalle']; ?>">
<input name="indicador1[]" type="hidden" id="indicador1[]" value="<?php echo $row_Preg1['indicador']; ?>">
<input name="codcriterio1[]" type="hidden" id="codcriterio1[]" value="<?php echo $row_Preg1['cod_criterio']; ?>"></td>
<td width="11%" class="Celdas2"><a href=""
onClick=
"window.open('prueba4.php?id=<?php echo $row_RecPreg1['indicador'];?>','Soporte','width=400,height=250,left=0,top=0, status=no,toolbar=no')">
<div align="center"><?php echo $row_RecPreg1['indicador']; ?></div></td>
</tr>
<?php } while ($row_RecPreg1 = mysql_fetch_assoc($RecPreg1)); ?>


Y de aki las demás iguales solo cambiar el 1 x 2 o 3 o 4 según sea el lugar
__________________
Buscando el camino...
  #2 (permalink)  
Antiguo 20/11/2007, 04:17
 
Fecha de Ingreso: junio-2002
Mensajes: 261
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: Inconvenientes con consultas en PHP

A ver..no he modificado nada....todo venía funcionando ok, y ahora me sale este error Warning: implode() [function.implode]: Bad arguments. in C:\AppServ\www\Audito\pregauditoria2.php on line 127
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

el cual si cuento las líneas hace referencia a este punto en especial:
$query_RecPreg3 = "SELECT * FROM preguntas WHERE PregMaster IN (".implode(',',$cLista).")";
Q no veo error alguno, así q creería q esta encima de él pero nada tampoco...q puede estar pasando......
__________________
Buscando el camino...
  #3 (permalink)  
Antiguo 20/11/2007, 04:27
Avatar de rasmarko  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 78
Antigüedad: 21 años, 5 meses
Puntos: 1
Re: Inconvenientes con consultas en PHP

talvez $cLista no este recibiendo la informacion correcta del formulario, checalo porque no encuentro otro error. Espera! Es que talvez no mande $_POST['ChkPreg3'] y asi al hacer el if de $clista jamas prohibe la ejecucion de la consulta $RecPreg3. por ello el implode tiene un erroneo argumento porque hace implode a null

te recomiendo que metas dentro del if todas las consultas de mysql asi:
Cita:
if(!empty($_POST['ChkPreg3']))
{

$cLista=array_keys($_POST['ChkPreg3']);

mysql_select_db($database_Audito, $Audito);
$query_RecPreg3 = "SELECT * FROM preguntas WHERE PregMaster IN (".implode(',',$cLista).")";
$RecPreg3 = mysql_query($query_RecPreg3, $Audito) or die(mysql_error());
$row_RecPreg3 = mysql_fetch_assoc($RecPreg3);
$totalRows_RecPreg3 = mysql_num_rows($RecPreg3);

}

if(!empty($_POST['ChkPreg1'])) {

$aLista=array_keys($_POST['ChkPreg1']);

mysql_select_db($database_Audito, $Audito);
$query_RecPreg1 = "SELECT * FROM preguntas WHERE PregMaster IN (".implode(',',$aLista).")";
$RecPreg1 = mysql_query($query_RecPreg1, $Audito) or die(mysql_error());
$row_RecPreg1 = mysql_fetch_assoc($RecPreg1);
$totalRows_RecPreg1 = mysql_num_rows($RecPreg1);

}


....



....
__________________
Fuentes - Diseweb - Frases Célebres
  #4 (permalink)  
Antiguo 20/11/2007, 08:37
 
Fecha de Ingreso: junio-2002
Mensajes: 261
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: Inconvenientes con consultas en PHP

Hola Rasmarko, mira los arreglos no van vacios...los compruebo con un foreach para poder imprimir a través de un echo, lo hice así para verificar eso q me dijiste...y mira q si arroja resultados...ese error es raro...
__________________
Buscando el camino...
  #5 (permalink)  
Antiguo 20/11/2007, 13:31
 
Fecha de Ingreso: junio-2002
Mensajes: 261
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: Inconvenientes con consultas en PHP

Hola Rasmarki de nuevo yo...pues la verdad encerre en el if como dijiste y asunto arreglado...pero aun me asalta la duda x q la zona repetitivas 2,3 y4 me muestran la info de la 1, siendo q tienen recordsets diferentes y q para la generación de esos recordsets uso variables totalmente independientes?
__________________
Buscando el camino...
  #6 (permalink)  
Antiguo 20/11/2007, 20:59
Avatar de rasmarko  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 78
Antigüedad: 21 años, 5 meses
Puntos: 1
Re: Inconvenientes con consultas en PHP

lo que veo es que usas en cada peticion el llamado a la base de datos, es suficiente con una ves, de manera que es posible que por llamarla distintas veces la misma base ocurra el error que dices, prueba poniendo solo una mysql_select_db()

Por otro lado puede deberse a que no usas un mysql_free_result() para liberar la memoria, usala al finalizar cada consulta. Algo asi me imagino:

Cita:

mysql_select_db($database_Audito, $Audito);


if(!empty($_POST['ChkPreg3']))
{

$cLista=array_keys($_POST['ChkPreg3']);


$query_RecPreg3 = "SELECT * FROM preguntas WHERE PregMaster IN (".implode(',',$cLista).")";
$RecPreg3 = mysql_query($query_RecPreg3, $Audito) or die(mysql_error());
$row_RecPreg3 = mysql_fetch_assoc($RecPreg3);
$totalRows_RecPreg3 = mysql_num_rows($RecPreg3);

mysql_free_result($RecPreg3);

}

if(!empty($_POST['ChkPreg1'])) {

$aLista=array_keys($_POST['ChkPreg1']);

$query_RecPreg1 = "SELECT * FROM preguntas WHERE PregMaster IN (".implode(',',$aLista).")";
$RecPreg1 = mysql_query($query_RecPreg1, $Audito) or die(mysql_error());
$row_RecPreg1 = mysql_fetch_assoc($RecPreg1);
$totalRows_RecPreg1 = mysql_num_rows($RecPreg1);

mysql_free_result($RecPreg1);

}


....



....
saludos!
__________________
Fuentes - Diseweb - Frases Célebres
  #7 (permalink)  
Antiguo 20/11/2007, 21:39
 
Fecha de Ingreso: junio-2002
Mensajes: 261
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: Inconvenientes con consultas en PHP

Hola Rasmarko, una duda ....si hago uso de ese mysql_free_result($RecPreg1); más adelante cuadno lo llame en la región repetitiva el $RecPreg1 seguira activo con datos?, estos no se perderan al hacer el free_result?...gracias
__________________
Buscando el camino...
  #8 (permalink)  
Antiguo 21/11/2007, 09:16
 
Fecha de Ingreso: junio-2002
Mensajes: 261
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: Inconvenientes con consultas en PHP

Rasmarko...lo probe y como te dije...si lo pongo donde indicas me genera error en el while ($row_RecPreg1 = mysql_fetch_assoc($RecPreg1)); y solo presenta una pregunta...ahora si lo pongo luego de este while sigue como si nada...me sigue repitiendo en las demas consultas los resultados de la primera sin estar estas relacionadas
__________________
Buscando el camino...
  #9 (permalink)  
Antiguo 21/11/2007, 16:27
 
Fecha de Ingreso: junio-2002
Mensajes: 261
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: Inconvenientes con consultas en PHP

Aún no he logrado resolver esta repetición de datos en consultas totalmente independientes...alguien puede y desea colaborarme...?...Gracias
__________________
Buscando el camino...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:30.