Como pasar identificadores en un vinculo vacio

Hola,

Tengo un vinculo de una página que me lleva a otra mediante identificadores, este es el código:

<p><a href="blogShowCom.php?Id=<?php echo $row_blgvista['IdEntr']; ?>">Ver comentarios</a></p>

Pero yo quiero que en lugar de abrir otra página, abra y expanda un div por jquery, y el código requerido es este:

<p><a href="#" Id="abrir_comentarios">Ver comentarios</a></p> y más código de la función jquery.

Pregunto, si <a href="#" es un vinculo vacío, ¿Cómo le puedo enviar los parámetros identificadores para que me abra la capa correcta del juego de registros?

No consigo encontrar la respuesta. Gracias.
Hola!

Tienes que utilizar AJAX. De manera asíncrona puedes obtener los comentarios que quieres, aunque todo dependerá de ti. Si saber cómo está estructurado tu contenido, yo haría esto:

comentarios_ajax.php
<?php
$id = $_POST['id'];
$sql = "SELECT * FROM comentario WHERE noticia_id = $id"; // No deberías pasar el id como lo hice yo, pues te arriesgas a una inyección SQL. Usa SQL parametrizado.
$result = mysqli_query ($conexion, $sql); // $conexion es la conexión a la base de datos, usando mysqli_connect()
$output = "";

if ($result)
{
    $output = "<div id='comentarios'>";
    // Aquí debes formatear el resultado como HTML, tal cual quieres que aparezca en el div.
    while (($row = mysqli_fetch_assoc ($result)))
    {
        $output .= "<div id='comentario-$row[id]'>
    <div class='comentario-header'>
        <h4>$row[title]</h4>
        <p class='comentario-autor'>Autor: $row[nombre_autor]</p>
    </div><!-- .comentario-header -->
    <div class='contenido-comentario'>$row[contenido]</div>
</div><!-- #comentario-$row[id] -->";
    }

    $output .= "</div><!-- #comentarios -->";
}

mysqli_close ($conexion);
echo $output;

Luego con Ajax puedes hacer esto (usando jQuery):

<a href="#" id="mostrar-comentarios-1" class="mostrar-comentarios">Mostrar Comentarios</a><!-- El 1 es el id de la noticia -->
<script>
    jQuery(document).ready(function($) {
        $('.mostrar-comentarios').on('click', function(e) {
            e.preventDefault();

            [COLOR="#FF8C00"]// Ocultas el botón para que no se pueda ejecutar más veces.[/COLOR]
            $(this).hide();
            var $this = $(this);

            [COLOR="#FF8C00"]// Le quitas el "mostrar-comentarios-" al id para obtener el id de la noticia. También podrías usar un <input type="hidden" />[/COLOR]
            var identificador = $(this).attr('id').replace('mostrar-comentarios-', '');

            $.ajax({
                method: 'post',
                data: { id: identificador },
                dataType: 'html',
                url: 'comentarios_ajax.php'
            })
            .done(function(respuesta, codigo, obj) {
                [COLOR="#FF8C00"]// Añade el contenido de comentarios_ajax.php después del botón.[/COLOR]
                $(respuesta).after($(this));
                [COLOR="#FF8C00"]// Aquí quitas el enlace para que no lo pueden volver a ejecutar.[/COLOR]
                $this.remove();
            });
        });
    });
</script>

No lo he probado, pero debería funcionar (no estoy seguro de los nombres de las funciones... hace tiempo que no uso jQuery.ajax :P)
Hola!
Como siempre muchísimas gracias por tu respuesta tan rápida.
Amplio un poco más la información que di, puesto que en alguna cosa me pierdo. Desde la página index.php tengo un listado de noticias y debajo de cada una sale el numero de comentarios relacionado, al hacer clic en el vinculo me lleva a otra página donde muestra la relación de comentarios. Los códigos de una y otra son:
<p><a href="blogShowCom.php?Idcomentarios=<?php echo $row_blgvista['IdEntr']; ?>">Ver comentarios: <?php echo $row_blgvista['ComCom']; ?>
$id = $_GET['Idcomentarios'];
mysql_select_db($database_connecata, $connecata);
$query_blogshowCom = "SELECT * FROM bdblogcoment WHERE bdblogcoment.IdEntr = $id AND bdblogcoment.intValidacion = 1 ORDER BY bdblogcoment.datFecha DESC";
$blogshowCom = mysql_query($query_blogshowCom, $connecata) or die(mysql_error());
$row_blogshowCom = mysql_fetch_assoc($blogshowCom);
$totalRows_blogshowCom = mysql_num_rows($blogshowCom);
?>
<?php do { ?>
<?php echo $row_blogshowCom['strComentario']; ?></br>
<?php echo $row_blogshowCom['strNombre']; ?> <?php echo $row_blogshowCom['datFecha']; ?></br><hr/>
<?php } while ($row_blogshowCom = mysql_fetch_assoc($blogshowCom)); ?>
<?php
mysql_free_result($blogshowCom);
?>

Teniendo en cuenta que esta segunda página no tiene que existir, y en su lugar ha de haber un div con el atributo display: none ¿Donde debo poner todo este código del segundo bloque?

Luego, ¿En que lugares tengo que situar este código que has indicado? Tanto el php, como el html.

Una cosa más, la conexión la establezco al principio de la página con un require once.

