Foros del Web » Programando para Internet » PHP »

¿¿Se puede acceder al DOM desde PHP??

Estas en el tema de ¿¿Se puede acceder al DOM desde PHP?? en el foro de PHP en Foros del Web. Hola, quería plantear una duda que tengo. Me gustaría saber si existe en PHP alguna forma de acceder a los elementos de la página tal ...
  #1 (permalink)  
Antiguo 17/06/2006, 04:09
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 13 años, 1 mes
Puntos: 1
¿¿Se puede acceder al DOM desde PHP??

Hola, quería plantear una duda que tengo.

Me gustaría saber si existe en PHP alguna forma de acceder a los elementos de la página tal y como se puede hacer en javascript.

Por ejemplo, tengo una función que me escribe una tabla con datos en pantalla y me gustaría, desde otra función, cambiar el estilo de una celda en concreto.

Es decir, suponed que tengo una función que me crea una tabla así:
Código:
<table id="tabla">
  <tr id="fila1">
    <td id="celda11">celda 1.1</td>
    <td id="celda12">celda 1.2</td>
  </tr>
  <tr id="fila2">
    <td id="celda21">celda 2.1</td>
    <td id="celda22">celda 2.2</td>
  </tr>
</table>
y desde otra, en el mismo script, me gustaría acceder a una celda concreta para poder modificarla, por ejemplo como lo haría en javascript así:
Código:
document.getElementById("celda22").innerHTML = "fila 2, columna 2"
para que quede así:
Código:
<table id="tabla">
  <tr id="fila1">
    <td id="celda11">celda 1.1</td>
    <td id="celda12">celda 1.2</td>
  </tr>
  <tr id="fila2">
    <td id="celda21">celda 2.1</td>
    <td id="celda22">fila 2, columna 2</td>
  </tr>
</table>
Lo que pretendo es tener separado el código para escribir los datos del código para aplicarle un estilo.

Sabéis alguien si esto es posible?
  #2 (permalink)  
Antiguo 17/06/2006, 14:02
Avatar de elquique  
Fecha de Ingreso: marzo-2004
Ubicación: Florida, Uruguay
Mensajes: 2.495
Antigüedad: 13 años, 8 meses
Puntos: 78
Lo mejor es combinar ambos PHP y JavaScript :)
__________________
Blog Jorge Oyhenard | Tutoriales Photoshop
  #3 (permalink)  
Antiguo 18/06/2006, 13:44
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 13 años, 1 mes
Puntos: 1
Ya, pero fíjate que digo:

Cita:
...tal y como se puede hacer en javascript...
Entonces será que lo se hacer en javascript pero por alguna razón no quiero hacerlo así, no?
  #4 (permalink)  
Antiguo 18/06/2006, 13:51
Avatar de elquique  
Fecha de Ingreso: marzo-2004
Ubicación: Florida, Uruguay
Mensajes: 2.495
Antigüedad: 13 años, 8 meses
Puntos: 78
Entonces sabras que PHP es un lenguaje de servidor y JavaScript no lo es no ?? y de ser asi y si lo sabias para que preguntas ? jaja

Despues que fue desplegado el contenido con PHP no puedes hacer nada ya se fue del server :)
__________________
Blog Jorge Oyhenard | Tutoriales Photoshop
  #5 (permalink)  
Antiguo 18/06/2006, 13:51
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 15 años, 9 meses
Puntos: 771
Hola masterjail

Hasta donde yo sé (que es poco) una vez que la página está "enviada" no puedes hacer nada con PHP para cambiarla.

Saludos,
  #6 (permalink)  
Antiguo 18/06/2006, 18:53
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 13 años, 1 mes
Puntos: 1
A ver...

Supongamos que llamo a una función:
Código:
<?php funcion(); ?>
y esta función hace lo siguiente:
Código:
function funcion(){
  crear_la_tabla_en_HTML();
  poner_colorines_a_la_tabla();
};
La función crear_la_tabla_en_HTML() crea la tabla que indiqué en el primer post.
La función poner_colorines_a_la_tabla() debería asignar un estilo u otro a las celdas dependiendo de valores u otras historias que no vienen a cuento.

