Foros del Web » Programando para Internet » PHP »

Tengo una duda sobre este codigo :-)

Estas en el tema de Tengo una duda sobre este codigo :-) en el foro de PHP en Foros del Web. Bueno estoy siguiendo un vídeo tutorial en http://www.illasaron.com/tele/php.htm voy en el vídeo 3 y te enseñan a hacer un sistema de pedidos(compra) de libros Este ...
  #1 (permalink)  
Antiguo 10/11/2008, 02:30
Avatar de RufioStill  
Fecha de Ingreso: agosto-2008
Mensajes: 24
Antigüedad: 15 años, 8 meses
Puntos: 0
Tengo una duda sobre este codigo :-)

Bueno estoy siguiendo un vídeo tutorial en http://www.illasaron.com/tele/php.htm
voy en el vídeo 3 y te enseñan a hacer un sistema de pedidos(compra) de libros

Este es mi formulario de pedidos:
Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type"
 content="text/html; charset=ISO-8859-1">
<title></title>
</head>
<body>
<form action="comensandophp2.php" method=post>
<table style="text-align: left; width: 347px; height: 105px;"
 border="1" cellpadding="0" cellspacing="0">
  <tbody>
    <tr>
      <td>Tabla de pedidos</td>
    </tr>
    <tr>
      <td>
      <table style="text-align: left; width: 100%;" border="1"
 cellpadding="0" cellspacing="0">
        <tbody>
          <tr>
            <td>Pedido 1</td>
            <td><input name="pedidounoqty" type="text" size="3" maxlength="3"></td>
          </tr>
        </tbody>
      </table>
      <table style="text-align: left; width: 100%;" border="1"
 cellpadding="0" cellspacing="0">
        <tbody>
          <tr>
            <td>Pedido2</td>
            <td><input name="pedidodosqty" type="text" size="3" maxlength="3"></td>
          </tr>
        </tbody>
      </table>
      <table style="text-align: left; width: 100%;" border="1"
 cellpadding="0" cellspacing="0">
        <tbody>
          <tr>
            <td>Pedido3</td>
            <td><input name="pedidotresqty" type="text" size="3" maxlength="3"></td>
          </tr>
        </tbody>
      </table>
      </td>
    </tr>
  </tbody>
</table>
<br>
<form name="form1" method="post" action="">
  <label>Enviar pedido
  <input type="submit" name="Submit" value="Enviar">
  </label>
</form>
<p><br>
</p>
</body>
</html> 
Ese es mi PHP :
Código PHP:
<html>
<head>
    <title>Aprendiendo a Programar PHP</title>
</head>
<body>
<h1>Libreria Online</h1>
<h2>Resumen del pedido</h2>

<?
date_default_timezone_set
('America/Los_Angeles');

echo 
"<p>Orden Procesada.";
echo 
date("H:i ");
echo 
"del dia ";
echo 
date("j ");
echo 
"de ";
echo 
date("F ");
echo 
"del año ";
echo 
date("Y");
echo 
"<br>";
  echo 
$pedidounoqty." Pedidonumerouno<br>";
  echo 
$pedidodosqty." Pedidonumerodos<br>";
  echo 
$pedidotresqty." Pedidonumerotres<br>";
?>

</body>
</html>
Ahora el problema viene aquí, a la hora de enviar el valor de cantidad en el formulario de pedidos no se muestra la cantidad de pedidos, al menos que agregue esta linea

ejemplo:

Código PHP:
$pedidounoqty=$_REQUEST['pedidounoqty']; //Esta linea
echo $pedidounoqty." Pedidonumerouno<br>"
Y en el vídeo tutorial demuestran que se puede hacer con solo esta linea sin ningún problema
Código PHP:
echo $pedidounoqty." Pedidonumerouno<br>"

Ojala me haya dejado entender xP, espero aclarar esta duda y gracias desde ya :)

PD: Recién me estoy iniciando en el mundo del PHP y la verdad me gusta muchísimo

Ah! y otra cosa el vídeo tutorial tiene 4 años de antigüedad, me conviene seguir?

Última edición por RufioStill; 10/11/2008 a las 02:36
  #2 (permalink)  
Antiguo 10/11/2008, 02:50
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Tengo una duda sobre este codigo :-)

Eso es porque tienes desactivada la directiva Register_globals (lo cual está infinitamente mejor que dejarla activada).

Parece ser que en el tutorial ese se da por supuesta que tienes esta directiva, lo que no me parece muy correcto.

Basicamente, con la directiva activada se puede acceder a cualquier variable que esté dentro de uno de esos arrays superglobales ($_POST, $_GET, $_REQUEST, etc...) directamente, lo que puede provocar grandes agujeros de seguridad.

http://es.php.net/register_globals
  #3 (permalink)  
Antiguo 10/11/2008, 03:45
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Tengo una duda sobre este codigo :-)

