UTNianos

Versión completa: [PHP] Control de productos
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Para ir familiarizandome con PHP, realize un script demasiado sencillo con MySQL, que es mas que nada para un control de precios. Tiene varias páginas, en la página principal (pagina1.php), se muestra: Un formulario para agregar un nuevo producto, otro formulario para ingresar el nombre de un producto y ver su precio y al final un listado con todos los productos registrados. Les dejo los codes de cada página, si me pueden dar opiniones o consejos para mejorar, sería genial =)

pagina1.php


<html>
<head>
<title>Control de productos - Pagina Principal</title>
</head>
<body>
<h1>Control de Productos</h1>
<hr>
<br>
<form action="registro.php" method="post">
Nombre del producto:
<input type="text" name="nombre"><br>
Precio:
<input type="text" name="precio"><br>
<br>
<input type="submit" value="Registrar">
</form>
<br>
<hr>
<h1>Consulta de un producto</h1>
<hr>
<br>
<form action="consulta.php" method="post">
Ingrese el nombre del producto a consultar:
<input type="text" name="nombre"><br>
<br>
<input type="submit" value="Consultar">
</form>
<br>
<hr>
<h1>Todos los productos</h1>
<hr>
<br>
<?php
$conexion=mysql_connect("localhost","root","")
or die("Problemas en la conexion");

mysql_select_db("base1",$conexion)
or die("Problemas en la selección de la base de datos");

