Regresar a la página www.ComoCrearTuWeb.com
Resultados 1 al 7 de 7

Tema: Como pasar identificadores en un vinculo vacio

  1. #1
    Recien Llegado! Habitante
    Fecha de Ingreso
    15 ago, 13
    Mensajes
    29
    Poder de Reputación
    10

    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.

  2. #2
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,079
    Poder de Reputación
    25
    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
    Código 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):

    Código:
    <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();
    
                // Ocultas el botón para que no se pueda ejecutar más veces.
                $(this).hide();
                var $this = $(this);
    
                // Le quitas el "mostrar-comentarios-" al id para obtener el id de la noticia. También podrías usar un <input type="hidden" />
                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) {
                    // Añade el contenido de comentarios_ajax.php después del botón.
                    $(respuesta).after($(this));
                    // Aquí quitas el enlace para que no lo pueden volver a ejecutar.
                    $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)
    Última edición por skaparate; 17/05/2015 a las 16:49 Razón: Olvidé la URL (lo más importante)

  3. #3
    Recien Llegado! Habitante
    Fecha de Ingreso
    15 ago, 13
    Mensajes
    29
    Poder de Reputación
    10
    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.

  4. #4
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,079
    Poder de Reputación
    25
    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:

    Código PHP:
    <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:

    Código PHP:
    <?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.

  5. #5
    Recien Llegado! Habitante
    Fecha de Ingreso
    15 ago, 13
    Mensajes
    29
    Poder de Reputación
    10
    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.

  6. #6
    Esto empieza a ser un vicio... Habitante Avatar de Doodleo
    Fecha de Ingreso
    25 abr, 11
    Ubicación
    Galicia (España)
    Mensajes
    1,329
    Poder de Reputación
    21
    En el sitio donde pones la frase, como bien dijiste deberías utilizar una condicional, algo así:
    Código PHP:
    <?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.";
    }

    ?>

  7. #7
    Recien Llegado! Habitante
    Fecha de Ingreso
    15 ago, 13
    Mensajes
    29
    Poder de Reputación
    10
    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>"; ?>

Temas Similares

  1. Como vinculo mi dominio .com.ar con mi web
    Por ezequiel2330 en el foro Curso Paso a Paso con Html-Kit.
    Respuestas: 12
    Último Mensaje: 03/11/2009, 18:25
  2. Como le doy vinculo a una foto
    Por Aprendiz en el foro Dreamweaver
    Respuestas: 2
    Último Mensaje: 27/11/2008, 13:48
  3. una vez creado un vinculo como hago para abrir ese vinculo
    Por ricardo holgado en el foro Foro General
    Respuestas: 1
    Último Mensaje: 29/01/2007, 20:34

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •