Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-05-2003
Avatar de aom
aom aom is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 106
Poder: 22
aom Va por buen camino
Obtener lista de elementos de un form

Hola foro,
necesito obtener la lista de los elementos de un formulario (el "document.forms[x].elements" de javacript), pero no encuentro la forma de hacerlo en php. Es posible?

Gracias
Responder Con Cita
  #2  
Antiguo 23-05-2003
Avatar de JavierB
JavierB JavierB is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 99
Poder: 22
JavierB Va por buen camino
Hola, aom.

En este ejemplo se añade el nombre de todos los componentes en un ListBox:
Código PHP:
  for I:=0 to ComponentCount-do
    
ListBox1.Items.Add(TComponent(Components[i]).Name); 
Saludos,
__________________
Lo importante no es saber, sino tener el e-mail del que sabe.
Responder Con Cita
  #3  
Antiguo 23-05-2003
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
Ese ejemplo no aplica para PHP

Mira a ver si te sirve la funcion each (en ASP, se hacia facil con un for each item in request.form), asi que debe ser equivalente.
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #4  
Antiguo 23-05-2003
Avatar de JavierB
JavierB JavierB is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 99
Poder: 22
JavierB Va por buen camino
¡Oops!

Siempre miro los mensajes desde la opción "mensajes nuevos" y no me di cuenta que este era del Foro de PHP. Siento no poder ayudar en esto, yo en PHP estoy muy escasito.

Saludos,
__________________
Lo importante no es saber, sino tener el e-mail del que sabe.
Responder Con Cita
  #5  
Antiguo 26-05-2003
Avatar de aom
aom aom is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 106
Poder: 22
aom Va por buen camino
Hola,
gracias por contestar (a los 2 )
La función each en php no funciona igual que en asp. He estado revisando la documentación en Internet pero sigo sin ver la forma de hacerlo. Se le ocurre a alguien?

Gracias
Responder Con Cita
  #6  
Antiguo 26-05-2003
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
Hola

Depende del metodo que utilices para mandar el formulario (POST o GET) debes consultar los Arrays:
- $PHP_POST_VARS (o $_POST ) para el metodo POST.
- $PHP_GET_VARS ( o $_GET ) para el metodo GET.

Como indice del array tienes el nombre del campo del formulario y como valor el valor del mismo campo.

Con el siguiente codigo obtendrias el nombre del campo y su valor en el caso del metodo POST:
<?
...
foreach( $PHP_POST_VARS AS $k => $v ) {
echo "$k => $v<br>";
}
...
?>
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente

Última edición por kayetano fecha: 26-05-2003 a las 11:30:09.
Responder Con Cita
  #7  
Antiguo 26-05-2003
Avatar de aom
aom aom is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 106
Poder: 22
aom Va por buen camino
Hola Kayetano, gracias por responder.
Tu solución no me sirve para lo que necesito hacer. Te explico:

Estoy haciendo un formulario donde el cliente indica un nº de serie de una máquina. Lo que quiero hacer es simular un campo calculado de Delphi, y cuando indique el número de serie rellenar una serie de campos con información sobre este equipo. Si abro una segunda ventana si que se devolver unos valores a unos campos mediante JavaScript (docuent.forms[x].elements[NombreCampo]), pero aquí de momento no lo quiero hacer así.

Espero haberme explicado bien,
gracias por la ayuda
Responder Con Cita
  #8  
Antiguo 26-05-2003
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
Hola

Vayamos por partes.

El PHP se ejecuta en el servidor y no en el cliente por lo que para que puedas tratar cualquier formulario en PHP hay que mandarlo al servidor y que este lo interprete.

Por lo tanto lo que tu pides se hace algo complicado.

Yo te plantearia varias soluciones:

- Recargar la pagina: Si cada vez que seleccionas un articulo recargas la pagina podras dar las caracteristicas del articulo. Este sistema hace que la pagina se haga muy lenta y empachosa.

- Usar frames: en uno muestras el formulario y en otro (que se debe recargar cuando se selecciona un producto) muestras las especificaciones del producto.
En mi opinion la mas facil de programar pero no de diseñar, no me gustan los diseños con frames

- Usar iframes: Lo mismo que el caso anterior pero con IFRAME. IFRAME es incompatible con NETSCAPE ( usa ILAYER).

