Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Recargar parte de una página

Estas en el tema de Recargar parte de una página en el foro de Frameworks JS en Foros del Web. Hola, el tema es un poco largo, trataré de resumir: Uso php-nuke , y en mi portada tengo un bloque con las últimas respuestas en ...
  #1 (permalink)  
Antiguo 14/02/2007, 17:02
 
Fecha de Ingreso: febrero-2007
Mensajes: 6
Antigüedad: 17 años, 10 meses
Puntos: 0
Recargar parte de una página

Hola, el tema es un poco largo, trataré de resumir:
Uso php-nuke, y en mi portada tengo un bloque con las últimas respuestas en los temas del foro. La cosa está en que pensé en hacerme una opción de actualizar los últimos posts pero sin tener que recargar la página entera (porque la portada es un poco pesada), cosa que se puede hacer con AJAX solamente, según tengo entendido.

Así, me hice dos archivos:

block-Foros.php:

Código PHP:
<?php

if ( !defined('BLOCK_FILE') ) {
    
Header("Location: ../index.php");
    die();
}

global 
$prefix$user_prefix,  $db;


// Función AJAX para actualizar los últimos posts
$content  .= "
<script language=\"javascript\" type=\"text/javascript\">

function getPage(Last_New_Topics){
    var xmlhttp=false; //Clear our fetching variable
        try {
                xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
        } catch (e) {
                try {
                        xmlhttp = new
                        ActiveXObject('Microsoft.XMLHTTP');
            } catch (E) {
                xmlhttp = false;
                        }
        }
        if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
                xmlhttp = new XMLHttpRequest();
        }
        var file = 'blocks/text.php?Last_New_Topics=' + Last_New_Topics;
    xmlhttp.open('GET', file, true);
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4) {
                var content = xmlhttp.responseText;
                if( content ){
                      document.getElementById('content').innerHTML = content;
                }
        }
        }
        xmlhttp.send(null)
return;
}
</script>"
;

// n = numero de posts visualizados
$n $_GET['n'];
$i=false// para cambiar el color de cada celda
$Last_New_Topics 25;
$mensaje "";
if(
is_numeric($n) ){
    if(
$n>100){
        
$Last_New_Topics  100;
        
$mensaje .= "Sólo te podemos mostrar los últimos 100 mensajes<br />";
    }elseif(
$n>0){
        
$Last_New_Topics=$n;
    }
}elseif(!
is_numeric($n) && $n!=""){
    
$mensaje .= "¡No has introducido un número!<br />";
}

// contenido variable
$content.= "
<center><font class=\"revista\">$mensaje Mostrando los últimos $Last_New_Topics mensajes</font></center>
<div id=\"content\">
    <script language=\"javascript\" type=\"text/javascript\">getPage('$Last_New_Topics')</script>
</div>
"
;


// contenido estático
$content  .= "
    <form method=\"get\" id=\"searchform\" action=\"enlace\">
        <center>
            <font class=\"revista\">Mostrar los últimos  
            <input name=\"n\" type=\"text\" style=\"background-color:#000000; border-color:#660000; border-width:1\" id=\"n\" value=\"\" size=\"3\" maxlength=\"3\">mensajes</font>
        </center>
    </form>
    <center>
        <b>
        <a href=\"modules.php?name=Forums\">[Acceder a los foros]</a> | 
        <a href=\"modules.php?name=Forums&amp;file=viewonline\">[Quién está en los foros]</a> |
        <a href=\"modules.php?name=Forums&amp;file=search\">[Buscar]</a> | 
        <a href=\"javascript:getPage('$Last_New_Topics')\">[Actualizar]</a>
        </b>
    </center>
"
;
?>
y éste archivo llama a text.php mediante AJAX:

Código PHP:
<?php
mysql_connect
("localhost""root"""); 
mysql_select_db("lq");

$Last_New_Topics $_GET["Last_New_Topics"];

$Topic_Buffer "";

