ARGENTOP2P

Soporte, Ayuda y Consultas => Programación en General => Mensaje publicado por: Don_Gusanito en Septiembre 29, 2005, 11:52:08

Título: (PED - PHP) Algunas Consultas Basicas
Publicado por: Don_Gusanito en Septiembre 29, 2005, 11:52:08
Aqui les dejo un par de consultas...
Las numero para que asi puedan contestar las que saben:

1. Formulario para agregar registros a una base de datos desde una pagina
2. Codigo para traer datos desde la base de datos a una pagina web
3. Consulta SQL para traer los ultimos N registros de una tabla (Por ejemplo las ultimas 4 noticias)
4. Como se trabaja con las imagenes (suponiendo por ejemplo que cada noticia tenga su imagen)
5. Como hacer para que, desde una lista de titulos (por ejemplo de noticias), al hacer clic sobre uno de ellos acceder a una pagina con todo el contenido (en nuestro caso, la noticia completa)

Para facilitar las cosas y que todos trabajemos de la misma manera les dejo lo que seria la tabla de noticias.

id, titulo, fecha, descripcion, imagen, autor

Gracias!
Título: (PED - PHP) Algunas Consultas Basicas
Publicado por: DAX en Septiembre 29, 2005, 12:05:43
¿Es imperativo que tengan que escribir el código de cero?

Porque podrían recurrir a un CMS, teniendo con ello resuelto todo el problema.

Sino, simplemente, descarguen el paquete de cualquiera de los CMS que hay disponibles y revisen su código y verán como resolver estas cuestiones  :wink:

Algunos de los CMS mas utilizados:

