Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   pasar valor de HTML a PHP (https://www.clubdelphi.com/foros/showthread.php?t=92739)

jhonalone 14-01-2018 23:29:45

pasar valor de HTML a PHP
 
Hola a todos.
intento pasar un valor desde HTML, mediante JavaSccript hasta PHP, para obtener un array de un fichero PHP y utilizarlo en HTML mediante una función de JavaScript.

El valor que obtengo para LOCALIZAR el array de PHP siempre es CERO con el código siguiente:
<html>
<body>

Código PHP:

<?php
if (file_exists("fichero.txt"))
    {       
    
$fa2 file("fichero,txt"); // leemos todo el fichero en un array
    
}
?>


<script>
function Rellenar()
{    
indice = (document.getElementById('Nombres')).selectedIndex;
document.encuesta.Control1.value = indice.toString();
    
<?php
$i3 
= ($_GET["Control1"]);
$i2 intval($i3);

$text2 explode("|",rtrim(utf8_encode($fa2[$i2])));

?>
var datos = [];
 datos=<?php echo json_encode($text2);?>;    //para pasar todo el array a Javascript
.....
.....(El código sigue...)


</Script>

Utilizando la información del array "datos" siempre obtengo el primer registro del array "$fa2"
ya que en "$i2" siempre vale "CERO" (aunque cambie el ítem seleccionado de "(document.getElementById('Nombres')).selectedIndex;" en la lista del <select>

"Nombres" es una lista "select" de HTML
"datos" un array convertido desde una línea de un fichero PHP

Agradecería un poquito de ayuda.
Gracias anticipadas.

Un saludo.

Ñuño Martínez 16-01-2018 14:01:55

A parte de que si no existe el fichero no haces nada (debería, al menos, devolver un mensaje de error) y que acceder directamente a los valores de $_GET es muy mala idea (habría que hacer alguna comprobación de que el dato se recibe y está dentro de lo esperado), parece que el problema es de sintaxis. Asegúrate de que el servidor está en modo depuración y devuelve todos los avisos y mensajes de error, y usa el depurador de tu navegador para ver qué devuelve exactamente en cada petición.

[edito]Acabo de ver dónde está el problema, así que añado la solución: USAR CONSTANTES. A ver si lo pillas. ;)

Tú pones:
Código PHP:

<?php
  
if (file_exists("fichero.txt"))
    {       
    
$fa2 file("fichero,txt"); // leemos todo el fichero en un array
    
}

Yo hubiera puesto
Código PHP:

<?php
   
if (!file_exists ("fichero.txt")) die ('No existe el fichero.txt');
   
$fa2 file("fichero,txt"); // leemos todo el fichero en un array
   
if ($fa2 === FALSE) die ('No pude leer fichero.txt');

Antes de seguir, haz el cambio, tal cual, y mira lo que pasa. ¿Sorprendido? ¿Lo has visto?

La solución que propongo, y que en mi opinión habría que usar siempre, es esta:
Código PHP:

<?php
  define 
('ARCHIVO_DATOS''fichero.txt');

  if (!
file_exists(ARCHIVO_DATOS))
    die (
'<pre>no encuentro el fichero "'.ARCHIVO_DATOS.'".</pre>');
  
$fa2 file(ARCHIVO_DATOS); // <-- Aquí es donde estaba el fallo.
  
if ($fa2 === FALSE// <-- Con esta línea hubieras encontrado el problema.
    
die ('<pre>No pude leer el fichero "'.ARCHIVO_DATOS.'".</pre>');
...
  if (!isset (
$_GET['Control1']))
    die (
'<pre>No recibí nada por el parámetro "Control1".</pre>');
  if (!
is_numeric ($_GET['Control1']))
    die (
'<pre>El parámetro "Control1" debe ser un número.</pre>');
...

Es decir: comprueba los valores siempre.
[/edito]

jhonalone 17-01-2018 14:43:25

¡¡Muchas gracias ñuño!!
A veces... con las prisas nos olvidamos de las "buenas prácticas..."

El fichero existe, pues lo he comprobado vía ftp.

Sospecho que el problema está en la llamada
Código PHP:


$i3 
= ($_GET["Control1"]); 

Porque estoy haciendo la llamada desde la misma página sin recargar.

De todos modos, como mi intención era rellenar los datos de un formulario, con los obtenidos del fichero php y, puesto que no conseguía pasar la variable selectedIndex del <select>, busqué la solución a través de un array desde JavaScript.

La solución ha quedado de la siguiente manera, por si interesa a alguien:

Código PHP:

<script>

// creamos la matriz
function HazArray()
{
 datos = new Array (); 

<?php        
php
  define 
('ARCHIVO_DATOS''fichero.txt');

  if (!
file_exists(ARCHIVO_DATOS)) // Aviso si no encuentra el fichero
    
die ('<pre>no encuentro el fichero "'.ARCHIVO_DATOS.'".</pre>');
  
$fa2 file(ARCHIVO_DATOS); // leemos todo el fichero en un array php
  
if ($fa2 === FALSE// Aviso si no recibió los datos del fichero
    
die ('<pre>No pude leer el fichero "'.ARCHIVO_DATOS.'".</pre>');

    
$size count($fa2);    
    
for(
$i=0$i<$size$i++) 
    {        
    
$fa2[$i] = utf8_encode($fa2[$i]);
    
$text explode("|",rtrim($fa2[$i]));    
    
?>
    
    datos.push(<?php echo json_encode($text);?>);
    
    <?php    
    
}
?>                        
}

//El select queda así
 <select name="Nombres" size="50" id="Nombres" onChange="Rellenar()" > </select>

// Actualizamos los datos del formulario
function Rellenar()
{    
indice = (document.getElementById('Nombres')).selectedIndex;

document.encuesta.item01.value = datos[indice][0];
document.encuesta.item02.value = datos[indice][1];
document.encuesta.item03.value = datos[indice][2];
document.encuesta.item04.value = datos[indice][3];
document.encuesta.item05.value = datos[indice][4];
document.encuesta.item06.value = datos[indice][5];
document.encuesta.item07.value = datos[indice][6];
document.encuesta.item08.value = datos[indice][7];
document.encuesta.item09.value = datos[indice][8];
document.encuesta.MultiText1.value = datos[indice][9];
document.encuesta.MultiText2.value = datos[indice][10];
document.encuesta.MultiText3.value = datos[indice][11];
document.encuesta.email.value = datos[indice][13];
    
}

</script>

Sigo sin saber cómo pasar los datos desde JavaScript o de HTML a PHP en la misma página.
Comprendo que es complicado. Lo intenté con Ajax pero tampoco lo conseguí.
Ahora, (de momento), ya no me preocupa demasiado.

Saludos Ñuño. (Me gusta ésa reivindicación de nuestra Ñ)

Saludos a todos.

Ñuño Martínez 18-01-2018 11:57:31

En realidad el fallo era que la segunda vez que escribes el nombre del archivo utilizaste la coma (,) en vez del punto (.). Un fallo tonto muy común. Por eso recomendé usar constantes, porque así sólo escribes el nombre una vez.

jhonalone 18-01-2018 20:21:07

¡Toda la razón!
Gracias por tener tan buena vista y hacérmelo ver.
En realidad he perdido mucho tiempo con ésto.
Probablemente hubiera funcionado, pero ya que lo tengo resuelto, no voy a dedicarle más tiempo ahora.... quizá en un futuro.
Esta experiencia ha servido para encontrar una segunda alternativa. Quizá más elegante que andar mezclando HTML con JavaScript y con PHP juntos y además revueltos.

Gracias por todo tu esfuerzo y tu disposición de ayudar.
Un cordial saludo.


La franja horaria es GMT +2. Ahora son las 19:12:58.

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