Como las dos funciones se ejecutan antes de enviar la página al cliente, pregunto si desde PHP se puede hacer alguna historia con el DOM.

Quizás ahora me haya explicado mejor, pero si pregunto esto es porque se que PHP es un lenguaje de servidor y JavaScript no lo es, y como lo se lo pregunto para ver si se puede hacer de la manera que yo digo.
  #7 (permalink)  
Antiguo 18/06/2006, 23:58
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Sí, sí se puede.
www.php.net/DOM

Sí vaz a trabajar con XML mira tambien la librería simpleXML para PHP5 :-/.

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #8 (permalink)  
Antiguo 19/06/2006, 03:01
 
Fecha de Ingreso: marzo-2006
Ubicación: Pucallpa-Perú
Mensajes: 15
Antigüedad: 11 años, 8 meses
Puntos: 0
Código PHP:
<?
/********************************************/
/*Clase Ficha Personal                        */
/*Autor: Hugo Flores Joseph 2006            /*
/********************************************/

require_once("cDBManager.php");

class 
FormAcademic{

    
//Atributos
    
private $CodFormAcad;//Primary Key (PK)
    
private $Grado;//char(1)
    
private $FechaObtencion;//datetime
    
private $CodFicha;//Foreing Key(FK)
    
private $CodEsp;//Foreing Key(FK)
    
private $CodUniv;//Foreing Key(FK)
    
    //Metodos
    //---------------------------------------------------------------------------
    
public function Correlativo(/*$vCodFicha*/){
        
$vCorre=1;
        
$vCont=1;
        
$sql_query="";
        
$vCeros="";
        
$db=new DBManager('HPFLORESJ','sa','sa','dbescalafon');
        
//En el Caso de que decidamos implementar un indice compuesto PK clustered(CodFicha,CodFormAcad)
        //en la tabla FormAcademic debemos utilizar la siquiente sentencia SQL pasando como 
        //parametro el 'codigo de la ficha'=$vCodFicha al metodo() Correlativo.
        //Ejemplo: $sql_query="SELECT CodFormAcad FROM FormAcademic 
        //WHERE(CodFicha='".$vCodFicha."') ORDER BY CodFormAcad";
        
        
$sql_query="SELECT CodFormAcad FROM FormAcademic ORDER BY CodFormAcad";
        
$rs=$db->execute($sql_query);
        if(
$rs->lastRow()) {
            
$vCorre=intval($rs->fields['CodFormAcad']);//obtengo el valor entero del campo CodUsuario
            
$vCorre++;//se incrementa en 1        
        
}        
        for(
$i=1;$i<(6-strlen($vCorre));$i++){
          
$vCont++;//contador de ceros
        
}
        
$vCeros=str_pad($vCeros,$vCont,'0',STR_PAD_RIGHT);//rellenar de ceros al lado derecho        
        
$rs->close();
        
$db->closeConnection();//opcional
        
return($vCeros.$vCorre);    
    }
//fin Correlativo        
    //---------------------------------------------------------------------------
    
public function BuscarCodigo($vCodFicha,$vCodFormAcad){
        
$resp=false;
        
$num_rows=0;//numero de filas afectada por la consulta        
        
$db=new DBManager('HPFLORESJ','sa','sa','dbescalafon');
        
$Stm=mssql_init("spFormAcad_BC",$db->getHandle());
        if(
$Stm)
        {
            
mssql_bind($Stm,"@vCodFormAcad",$vCodFormAcad,SQLCHAR);
            
mssql_bind($Stm,"@vCodFicha",$vCodFicha,SQLCHAR);
        }else{
               echo
"<font face=verdana size='5'><b>No se puede inicializar el Procedimiento Almacenado.</b></font>";exit();
             }        
        
$result[email protected]mssql_execute($Stm);     
        
$num_rows=mssql_num_rows($result);
        if(
$num_rows>0)
        {    
$resp=true;            
            while (
$row=mssql_fetch_array($result)) {
                
// Coleccion de campos accesible mediante arrays asociativos también
                
$this->CodFormAcad=$row['CodFormAcad'];
                
$this->Grado=$row['Grado'];
                   
$this->FechaObtencion=$row['FechaObtencion'];//datetime
                   
$this->CodFicha=$row['CodFicha'];
                   
$this->CodEsp=$row['CodEsp'];
                   
$this->CodUniv=$row['CodUniv'];
            }
        }
        
$db->closeConnection();//opcional    
        
return $resp;
    }
//fin BescarCodigo
    //---------------------------------------------------------------------------
    
public function Crear($vCodFormAcad,
                        
$vGrado,
                        
$vFechaObtencion,
                        
$vCodFicha,
                        
$vCodEsp,
                        
$vCodUniv)
    {
        
$resp=false;            
        
$db=new DBManager('HPFLORESJ','sa','sa','dbescalafon');
        
$Stm=mssql_init("spFormAcad_A",$db->getHandle());
        if(
$Stm)
        {    
            
$vCodUniv=intval($vCodUniv);//obtengo el valor entero de la variable pasada como char desde el formulario
            
mssql_bind($Stm,"@vCodFormAcad",$vCodFormAcad,SQLCHAR);
            
mssql_bind($Stm,"@vGrado",$vGrado,SQLCHAR);
            
mssql_bind($Stm,"@vFechaObtencion",$vFechaObtencion,SQLCHAR,false,0,8);//paso fecha como char(8) para convertirlo a datetime
            
mssql_bind($Stm,"@vCodFicha",$vCodFicha,SQLCHAR);
            
mssql_bind($Stm,"@vCodEsp",$vCodEsp,SQLCHAR,false,0,2);//char(2)
            
mssql_bind($Stm,"@vCodUniv",$vCodUniv,SQLINT1);//paso como tipo dato smallint al Store Procedure
        
}else{
               echo
"<font face=verdana size='5'><b>No se puede inicializar el Procedimiento Almacenado.</b></font>";exit();
             }            
        
$result[email protected]mssql_execute($Stm);     
        if(
$result)//si es exitosa la consulta               
        
{
          
$resp=true
        }    
        
$db->closeConnection();//opcional cierra el enlace de la Base de Datos     
        
return $resp;    
    }
//fin Crear    
    //---------------------------------------------------------------------------
    
public function Modificar($vCodFormAcad,
                        
$vGrado,
                        
$vFechaObtencion,
                        
$vCodFicha,
                        
$vCodEsp,
                        
$vCodUniv)
    {
        
$resp=false;            
        
$db=new DBManager('HPFLORESJ','sa','sa','dbescalafon');
        
$Stm=mssql_init("spFormAcad_M",$db->getHandle());
        if(
$Stm)
        {    
            
$vCodUniv=intval($vCodUniv);//obtengo el valor entero de la variable pasada como char desde el formulario
            
mssql_bind($Stm,"@vCodFormAcad",$vCodFormAcad,SQLCHAR);
            
mssql_bind($Stm,"@vGrado",$vGrado,SQLCHAR);
            
mssql_bind($Stm,"@vFechaObtencion",$vFechaObtencion,SQLCHAR,false,0,8);//paso fecha como char(8) para convertirlo a datetime
            
mssql_bind($Stm,"@vCodFicha",$vCodFicha,SQLCHAR);
            
mssql_bind($Stm,"@vCodEsp",$vCodEsp,SQLCHAR,false,0,2);//char(2)
            
mssql_bind($Stm,"@vCodUniv",$vCodUniv,SQLINT1);//paso como tipo dato smallint al Store Procedure
        
}else{
               echo
"<font face=verdana size='5'><b>No se puede inicializar el Procedimiento Almacenado.</b></font>";exit();
             }            
        
$result[email protected]mssql_execute($Stm);     
        if(
$result)//si es exitosa la consulta               
        
{
          
$resp=true
        }    
        
$db->closeConnection();//opcional cierra el enlace de la Base de Datos     
        
return $resp;    
    }
//fin Modificar
    //---------------------------------------------------------------------------
    
public function Eliminar($vCodFicha,$vCodFormAcad)
    {
        
$resp=false;        
        
$db=new DBManager('HPFLORESJ','sa','sa','dbescalafon');
        
$Stm=mssql_init("spFormAcad_E",$db->getHandle());
        if(
$Stm)
        {
            
mssql_bind($Stm,"@vCodFicha",$vCodFicha,SQLCHAR);
            
mssql_bind($Stm,"@vCodFormAcad",$vCodFormAcad,SQLCHAR);                    
        }else{
               echo
"<font face=verdana size='5'><b>No se puede inicializar el Procedimiento Almacenado.</b></font>";exit();
             }            
        
$result[email protected]mssql_execute($Stm);     
        if(
$result)//si es exitosa la consulta               
        
{
          
$resp=true
        }        
        
$db->closeConnection();//opcional cierra el enlace de la Base de Datos 
        
return $resp;        
    }
//fin metodo
    //-----------------------------------------------------------------------------    
    
public function ListarFormAcad($vCodFicha)
    {
        
$listaFormAcad=NULL;//Vector que contendra la lista de Especialiadades en el sistema
        
$db=new DBManager('HPFLORESJ','sa','sa','dbescalafon');
        
$Stm=mssql_init("spFormAcad_LT",$db->getHandle());
        if(
$Stm)
        {
              
mssql_bind($Stm,"@vCodFicha",$vCodFicha,SQLCHAR);     
        }else{
               echo
"<font face=verdana size='5'><b>No se puede inicializar el Procedimiento Almacenado.</b></font>";exit();
             }    
        
$result[email protected]mssql_execute($Stm);             
        if(
$result)//si es exitosa la consulta               
        
{
              
$fila=0;
            while(
$row=mssql_fetch_array($result)) 
            {     
                
$listaFormAcad[$fila][0]=$row['CodFormAcad'];
                
$listaFormAcad[$fila][1]=$row['Grado'];
                
$listaFormAcad[$fila][2]=$row['FechaObtencion'];
                
$listaFormAcad[$fila][3]=$row['CodEsp'];
                
$listaFormAcad[$fila][4]=$row['CodUniv'];                
                
$fila++;                
            }
            return 
$listaFormAcad;
        }else return 
NULL;        
        
$db->closeConnection();//opcional cierra el enlace de la Base de Datos     
    
    
}//fin metodo ListarEsp
        
    
    
    
public function getCodFormAcad(){return $this->CodFormAcad;}
    public function 
getGrado(){return $this->Grado;}
    public function 
getFechaObtencion(){return $this->FechaObtencion;} 
    public function 
getCodFicha(){return $this->CodFicha;}
    public function 
getCodEsp(){return $this->CodEsp;}
    public function 
getCodUniv(){return $this->CodUniv;}
}
?>