Mambo Portal (http://www.mamboserver.com/)

Joomla! (http://www.joomla.org/) (Es una derivación de Mambo)

Xoops (http://www.xoops.org/)

SaludOS/2
Título: (PED - PHP) Algunas Consultas Basicas
Publicado por: Don_Gusanito en Septiembre 29, 2005, 19:46:08
Si DAX, es mucho mas sensillo. Ademas supongo q para eso hicieron este subforo, no?
Me gustaria q me contesten esas cosas xq asi de a poco se puede ir entendiendo mas, si llego a agarrar el codigo del mambo me vuelvo loco mal.
Título: (PED - PHP) Algunas Consultas Basicas
Publicado por: Predicador en Septiembre 30, 2005, 03:28:42
Hola, bueno, responder a estas preguntas fue casi como hacer un CMS pero asi por arriba :P

Preguntas:
1. Formulario para agregar registros a una base de datos desde una pagina
2. Codigo para traer datos desde la base de datos a una pagina web
3. Consulta SQL para traer los ultimos N registros de una tabla (Por ejemplo las ultimas 4 noticias)
4. Como se trabaja con las imagenes (suponiendo por ejemplo que cada noticia tenga su imagen)
5. Como hacer para que, desde una lista de titulos (por ejemplo de noticias), al hacer clic sobre
uno de ellos acceder a una pagina con todo el contenido (en nuestro caso, la noticia completa)


Respuestas:
1) Podes usar un dobre esquema, una pagina que solo se dedica a almacenar lo que recibe como parametro o una pagina donde ingresas las noticias y las guardas tambien.
Veamos el caso mas simple, separado en dos archivos.
Archivo de ingreso de datos:
Aca no hay nada raro, puro html que envia informacion a otra URL usando forms y post.
<index.html o el nombre que quieras>
<html>
<head>
  <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
  <meta name="copyleft" content="Predicador">
  <meta name="generator" content="Predicador a manopla">
  <meta http-equiv= "pragma" content="no-cache">
  <title>::.: Input </title>
</head>
<body>
 <h1>Manda cosas nomas:</h1>
<form name="poster" action="addNoticia.php" method="POST">
  Titulo: <input type="Text" name="titulo" value="" size="20"><br>
  fecha: <input type="Text" name="fecha" value="" size="20"><br>
  Descripcion: <input type="Text" name="descripcion" value="" size="20"><br>
  Autor: <input type="Text" name="autor" value="" size="20"><br>
  <!-- Y los demas que faltan  -->
  <input type="Submit" name="Submit" value="Test" class="button">
  <input type="reset" class="button">
 </form>
</body>
</html>



Como veran, llama a addNoticia.php que es el que se encarga efectivamente de igresar la informacion en la base de datos
Veamos que tendria addNoticia.php dentro
<?php

  
// cargamos en variables lo que recibimos por parametro &#40;viene en la URL esta info&#41;
  
$titulo $_POST['titulo'&#93;;
  
$fecha $_POST['fecha'&#93;;
  
$descripcion $_POST['descripcion'&#93;;
  
$autor $_POST['autor'&#93;;
  // y los demas que faltan

  // ahora se deberian sanitanizar las entradas ya que nunca debemos confiar en lo que nos llega desde un usuario
  // ya saben, cuidarnos la cola lo mejor posible &#58;P &#40;lease SQL injection&#41;
  // asi que miren http&#58;//www.owasp.org/software/labs/phpfilters.html y usen alguna funcion de ahi
  // aplicada a los parametros que acabamos de recibir
  
  // conectamos a la base de datos
  // quizas podrias poner esto en un modulo aparte, donde centralizas las rutinas de conexion
  
$link mysql_connect&#40;'mysql_host', 'el_usuario_de_SQL', 'su_password'&#41; or die&#40;'No se peude conectar&#58; ' . mysql_error&#40;&#41;&#41;;
  
mysql_select_db&#40;'my_database'&#41; or die&#40;'No se puede seleccionar la base de datos'&#41;;

  
$query "INSERT INTO mi_tabla values&#40;'$titulo','$fecha','$descripcion','$autor'&#41;";
  
$resultado mysql_query&#40;$query&#41; or die&#40;'Fallo al insertar&#58; ' . mysql_error&#40;&#41;&#41;;  
  
echo "Insercion exitosa.";
?>

Ahora podes redireccionar al tipo a cualquier otro lado
quizas en vez del
echo "Insercion exitosa.";
puedes poner un:
header("Location: http://www.tusito.com.ar/");para redireccionarlo despues de un INSERT exitoso.

2 y 3)
<?php
//Primero se entablece una conexion con la base de datos.
$link mysql_connect&#40;"mysql_host", "el_usuario_de_SQL", "su_password"&#41; or die&#40;"No se peude conectar&#58; " . mysql_error&#40;&#41;&#41;;
mysql_select_db&#40;"my_database"&#41; or die&#40;"No se puede seleccionar la base de datos"&#41;;

// luego se hace la consulta 
$query "SELECT * FROM mi_tabla";
$resultado mysql_query&#40;$query&#41; or die&#40;'Query fallida&#58; ' . mysql_error&#40;&#41;&#41;;

// luego se mira la ifo retornada
while &#40;$linea = mysql_fetch_array&#40;$resultado, MYSQL_ASSOC&#41;&#41; &#123;  // OJO! devuelve como asociativo, entonces referenciar como asociativo
   
echo "ID&#58; ".  $linea['id'&#93;;   // referencia por nombre de campo por leer asociativo ;&#41;
   
echo "Titulo&#58; ".  $linea['titulo'&#93;;
   
echo "Fecha&#58; ".  $linea['fecha'&#93;;
   
echo "Descripcion&#58; ".  $linea['descripcion'&#93;;
   
echo "Imagen&#58; ".  $linea['imagen'&#93;;
   
echo "Autor&#58; ".  $linea['autor'&#93;;
&#125;

?>


El codigo este lee toda la base de datos, si queres que lea solo las 4 ultimas podes cambiar
$query = "SELECT * FROM mi_tabla";
por
$query = "SELECT TOP 4 * FROM mi_tabla ORDER BY id DESC";
(leer un poco sobre SQL para querys mas complejas o de diferentes tipos)


4) A mi no me parece conveniente que la imagen este en la base de datos (hay casos en que si conviene, o sea,c uadno las imagenes seras casi siempre las mismas).
De otro modo en imagen solo guardaria la URL a la imagen que previamente fue subida o por el mismo sistema o a manopla.

5) Tenes una pagina llamada mostrarNoticia.php que recibe como parametro un ID de noticia.
Desde la pagina que muestra los titulos, al imprimirlos pones:
 
 // claro que previamente hiciste un SELECT de las noticias
 echo "<a href=mostrarNoticia.php?id=".$id.">". $titulo ."</a>";


el mostrar noticia solo selecciona de la base de datos la noticia con ese Id, o sea


<head>
  <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
  <meta name="copyleft" content="Predicador">
  <meta name="generator" content="Predicador a manopla">
  <meta http-equiv= "pragma" content="no-cache">
  <title>::.: Ver noticia </title>
</head>
<body>
 <h1>Info de la noticia:</h1>
<?php
$id 
$_POST['id'&#93;;
// sanitanizar esta variable!!!!! siempre! nunca confies en lo que llega de internet
$query "SELECT * FROM mi_tabla WHERE id=" $id;
$resultado mysql_query&#40;$query&#41; or die&#40;'Query fallida&#58; ' . mysql_error&#40;&#41;&#41;;
$linea mysql_fetch_array&#40;$resultado, MYSQL_ASSOC&#41;
echo "ID&#58; ".  $linea['id'&#93;;   // referencia por nombre de campo por leer asociativo ;&#41;
echo "Titulo&#58; ".  $linea['titulo'&#93;;
echo "Fecha&#58; ".  $linea['fecha'&#93;;
echo "Descripcion&#58; ".  $linea['descripcion'&#93;;
echo "Imagen&#58; ".  $linea['imagen'&#93;;
echo "Autor&#58; ".  $linea['autor'&#93;;
?>

</body>
</html>


Espero haber sido lo suficientemente conciso como para que sea entendible sin irme por las ramas.
Baii.

EDIT: use varias veces la palabra "sanitanizar"... esta viene del verbo sanitize en ingles que en este caso tiene el sentido de revisar la variable y limpiarla de las cosas que no queremos (o puedan producir errores en el codigo o produzcan que el usuario pueda ejecutar el codigo que el quiera en nuestro codigo). Quizas la traduccion mas fiel sea "sanerla". Si, ya se, sanitanizar suena a palabra re inventada recien sacada del horno :P
Título: (PED - PHP) Algunas Consultas Basicas
Publicado por: Don_Gusanito en Septiembre 30, 2005, 10:20:27
Predicador, impecable tu explicacion! Hoy lo ire probando y te cuento como me fue. Mil Gracias!

Una ultima cosa, si despues tenes tiempo explicame como hacer para poder subir una imagen a cierta carpeta en el momento del formulario de registro de noticias, para poder despues mostrarla mientras muestro la noticia.

Muchisimas Gracias, saludos!
Título: (PED - PHP) Algunas Consultas Basicas
Publicado por: Don_Gusanito en Septiembre 30, 2005, 11:26:55
despues de apretar enviar me aparece el siguiente error

Method Not Allowed
The requested method POST is not allowed for the URL /addNoticia.php.
Título: (PED - PHP) Algunas Consultas Basicas
Publicado por: Predicador en Septiembre 30, 2005, 12:46:49
Cita de: Don_GusanitoUna ultima cosa, si despues tenes tiempo explicame como hacer para poder subir una imagen a cierta carpeta en el momento del formulario de registro de noticias, para poder despues mostrarla mientras muestro la noticia.

Muchisimas Gracias, saludos!
Arme un post respecto a eso asi no queda aca tirado en el medio...
http://foro.argentop2p.com.ar/viewtopic.php?p=61037#61037
;)
Baii.

PS: ahora miro tu post anterior.
Título: (PED - PHP) Algunas Consultas Basicas
Publicado por: Predicador en Septiembre 30, 2005, 13:03:23
Cita de: Don_Gusanitodespues de apretar enviar me aparece el siguiente error

Method Not Allowed
The requested method POST is not allowed for the URL /addNoticia.php.

Hasta donde se ese problema suele surgir cuando la configuracion de php tiene el register global off ....
Podrias probar de crear en ese mismo directorio un archivo llamado .htaccess que contenga la linea
php_flag register_globals on
Sino muchas razones mas no se me ocurren.
(Bah, si tenes acceso al php.ini pone en ON la opcion register_globals)
Baii.