Versión imprimible del tema: Javascript y php
URL: https://soporte.miarroba.es/152498/9634041-javascript-y-php/

De la comunidad de foros: Foro de soporte
URL: https://soporte.miarroba.es


Autor: Reina_Maab, 12/Nov/2010, 01:22


¡Buenas noches!

Mi página web se basa mayormente en una tabla. En ella, tengo una serie de vínculos que, al ser pulsados, lanzan una Lightbox donde pretendo cargar los resultados de una consulta a la base de datos. Puesto que quiero mantener el código lo más sencillo posible para mí, que no tengo mucha experiencia en programación web, para hacerlo opté por un método algo rústico que combina css y javascript, y obtuve la siguiente línea de código:

Código:
$html = $html. "<td><b><a href = javascript:void(0) onclick =document.getElementById('blanco').style.display='block';document.getElementById('degradado').style.display='block'>".$row["funcion"]."</a></b>
                <div id=blanco class="recuadro_blanco">".$row['comentario']."<p><a href = javascript:void(0) onclick =document.getElementById('blanco').style.display='none';document.getElementById('degradado').style.display='none'>Cerrar</a></div>
                <div id=degradado class="recuadro_degradado"></div>
                </td>";

El caso es que, si bien la parte estética funciona perfectamente, siempre me carga el mismo registro en la Lightbox. Es como si $row['comentario'] sólo devolviera el primer resultado, pero he probado a imprimir $row['comentario'] con echo y devuelve todos los registros deseados, por lo que creo que el problema está en la parte de Javascript. Es como si sólo fuera capaz de reconocer un registro, y no los demás. ¿Hay alguna forma de solucionarlo? Había pensado que tal vez lo que necesita es una lista con los resultados de $row['comentario'] para poder funcionar, pero entonces no se me ocurre cómo hacer que sepa qué registro de los que le pasa $row['comentario'] tiene que mostrar para cada vínculo. ¿Alguien tiene alguna sugerencia? Si no, seguro qeu hay métodos más apropiados para lanzar una Lightbox y que no provoquen este problema ¿Alguna recomendación?

Muchas gracias.


Autor: Reina_Maab, 13/Nov/2010, 16:09


He seguido dándole vueltas al asunto y probado a crear una función que hiciera lo mismo y cargara los resultados deseados, lejos de la parte de JavaScript:

Código nuevo:
$html = $html. "<td><b><a href = javascript:void(0) onclick =document.getElementById('light').style.display='block';document.getElementById('fade').style.display='block'>".$row["funcion"]."</a></b><div id=light class="white_content">";
        $html = $html. devolver("select comentario from funcion where funcion.cod_prin =".$row["cod_prin"]);
        $html = $html. "<p><a href = javascript:void(0) onclick =document.getElementById('light').style.display='none';document.getElementById('fade').style.display='none'>Cerrar</a></div>
                <div id=fade class="black_overlay"></div>
                </td>";
Código de la función:
function devolver($consulta) {
    $sentencia = consultar($consulta);
    while($row = mysql_fetch_array($sentencia)){
    $html = $html.$row["comentario"];}
    return $html;
}

Pero me sigue pasando exactamente lo mismo. He probado a hacer echo tanto de la consulta como de $row a todas las alturas de la función posibles y devuelve los resultados correctos; sólo $html.$row["comentario"] se gripa en el primer resultado. También he probado la función "devolver" sola y me devuelve correctamente todos los registros. ¿Por qué no cuando se la llama para cargar los resultados en la Lightbox? ¿Es que no puede haber elementos distintos con la misma id? ¿Es que la cuenta se reinicia cada vez?

Verdaderamente no entiendo qué pasa. ¿Alguien podría orientarme? Gracias.


Autor: Reina_Maab, 13/Nov/2010, 17:29


Hala, ya no hace falta que respondáis. Al final era lo de las id.

Código:
$html = $html. "<td><b><a href = javascript:void(0)
onclick
=document.getElementById('".$row["cod_prin"]."').style.display='block';document.getElementById('fade').style.display='block'>".$row["funcion"]."</a></b><div
id=".$row["cod_prin"]." class="white_content">";
$html = $html. devolver("select comentario from funcion where funcion.cod_prin =".$row["cod_prin"]);
$html
= $html. "<p><a href = javascript:void(0) onclick
=document.getElementById('".$row["cod_prin"]."').style.display='none';document.getElementById('fade').style.display='none'>Cerrar</a></div>
<div id=fade class="black_overlay"></div>
</td>";