Última edición por hpfloresj; 19/06/2006 a las 03:35
  #9 (permalink)  
Antiguo 19/06/2006, 10:07
Avatar de elquique  
Fecha de Ingreso: marzo-2004
Ubicación: Florida, Uruguay
Mensajes: 2.495
Antigüedad: 13 años, 8 meses
Puntos: 78
Cita:
Iniciado por masterjail
....

Quizás ahora me haya explicado mejor, pero si pregunto esto es porque se que PHP es un lenguaje de servidor y JavaScript no lo es, y como lo se lo pregunto para ver si se puede hacer de la manera que yo digo.
Si ahora te explicaste mejor y se entiendo que no es algo que deberia hacer luego de desplegada como pense al principio :) pues usas DOM como te han dicho.
__________________
Blog Jorge Oyhenard | Tutoriales Photoshop
  #10 (permalink)  
Antiguo 19/06/2006, 14:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm Y por qué no usan "AJAX" .. que combina: un lenguaje del lado del servidor (PHP, o cualquier otro) + Mucho javascript + otros elementos ...

Te invito a visitar si no lo has hecho ya el foro dedicado por completo a "Ajax" ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 19/06/2006, 18:52
Avatar de elquique  
Fecha de Ingreso: marzo-2004
Ubicación: Florida, Uruguay
Mensajes: 2.495
Antigüedad: 13 años, 8 meses
Puntos: 78
Cluster, para mi seria lo mejor jeje y fue en eso que pense cuando le comente de PHP + Javascript, pero queria solo PHP segun sus comentarios :)