$registros=mysql_query("select nombre,precio
from productos",$conexion) or
die("Problemas en el select:".mysql_error());

while ($reg=mysql_fetch_array($registros))
{
echo "<b><u>Producto:</u></b>".$reg['nombre']."<br>";
echo "<b><u>Precio:</u></b>".$reg['precio']."<br>";
echo "<br>";
echo "<hr>";
}
mysql_close($conexion);
?>
</body>
</html>


registro.php


<html>
<head>
<title>Alta de un producto</title>
</head>
<body>
<h1>Alta de un producto</h1>
<hr>
<br>
<?php
$conexion=mysql_connect("localhost","root","")
or die("Problemas en la conexion");
mysql_select_db("base1",$conexion) or
die("Problemas en la seleccion de la base de datos");
mysql_query("insert into productos(nombre,precio) values
('$_REQUEST[nombre]','$_REQUEST[precio]')",
$conexion) or die("Problemas en el select".mysql_error());
mysql_close($conexion);
echo "El producto fue agregado satisfactoriamente";
?>
</body>
</html>


consulta.php


<html>
<head>
<title>Busqueda de Productos</title>
</head>
<body>
<h1>Busqueda de un Precio</h1>
<hr>
<br>
<?php
$conexion=mysql_connect("localhost","root","") or
die("Problemas en la conexion");

mysql_select_db("base1",$conexion) or
die("Problemas en la selección de la base de datos");

$registros=mysql_query("select precio
from productos where nombre='$_REQUEST[nombre]'",$conexion) or
die("Problemas en el select:".mysql_error());

if ($reg=mysql_fetch_array($registros))
{
echo "<b><u>Precio:</u></b>".$reg['precio']."<br>";
}
else
{
echo "No existe ese producto";
}
mysql_close($conexion);
?>
</body>
</html>


Saludos
Yo en la escuela tenia que hacer un proyecto utilizando PHP, pero nunca mas lo toque jajaja.

Capaz estaria bueno, crear funciones auxiliares como por ejemplo: abrirConexion, cerrarConexion, realizarQuery, etc.
Está bueno!

Aunque, previo pedido de disculpas por la ignorancia, pero ¿or die? ¿vale eso? yo en ese caso hubiera hecho un "if".
Y en el caso del mysql_connect (ponele), hubiera usado mysqli_connect. Esa "i" extra le daba beneficios, creo que andaba por la estabilidad o el soporte la cuestión...


Acá encontré algo: http://www.php.net/manual/en/mysqli.persistconns.php
el mysqli, si mi inglés no me juega una mala pasada, agrega soporte a conexiones persistentes; parece una boludez pero suma =P
Cita:¿or die? ¿vale eso?

Si.

Es gracioso cuando tenés una variable llamada "vote", y te queda "vote or die".

Rodrii , te repito la recomendación... create una cuenta en github y subí todas estas cosas!!!

https://github.com/

http://es.wikipedia.org/wiki/Git
(23-07-2013 17:58)Imakuni escribió: [ -> ]
Cita:¿or die? ¿vale eso?

Si.

Es gracioso cuando tenés una variable llamada "vote", y te queda "vote or die".

Rodrii , te repito la recomendación... create una cuenta en github y subí todas estas cosas!!!

https://github.com/

http://es.wikipedia.org/wiki/Git

Uh me re colgue con lo de GitHub jaja. Ya mismo me creo una cuenta, y gracias por los consejos, me sirvieron mucho.
(23-07-2013 17:45)rob. escribió: [ -> ]Está bueno!

Aunque, previo pedido de disculpas por la ignorancia, pero ¿or die? ¿vale eso? yo en ese caso hubiera hecho un "if".

Y en el caso del mysql_connect (ponele), hubiera usado mysqli_connect. Esa "i" extra le daba beneficios, creo que andaba por la estabilidad o el soporte la cuestión...


el or die es un cortocircuito
es casi lo mismo que hacer "operacion() || die();"
la idea es que si operacion() es true, ya no hace falta hacer la segunda parte, y ese codigo nunca se ejecuta.

te recomendaria que uses mysqli, ya que mysql esta deprecada, y va a volar en algun momento. ademas de todos los beneficios que trae:
http://ar2.php.net/manual/en/mysqlinfo.api.choosing.php
No se si todavía sirve de algo, pero como te dijeron mejor usar mysqli y bindear variables.

Aparte meter lógica de negocios mezclda con los modelos en el medio de las vistas es algo que no te recomiendo ni para ejercicio didactico.
Yo hace un par de años que me peleo con PHP y hace rato que no armo códigos planos sin frameworks. Mi sugerencia a priori sería separar en archivos el html de la lógica PHP. Como bien dijo Cloud, no es recomendable mezclar las vistas con los modelos. Como defensor del MVC mi sugerencia sería tener, a falta de un framework, mínimamente separado el modelo de datos (estructuras de tablas, consultas, etc) de la vista (HTML) y de la lógica de procesos (algoritmos, librerías, etc).
PHP es un lenguaje poco elegante, de modo que es mérito tuyo lograr que esté entedible y ordenado.

Abrazote.
Si lo que estás haciendo es algo que va a ser productivo posta, NUNCA metas en una query directamente los datos que recibas del Request porque eso da lugar a SQL Injection (o inyección SQL).
En tu caso en particular lo que podés hacer es 'escapar' los parámetros de las queries usando mysql_real_escape_string(), algo así ponele:



<?php
$conexion=mysql_connect("localhost","root","") or die("Problemas en la conexion");
mysql_select_db("base1",$conexion) or die("Problemas en la seleccion de la base de datos");
$query = "insert into productos(nombre,precio) values ('" .
mysql_real_escape_string($_REQUEST['nombre']) . "','" .
mysql_real_escape_string($_REQUEST['precio']) . "')";
mysql_query($query, $conexion) or die("Problemas insertando data en la base: " . mysql_error());
mysql_close($conexion);
echo "El producto fue agregado satisfactoriamente";
?>




Con eso zafás de que en el request te metan algo tipo "1', '1'); drop database 'base1'" y te boleteen la base de datos (entre otras cosas).
Tené en cuenta que probablemente necesites parsear antes los datos del request para validar que sean numéricos, etc.

Otra sugerencia sería que abstraigas un poco la conexión a la base de datos y la lógica de negocios. Lo ideal es usar como dijeron algún framework de MVC o cosas parecidas, una buena opción es Codeigniter, que viene con varias cosas ya resueltas y te va a simplificar la vida a la hora de programar. Igualmente si recién estás empezando está bueno que hagas todo 'a pedal' hasta que encuentres vos mismo la necesidad de separar las cosas en diferentes capas, eso lo irás manejando con el tiempo =)

Off-topic:
Html y queries en el mismo archivo?
[Imagen: 24693-c30bf601b7718c74106472c40bdedae0.jpg]
URLs de referencia