- Trabajar con la propiedad innerHTML de cualquier objeto. Con este metodo te puedes quedar con la peña esta muy bien pero solo es compatible con Explorer. Ademas es un poco rollo ( a menos como yo lo hago )

El orden de las opciones es el que te aconsejo, de mas facil a mas dificil. Si te interesa la tercera opcion me lo haces saber y te lo explico.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #9  
Antiguo 26-05-2003
Avatar de aom
aom aom is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 106
Poder: 22
aom Va por buen camino
Hola Kayetano,
me puedes explicar que es el innerHTML?

Otra opción es abrir una ventana (¿puede ser invisible?) donde ejecute la sentencia sql para el nº de serie que me den, cerrarla automáticamente y devolver los valores, pero creo q es un poco chapuza y de momento busco otras soluciones.

Gracias
Responder Con Cita
  #10  
Antiguo 26-05-2003
Avatar de Emilio
*Emilio* Emilio is offline
Capo
 
Registrado: may 2003
Ubicación: Palma de Mallorca
Posts: 2.635
Poder: 10
Emilio Va por buen camino
Hola, he leido un par de veces tu pregunta y creo entender que lo que pretendes es que al introducir un valor (número de serie) en
uno de los campos de tu formulario se muestre en la celda de al lado el nombre de la máquina que corresponde a ese número de serie.

Si lo he entendido bien, yo eso lo hago abriendo una ventana que contiene un formulario de búsqueda, seleccionando el registro
que y devolviendo los valores, pero como parece ser que no quieres abrir ventanas, pudes hacerlo, aprovechando el evento OnChange
de los INPUT, OnBlur también te serviría pero tenemos que quedarnos con alguno

Lo primero es crear tu formulario.
Código PHP:
//formulario.php

<form name="bla bla.....>
    <input onChange="vertexto(this.name,this.value)" type="text" name="serie" value="<? echo trim($objeto->num_serie); ?>>
    <input onChange="vertexto(this.name,this.value)" type="text" name="otro_campo" value="<? echo trim($objeto->otro_campo); ?>>
    <input onChange="vertexto(this.name,this.value)" type="text" name="otro_mas" value="<? echo trim($objeto->otro_mas); ?>>

    <table width="100%" border="0"><tr>
    <td width="33%"><span id="span_serie"><? echo trim($objeto->num_serie); ?></span></td>
    <td width="33%"><span id="span_otro_campo"><? echo trim($objeto->otro_campo); ?></span></td>
    <td width="34%"><span id="span_otro_mas"><? echo trim($objeto->otro_mas); ?></span></td>
    </tr></table>
Aquí un botón tipo submit, a mi no me gusta usarlos para intranet, en su lugar capturo la tecla enter haciéndola pasar por
una función a la cual seteo las variables que necesite y por ultimo hago un form.submit();

Nota: que no te confunda $objeto->num_serie con el resultado de una query, $objeto se supone que previamente lo hemos creado
con $objeto New MiClase(); si no usas clases cambia $objeto->num_serie por $num_serie a pelo.

</form>