pd: todavia le llamo PHP + Javascript a AJAX jaja me cuesta el termino para no asustarme a mi mismo jaja
__________________
Blog Jorge Oyhenard | Tutoriales Photoshop
  #12 (permalink)  
Antiguo 19/06/2006, 19:56
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 15 años, 8 meses
Puntos: 0
pues totalmente, concuerdo con cluster, ajax me solucionó la vida de una forma muy completa y siguen surgiendo ideas en los desarrollos :D
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-
  #13 (permalink)  
Antiguo 20/06/2006, 06:49
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 13 años, 1 mes
Puntos: 1
Hola de nuevo.

Os comento porque solo quiero usar PHP.

Es porque tengo que hacer un estudio sobre las posibilidades que ofrecen estos lenguajes para desarrollar aplicaciones web.

Primero solo con PHP,
después PHP + JavaScript,
finalmente PHP + JavaScript + llamadas asíncronas al servidor (AJAX).

Gracias por vuestros comentarios
  #14 (permalink)  
Antiguo 20/06/2006, 07:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mmm ... es qué creo que no se puede hacer una comparación así ..

Me refiero a que PHP es un lenguaje del "lado del servidor" .. y siempre estará de la mano de uno del "lado del cliente" sobre todo cuando desarrollamos aplicaciones "web" donde el "cliente" entiene otros lenguajes como HTML, Javascript, y demás lenguajes.