Disculpa si hago alguna pregunta obvia en su respuesta, pero puedo decir que partiendo de un conocimiento 0 absoluto en php, en pocos meses estoy sorprendido de lo que he hecho.

Saludos.
Modifiqué mi respuesta anterior porque me di cuenta de que habían algunos errores, así que lee nuevamente :P.

¿Donde debo poner todo este código del segundo bloque?

Tu código puede ir en cualquier archivo, lo importante es que pongas el nombre (y la ruta) del archivo en la url de $.ajax({}) (que olvidé pero que acabo de añadir en mi comentario anterior). En mi ejemplo anterior, el archivo se llama comentarios_ajax.php.

El <script> puede ir donde quieras, siempre y cuando aparezca después de la librería jQuery, o sea, puede ir en el head, en el body o cualquier otro lugar (y no lo debes repetir, basta con incluirlo una sola vez).

Al momento de mostrar los enlaces, tendrías que hacer esto:

<p><a href="#" id="mostrar-comentarios-<?php echo $row_blgvista['IdEntr']; ?>" class="mostrar-comentarios">Ver comentarios: <?php echo $row_blgvista['ComCom']; ?></a></p>

Teóricamente, sólo debes copiar el contenido de tu archivo.php (el que muestra los comentarios) en un archivo llamado comentarios_ajax.php, modificar tu index.php para incluir el script y el enlace como lo acabo de escribir y listo, ya debería estar funcionando.

El require_once quedará al comienzo de tu archivo, igual que ahora. Lo importante es que en lugar de usar un echo por cada columna de la fila ($row_blogshowCom) debes mostrar el contenido de una sola vez, eliminando todo el HTML de tu archivo de comentarios:

<?php
require_once "tu conexion";
$id = $_POST["id"];
mysql_select_db ($database_connecata, $connecata);
$query_blogshowCom = "SELECT * FROM bdblogcoment WHERE bdblogcoment.IdEntr = $id AND bdblogcoment.intValidacion = 1 ORDER BY bdblogcoment.datFecha DESC";
$blogshowCom = mysql_query ($query_blogshowCom, $connecata) or die(mysql_error());
$row_blogshowCom = mysql_fetch_assoc($blogshowCom);
$totalRows_blogshowCom = mysql_num_rows($blogshowCom);
$out = "<div class='comentarios'>";

while (($row_blogshowCom = mysql_fetch_assoc ($blogshowCom))) {
$out .= $row_blogshowCom['strComentario'];
$out .= $row_blogshowCom['strNombre'];
$out .= $row_blogshowCom['datFecha'];
}

$out .= "</div>";

mysql_free_result($blogshowCom);

echo $out; // La idea es que sólo exista un echo y no varios.
?>

El do { } while(); esta mal, puesto que este siempre se ejecuta al menos una vez, por lo que si no hay comentarios ocurrirá una advertencia o error (no recuerdo :P).

Otra forma de hacerlo sería usando ob_start y ob_flush (funciones de php), pero te lo dejaré como tarea por si te interesa :P.
Hola.
Estoy trabajando en todo lo indicado, y poco a poco voy progresando. Espero ir solucionando todo lo que suponga un obstáculo.

En cuanto a lo comentado del do ... while, quisiera preguntar si se podría solucionar, que donde aparezca "Ver comentarios: 0", que se sustituya por "No hay comentarios". Sobre el papel supongo que es fácil, ya que creo que se soluciona con un if ... else, pero ¿Como y donde habría que ponerlo? De esta forma, quizás evitaría la advertencia de error.

Un saludo y muchas gracias a ti y a todos los que intervienen en el foro, porque aquí se aprende mucho.
En el sitio donde pones la frase, como bien dijiste deberías utilizar una condicional, algo así:
<?php

$comments_num = "10"; // Imaginando que aquí es donde se almacena el número de comentarios totales (en tu caso los deberías extraer de la base de datos)

if($comments > 0){
  echo "Ver comentarios: " . $comments_num;
} else {
  echo "No hay ningún comentario.";
}

?>
Gracias a todos los que habéis colaborado ya lo tengo todo casi resuelto. He variado alguna cosa ya que no me gustaba como quedaba. Funciona todo bien, pero hay un pequeño problema en el código php que muestra todo el contenido de una sola vez, puesto que de cada noticia no muestra el primer comentario, supongo que algo del código de la consulta no estará bien. Lo copio debajo tal como ha quedado ahora.

<?php
do { ?>
<?php $num = $row_blgvista['IdEntr']; ?>
<?php mysql_select_db ($database_connecata, $connecata);
$query_blogshowCom = "SELECT * FROM bdblogcoment WHERE bdblogcoment.IdEntr = $num AND bdblogcoment.intValidacion = 1 ORDER BY bdblogcoment.datFecha DESC";
$blogshowCom = mysql_query ($query_blogshowCom, $connecata) or die(mysql_error());
$row_blogshowCom = mysql_fetch_assoc($blogshowCom);
$totalRows_blogshowCom = mysql_num_rows($blogshowCom);
$out = "<div class='comentarios'>";

while (($row_blogshowCom = mysql_fetch_assoc ($blogshowCom))) {
$out .= $row_blogshowCom['strComentario'].'<br/>';
$out .= $row_blogshowCom['strNombre'].'&nbsp; &nbsp; &nbsp;';
$out .= $row_blogshowCom['datData'].'<hr />'.'<br/>';
}

$out .= "</div>"; ?>