$result mysql_query("SELECT t.topic_id, t.topic_first_post_id, t.forum_id, t.topic_last_post_id,
        t.topic_title, t.topic_poster, t.topic_views, t.topic_replies, t.topic_moved_id, p.poster_id,
        p.post_time, u.username, l.username, u.user_id, tx.post_text, p.post_username, f.post_username
        FROM nuke_bbtopics AS t
        LEFT JOIN nuke_bbposts AS p ON (p.post_id = t.topic_last_post_id)
        LEFT JOIN nuke_bbposts AS f ON (f.post_id = t.topic_first_post_id)
        LEFT JOIN nuke_bbposts_text AS tx ON (p.post_id = tx.post_id)
        LEFT JOIN nuke_users AS u ON (u.user_id=p.poster_id)
        LEFT JOIN nuke_users AS l ON (l.user_id=t.topic_poster)
        WHERE t.topic_moved_id=0
        ORDER BY t.topic_last_post_id DESC LIMIT 0, $Last_New_Topics
        "
);
while( list( 
$topic_id$postf_id$forum_id$topic_last_post_id$topic_title$topic_poster$topic_views$topic_replies$topic_moved_id$poster_id$post_time$post1$post2$user_id$post_text$guest_name$guest_name2) = $row mysql_fetch_row($result))
{
    
$post_text preg_replace("!(\[(.*?)\])!ise",""$post_text);
    
$post_text substr($post_text,0,200);
    if (
$user_id!=1){
        
$LastPoster "$post1";
    }else{
        
$LastPoster "Anónimo";
    }
    if (
$topic_poster!=1){
        
$OrigPoster "$post2";
        }else{
            
$OrigPoster "Anónimo";
        }
        
$titulo "".htmlspecialchars($post_text)."";
        
$TopicTitleShow "<a class=\"block2\" href=\"modules.php?name=Forums&amp;file=viewtopic&amp;p=$topic_last_post_id#$topic_last_post_id\" style=\"text-decoration: none\" title=\"$titulo\">$topic_title</a>";
        
$i=!$i;
        if(
$i==true){
            
$colorcelda "#000000";
        }else{
$colorcelda "#110000";}
        
$Topic_Buffer .= "
            <tr bgcolor=\"$colorcelda\" onmouseover=\"this.style.background='#440000'\" onmouseout=\"this.style.background='$colorcelda'\">
                <td>&nbsp;$TopicTitleShow</td>
                <td><center><font class=\"block\">$topic_views</font></center></td>
                <td><center><font class=\"block\">$topic_replies</font></center></td>
                <td><center><font class=block>$OrigPoster</font></center></td>
                <td><center><font class=\"block\">$LastPoster</font></center></td>
            </tr>"
;
}
$contenido  "
    <table width=\"100%\" style=\"background-color: #660000; border: 1px solid #FF0000;\" cellspacing=\"1\"  cellpadding=\"1\">
        <tr bgcolor=\"#330000\">
            <td align=\"center\" height=\"18\"><font color=\"#FFFFFF\"><b>Tema</b></font></td>
            <td align=\"center\" ><font color=\"#FFFFFF\"><b>Visual.</b></font></td>
            <td align=\"center\"><font color=\"#FFFFFF\"><b>Resp.</b></font></td>
            <td align=\"center\"><font color=\"#FFFFFF\"><b>Autor</b></font></td>
            <td align=\"center\" width=\"20%\"><font color=\"#FFFFFF\"><b>Autor (última respuesta)</b></font></td>
        </tr>
        $Topic_Buffer
    </table><br/>"
;
$fecha date('H:i:s'time() );
echo 
"$contenido <center><small>[Actualizado a las $fecha]</small></center><br />";


 
?>
Pues bien, todo esto me funciona perfectamente, no me preguntéis como
El problema lo tengo en la conexión a la BD MySQL que tengo que hacer en el 2º archivo, algún hacker no creo que tenga problemas para ver esa conexión.

Las conexiones en el nuke se hacen a través de la variable $db, pero al intentar pasarla al 2º archivo por el método GET, el script no se ejecuta. En cambio, si trato de pasarle otras variables globales, no tengo ningún problema.

Vosotros sabéis cómo debo hacerlo???

Joe, llevo ya varios días así y nada. Estoy cada vez peor.

Última edición por latinquasar; 14/02/2007 a las 17:14 Razón: Corrección de código
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 04:10.