Ahora .. más que "comparación" sería ver que harías sólo con PHP+HTML puro .. y PHP+Javascript u otras técnicas como el uso de todo lo que involucra "Ajax". La primera observación y casi "conclusión" sería que el método PHP+HTML para interactuar .. la mayoría de veces por no decir todas requiere de una "recarga de página" para que sea "PHP" el que "vuelva" a generar la página según tenga que quedar .. si usas PHP+lenguaje del lado del cliente .. según sea las técnicas que usas .. esa "recarga" de página . .o no sucederá o no será tan "drastica" como lo es sólo con PHP+HTML.

A lo que quiero llegar con esto y aclarar (aunque Uds. lo sepan .. es como "cultura general" para el que pueda estar leyendo este tema) es que PHP tan sólo "dá" una salida de sus procesos vía un echo, función equivalente o técnica ... si trabajamos bajo un "cliente" o entorno "web" lo más probable es que usemos como "cliente" un "navegador" y este a su vez entiende cierto tipo de "lenguajes"; lease: javascript, ActiveX, AppletJava, Flash (con su "Action Script" .. etc según corresponda y este tenga instalados sus correspondientes "plug-in" si se requieren.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #15 (permalink)  
Antiguo 20/06/2006, 09:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
Ahora volviendo a tu pregunta, podrias buscar otras formas de accesar a la tabla, por decir, crear un objeto que represente a la tabla, donde sea una estructura PHP, asi puedes buscar la celda que buscas y cambiar los datos mas facil, luego le llamas a un metodo que te devuelva la cadena HTML ya creada a partir de tu estructura.
  #16 (permalink)  
Antiguo 20/06/2006, 16:10
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 13 años, 1 mes
Puntos: 1
Hola Cluster, lo que debo hacer sí es lo que tú comentas, lo que pasa que por acabar rápido usé la palabra "comparación" y listo

En cuanto a la forma de solucionar el problema que me propone GatorV, se me había ocurrido como última posibilidad el implementar una clase a modo de mini-DOM ... así que voy a meterme manos a la obra

Gracias de nuevo.
  #17 (permalink)  
Antiguo 20/06/2006, 18:11
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 13 años, 1 mes
Puntos: 1
Ejem... al final lo estoy haciendo con simpleXML... ¿para qué reinventar la rueda?
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 10:06.