Otra posibilidad sería utilizar extract para importar de una vez como variables todos los campos definidos en el formulario. Por ejemplo:

Código PHP:
<?php

    extract
$_POST );

    echo 
"<p>Orden Procesada:".date("H:i ")
        . 
"del dia ".date("j ")
        . 
"de ".date("F ")
        . 
"del año ".date("Y")."<br>";
    echo 
$pedidounoqty ." Pedido numero uno<br>";
    echo 
$pedidodosqty ." Pedido numero dos<br>";
    echo 
$pedidotresqty." Pedido numero tres<br>";    
?>
Aunque no es un método muy recomendable y debe usarse con cautela. Yo creo que lo mejor es, como ha indicado Keysher, recuperar el valor de cada control cuando sea necesario.

Y una sugerencia: procura que tus scripts php comiencen siempre con '<?php' en lugar de '<?'. Te asegurarás siempre la compatibilidad con independencia de dónde estés ejecutando tu código. La costumbre de usar la marca corta es un vicio heredado del pasado, pero no es recomendable. Más info: aquí.

(offtopic) Por otro lado, aunque no tenga nada que ver con tu pregunta, otra sugerencia: tu html está mal formado, con etiquetas abiertas sin cerrar y algunas incongruencias, como las tablas anidadas que son innecesarias. Si estás iniciándote, te animo a que aproveches también para procurar que los documentos html que generes se ajusten a los estándares. Por ejemplo:

Código HTML:
<!DOCTYPE HTML PUBLIC 
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/transitional.dtd">

<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
	<title></title>
</head>
<body>
<form name="form1" action="comensandophp2.php" method="post">
<table summary="prueba" style="text-align: left; width: 347px; height: 105px;"
border="1" cellpadding="0" cellspacing="0">
	<tbody>
	<tr>
		<th colspan="2">Tabla de pedidos</th>
	</tr>
	<tr>
		<td>Pedido 1</td>
		<td><input name="pedidounoqty" type="text" size="3" maxlength="3"></td>
	</tr>
	<tr>
		<td>Pedido2</td>
		<td><input name="pedidodosqty" type="text" size="3" maxlength="3"></td>
	</tr>
	<tr>
		<td>Pedido3</td>
		<td><input name="pedidotresqty" type="text" size="3" maxlength="3"></td>
	</tr>
	</tbody>
</table>
<p><br>Enviar pedido
	<input type="submit" name="Submit" value="Enviar">
</p>
</form>
</body>
</html> 
Si comparas este código con el tuyo, comprobarás que hace exactamente lo mismo, pero no produce errores ni advertencias con los validadores.

Un saludo.
  #4 (permalink)  
Antiguo 10/11/2008, 07:14
Avatar de Elokimbeta  
Fecha de Ingreso: octubre-2008
Mensajes: 41
Antigüedad: 15 años, 5 meses
Puntos: 0
Pregunta Respuesta: Tengo una duda sobre este codigo :-)

Cita:
Iniciado por Keysher Ver Mensaje
Eso es porque tienes desactivada la directiva Register_globals (lo cual está infinitamente mejor que dejarla activada).

¿Me puedes explicar porque?
  #5 (permalink)  
Antiguo 10/11/2008, 07:21
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Tengo una duda sobre este codigo :-)

Por varias razones... todas ellas explicadas en el manual. Básicamente, es una directiva que no se peude modificar en tiempo de ejecución (sólo via php.ini o, si lo permite el servidor, a través de .htaccess). Asumir que está en 'on' es malo si se desea compartir después el código que desarrolles, porque desconoces la configuración que tendrá cada cual. Por otro lado, es una característica desechada que será eliminada definitivamente en nuevas versiones de php. Seguir dependiendo de ella es un lastre enorme.

Imagino que habrá además razones de otra índole.

Un saludo.
  #6 (permalink)  
Antiguo 10/11/2008, 12:43
Avatar de RufioStill  
Fecha de Ingreso: agosto-2008
Mensajes: 24
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Tengo una duda sobre este codigo :-)

Gracias por las recomendaciones :D, entonces cual seria la manera mas segura para mostrar las variables?

PD: Que tutoriales me recomiendan? Porque al parecer el vídeo tutorial que sigo no es muy bueno tiene 4 anos de antigüedad :\\ (Ojala exista otro vídeo tutorial)
  #7 (permalink)  
Antiguo 10/11/2008, 12:58
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Tengo una duda sobre este codigo :-)

El problema de tener register_globals activado es que es bastante sencillo falsear una variable de sesión, o que va por Post...

Ese problema se elimina quitando esa directiva. Pero sigue imperando la regla de oro con las variables que se recojan en un script (POST, GET, etc...): hay que validarlo todo! si es un número, hay que asegurarse que es un número, si es un mail hay que validar que sea un mail y si se va a usar en una consulta a una BDD hay que escapar la cadena para evitar la inyección de SQL.
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 12:33.