A continuación metemos un IFRAME, (ya te comentan por ahí que el IFRAME sólo funciona con IE, pero si es para Intranet no
creo que eso sea un problema.
Código PHP:
<IFRAME SCROLLING="NO" leftmargin="0" topmargin="0" marginwidth="0"
    
style="visibility: visible" name="idFrame"
    
width="100%" height="0" src="chivato.php">
</
IFRAME
como ves le damos una altura de cero y así no se verá en el formulario.
Código PHP:
<script>
function 
vertexto(campo,valor) {
    switch (
campo)  {
        case 
"serie"idFrame.location.href="chivato.php?serie="+valor; break;
        case 
"otro_campo"idFrame.location.href="chivato.php?otro_campo="+valor; break;
        case 
"otro_mas"idFrame.location.href="chivato.php?otro_mas="+valor; break;
    }
}
</script> 
Por último hacemos esta pequeña función en JavaScript que llamará al fichero chivato.php pasando una variable con un determinado valor,
que a su vez es llamada por el IFRAME.

// Fin formulario.php


// Inicio chivato.php

Este fichero será el que escribirá en en innerText de tus span.
Código PHP:
<?
    
if ( isset($HTTP_GET_VARS["serie"] )        { $SQL="SELECT * FROM tabla WHERE serie=$serie"$span="span_serie"; }
    if ( isset(
$HTTP_GET_VARS["otro_campo"] )   { $SQL="SELECT * FROM tabla WHERE otro_campo=$otro_campo"$span="span_otro_campo"; }
    if ( isset(
$HTTP_GET_VARS["otro_mas"] )     { $SQL="SELECT * FROM tabla WHERE otro_mas=$otro_mas"$span="span_otro_mas"; }
    
Esto se puede hacer de forma más elegante pero ya me estoy alargando en la respuesta.

    
$result mysql_query($SQL);
    
$registro mysql_fetch_array($result);

?>
<SCRIPT>
    parent.<? echo $span?>.innerText='<? echo $registro["NOMBRE"]; ?>';
</SCRIPT>
Y por último este miniscript es el que escribe el texto correspondiente a la máquina del número de serie introducido.

// Fin chivato.php

Espero que te sirva.

Saludos
Emilio.
Responder Con Cita
  #11  
Antiguo 27-05-2003
Avatar de aom
aom aom is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 106
Poder: 22
aom Va por buen camino
Hola Emilio,
de hecho si que estoy utilizando ventanas de búsqueda, pero cuando el usuario pulsa un botón. Si ya conoce el número de serie quiero que haga el efecto de un campo calculado.
Probaré tu solución, aunque parece que es perfecto para lo que quiero.

Muchas gracias por la ayuda
Responder Con Cita
  #12  
Antiguo 27-05-2003
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
Hola

Aqui va un pequeño ejemplo de como puedes utilizar el innerHTML

Código PHP:
//-----------------------------------------
//            contendio.html
//-----------------------------------------
<html>
<
head>
<
title>Untitled</title>

<
script language="JavaScript1.2" id="script"></script>

</head>
<body>
<span id="tabla"><p>&nbsp;</p></span> <!-- ZONA DINAMICA -->
<input type="button" value="Prueba" onclick="script.src = 'include_script_js.php';"
</body>
</html>
//------------------------------------------



//-----------------------------------------
//        include_script_js.php
//-----------------------------------------
    var str = "";
    str += "<p>Esto se ejecuta en el servidor y puedes hacer lo que quieras</p>";
    
    tabla.innerHTML = str; 
En include_script_js.php puedes hacer lo que quieras, pero lo importante es que al final lo guardes todo como una cadena de texto "str" y se la asignes a la propiedad innerHTML de nuestra zona dinamica.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #13  
Antiguo 27-05-2003
Avatar de aom
aom aom is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 106
Poder: 22
aom Va por buen camino
Hola Kayetano,
tu solución del innerHTML es perfecta, pero necesito pasarle como parámetro el valor del nº de serie. Es posible?

Gracias
Responder Con Cita
  #14  
Antiguo 27-05-2003
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
Hola

No problem.

Con javascript obtienes el valor del desplegable, donde seleccionas el articulo, con el evento "onchange" y lo pasa como GET.
Código:
<select onchange="valor=this.value">
...
</select>
La variable "valor" debe estar inicializada al principio y como global.

Código:
<input type="button" value="Prueba" onclick="script.src = 'include_script_js.php?id='+valor;"
Si quieres puedes crear una funcion que llame el evento onclick del boton y capture el valor del desplegable y carge el "script", creo que sera mas claro el codigo resultante.
¡¡ ESTE CODIGO NO ESTA PROBADO !! Simplemente es un pequeño ejemplo orientativo.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #15  
Antiguo 27-05-2003
Avatar de aom
aom aom is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 106
Poder: 22
aom Va por buen camino
Hola Kayetano,
he estado probando el código y funciona perfectamente.

Muchas gracias por todo
Responder Con Cita
  #16  
Antiguo 27-05-2003
Avatar de Emilio
*Emilio* Emilio is offline
Capo
 
Registrado: may 2003
Ubicación: Palma de Mallorca
Posts: 2.635
Poder: 10
Emilio Va por buen camino
Hola

Kayetano, en esta ocasión debo decir que me parece realmente ingenioso el tema de tu include_script_js.php si no tiene copyright by Kayetano igual hasta lo uso para alguna que otra cosilla

Saludos
Emilio
Responder Con Cita
  #17  
Antiguo 28-05-2003
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
Gracias, y por supuesto puedes usarlo cuando quieras.

¡¡ IMPORTANTE !!
Este script es compatible con EXPLORER y a partir de su version 5.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 00:38:43.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi