Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: giagete en 3 Septiembre 2007, 19:53 pm



Título: Como enviar los datos a la Base de Datos
Publicado por: giagete en 3 Septiembre 2007, 19:53 pm
Hola, soy un noob en este mundo y estoy intentando crear una web, y quería crear un formulario para que los datos que recoja fueran directamente a la Base de Datos, eso es podible? Como crearía el formulario para que conectaran? Por favor ayudarme, esto escapa de mis conocimientos. Si podeis decirme una cosa lo mas sencilla psible, luego yo la decoro y si es podible la mejoro...

Gracias por adelantado


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: Agente Naranja en 3 Septiembre 2007, 20:37 pm
Hola, esto lo haces con algún lenguaje de servidor, el más usado (por ser gratis) es PHP, y lo de enviar los datos a un archivo PHP lo puedes hacer desde las etiquetas HTML del formulario, así:

Código
  1. <form method="POST" action="archivo.php">

Donde METHOD puede ser, o bien GET, o bien POST, ya según lo que necesites, aunque lo normal es POST. Y luego ACTION es el archivo PHP al que vas a mandar los datos, que ya se encargará de hacer lo que sea con ellos, bien sea meterlos en una base de datos, bien sea enviarlos por email, lo que tu le pongas.

Si te interesa meterlos en una base de datos, y si de base de datos usas mysql (tambien muy usada, por ser gratuita) tu primer paso sería aprender algo de PHP; y luego leerte sobre las funciones PHP para bases de datos. He dicho mysql_connect, mysql_pconnect, mysql_select_db, mysql_query, mysql_error.

Un saludo.


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: giagete en 3 Septiembre 2007, 21:01 pm
Haber, el formularo lo se hacer.. es más, quie te posteo uno que tengo.. lo que no se hacer es conectarlo a la base de datos, imagino que seran una o dos líneas indicando la base de datos, el nombre de usuario, la contraseña, la tabla, etc...

Mira, este es mi formulario:

Código:
<form action="engranes.php" method="post">
<table border="0" align="center">
  <tr>
    <td colspan="2"><div align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Contacto</font></div></td>
    </tr>
  <tr>
    <td><div align="right"><strong><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Nombre:</font></strong></div></td>
    <td><input name="nombre" type="text">&nbsp;</td>
  </tr>
  <tr>
    <td><div align="right"><strong><font size="1" face="Verdana, Arial, Helvetica, sans-serif">E-Mail:</font></strong></div></td>
    <td><input name="email" type="text">&nbsp;</td>
  </tr>
  <tr>
    <td><div align="right"><strong><font size="1" face="Verdana, Arial, Helvetica, sans-serif">URL:</font></strong></div></td>
    <td><input name="url" type="text">&nbsp;</td>
  </tr>
  <tr>
    <td><div align="right"><strong><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Asunto:</font></strong></div></td>
    <td><div align="left"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">          <em>
    <input name="asunto" type="text">
&nbsp;</em></font></div></td>
  </tr>
  <tr>
    <td><div align="right"><strong><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Texto Completo:</font></strong></div></td>
    <td rowspan="2"><textarea name="texto" cols="25" rows="6"></textarea>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" name="enviar" value="Enviar">
      <input type="reset" name="borrar" value="Borrar"></td>
  </tr>
</table>
</form>&nbsp;</p>
</body>
</html>

Con esto seríais capaz de explicarme como conectarlo a la BD?

Agradezcom mucho vuestra ayuda!


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: Spider-Net en 3 Septiembre 2007, 23:30 pm
Pues eso que quieres hacerno es complicado, a ver si no me equivoco sería algo así:

Suponiendo que tienes una base de datos, con una tabla creada con los campos:
nombre, email, url, asunto, texto.

El archivo engranes.php sería tal que así:

Código
  1. <?php
  2. // 1.- RECOGIDA DE DATOS DEL FORMULARIO
  3. $nombre=$_POST['nombre'];
  4. $email=$_POST['email'];
  5. $url=$_POST['url'];
  6. $asunto=$_POST['asunto'];
  7. $texto=$_POST['texto'];
  8.  
  9. // 2.- IDENTIFICACION nombre de la base, del usuario, clave y servidor
  10. $db="nombredeladb";
  11. $db_login="tunombredeusuario";
  12. $db_pswd="tupass";
  13. $link = mysql_connect("server.delabase.dedatos", $db_login, $db_pswd);
  14.  
  15. // 3.- CONEXION A LA BASE DE DATOS
  16. mysql_select_db($db , $link);
  17.  
  18. // 4.- INSERCION DE DATOS
  19. mysql_query ("INSERT INTO
  20. NOMBREDELATABLA (nombre, email, url, asunto, texto)
  21. VALUES ('$nombre','$email','$url','$asunto','$texto')");
  22.  
  23. print("Datos agregados a la base.");
  24.  
  25. mysql_close($link);
  26.  
  27.  
  28. ?>

Solo tienes que sustituir tu nombre de usuario y pass, el de la base de datos y tu server y por supuesto donde dice NOMBREDELATABLA pon el nombre de la tabla de tu base de datos.
Con eso no deberías de tener más problemas para insertar los datos en la base de datos, espero que te sea de ayuda ;)

Saludos


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: giagete en 4 Septiembre 2007, 11:24 am
Muchas gracias, ahora lo pruebo.. y comento los resultados.


Me habeis ayudado mucho!


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: WHK en 5 Septiembre 2007, 05:12 am
Ya veo esas inyecciones SQL y esos XSS  :rolleyes:
Ponle filtros UTF-8:

Código
  1. <?php
  2. // 1.- RECOGIDA DE DATOS DEL FORMULARIO SIN FILTROS
  3. $nombre_sf=$_POST['nombre'];
  4. $email_sf=$_POST['email'];
  5. $url_sf=$_POST['url'];
  6. $asunto_sf=$_POST['asunto'];
  7. $texto_sf=$_POST['texto'];
  8.  
  9. // 2.- Filtramos en UTF-8
  10. $nombre = htmlspecialchars("$nombre_sf", ENT_QUOTES);
  11. $email = htmlspecialchars("$email_sf", ENT_QUOTES);
  12. $url = htmlspecialchars("$url_sf", ENT_QUOTES);
  13. $asunto = htmlspecialchars("$asunto_sf", ENT_QUOTES);
  14. $texto = htmlspecialchars("$texto_sf", ENT_QUOTES);
  15.  
  16. // 3.- IDENTIFICACION nombre de la base, del usuario, clave y servidor
  17. $db="nombredeladb";
  18. $db_login="tunombredeusuario";
  19. $db_pswd="tupass";
  20. $link = mysql_connect("server.delabase.dedatos", $db_login, $db_pswd);
  21.  
  22. // 4.- CONEXION A LA BASE DE DATOS
  23. mysql_select_db($db , $link);
  24.  
  25. // 5.- INSERCION DE DATOS
  26. mysql_query ("INSERT INTO
  27. NOMBREDELATABLA (nombre, email, url, asunto, texto)
  28. VALUES ('$nombre','$email','$url','$asunto','$texto')");
  29.  
  30. print("Datos agregados a la base.");
  31.  
  32. mysql_close($link);
  33. ?>


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: giagete en 6 Septiembre 2007, 10:18 am
No es por molestar, pero los filtros UTF-8 para que sirven, estoy aprendiendo y me interesa todo... :P

Y tengo una pregunta al crear la tabla en la BD... creo una tabla que se llama "formulario" se supone que con 5 campos no?, los mismos que opciones hay en el formulario. Hasta ahí creo que va todo bien.

Luego a los campos les pongo el nombre de las opciones, "nombre" "url" "email"...

Pero lo demas nose que poner, ¿Que tipo? ¿Que valores, cotejamiento, atributos, nulo, preterminado, extra....?

Os agradeceria la ayuda


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: giagete en 6 Septiembre 2007, 11:53 am
Me he documentado un poco y os voy a enseñar lo que tengo: (ME da error, lo pongo abajo)

UN FORMULARIO SENCILLO
Código:
<form name="formulario" action="insertar_datos.php" method="post">
E-mail: <input type="text" name="email"><br>
Texto: <input type name="texto"><br>
<input type="submit" name="enviar" value="Enviar">
</form>

CONECTANDO BD (insertar_datos.php)
Código:
<?php

    //Compruebo que ningún campo esté vacío y que todos los campos existan.
    if(isset($_POST['titulo']) && !empty($_POST['titulo']) &&
    isset($_POST['contenido']) && !empty($_POST['contenido'])) {

        // Si todo esta bien.

        $link = mysql_connect("*******","*****","******");
        mysql_select_db("**********",$link);

        // Se inserta todo en la Base de Datos
        mysql_query("INSERT INTO formulario (titulo,contenido)
        VALUES ('{$_POST['titulo']}','{$_POST['contenido']}')",$link);

        // Compruebo que todo va perfectamente
        $my_error = mysql_error($link);

        if(!empty($my_error) {

            echo "Ha habido un error al insertar los valores. $my_error";

        } else {

            echo "Los datos han sido introducidos satisfactoriamente";

        }

    } else {

        echo "Error, no ha introducido todos los datos";

    }

?>

Parse error: syntax error, unexpected '{' in /home/virtual/sitio144456/www/user/insertar_datos.php on line 19

Me da este error, que fallo tiene..?


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: Ertai en 6 Septiembre 2007, 17:22 pm
Linia 19:  if(!empty($my_error)) {


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: Agente Naranja en 6 Septiembre 2007, 19:54 pm
Pues el error está, como dice Ertaí, en que te has comido un paréntesis.
Y lo de los filtros UTF, lo que hace es pasar las variables por un "encoder", o como se llame, una función que cambia todos los carácteres especiales (<,>,&...) y los convierte en HTML sencillo, para evitar algún posible crackeo a la base de datos.
Saludos.


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: giagete en 6 Septiembre 2007, 21:22 pm
Gracias, ahora lo compruebo y a ver si funciona.. :rolleyes:


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: giagete en 6 Septiembre 2007, 21:30 pm
Pues no va... Os explico lo que hice.. cree una cuenta en Gratishost y solo puse el archivo del formulario y el archivo de insercion de datos.

Cree una tabla en la base de datos llamada "formulario" en la cual incluí dos campos,

"email"
"texto"

Las dos tipo "text" y cotejamiento.. puse "latin1_spanish_ci", nada más y da este error tras uno o dos minutos cargando:

Warning: mysql_connect(): Lost connection to MySQL server during query in /home/virtual/sitio144456/www/user/insertar_datos.php on line 9

Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /home/virtual/sitio144456/www/user/insertar_datos.php on line 10

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/virtual/sitio144456/www/user/insertar_datos.php on line 14

Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in /home/virtual/sitio144456/www/user/insertar_datos.php on line 17
Los datos han sido introducidos satisfactoriamente

Lo que me extraña es lo del final "Los datos han sido introducidos satisfactoriamente"

Eh¿ pues en la base de datos no veo nada... nose si es un fallo o que los mete mal...

Alguien me puede ayudar?


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: JUCA en 6 Septiembre 2007, 22:43 pm
Tu problema es porque no te conectas a l Base de Datos .
Debes revisar bien la cadena de conexion para corregir este problema.

Saludos
JUCA


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: giagete en 7 Septiembre 2007, 09:32 am
Nose en que puede fallar, creo que está todo bien...

Línea 9:
Código:
$link = mysql_connect("XXXXX","XXXXX","XXXXX");

Aquí intento conectar a la base de datos de la siguiente manera:

En el primer hueco la direccion de URL "http://xxx.xxx.x.xx/mysql/"
En el segundo en nombre de user "xxxxx"
Y en el último my password

Corregirme si algo falla, pero creo que ahí todo está bien.

Línea 10:
Código:
mysql_select_db("XXXX",$link);

En esta línea selecciono la BD. El nombre está bien insertado...

Línea 14:
Código:
VALUES ('{$_POST['titulo']}','{$_POST['contenido']}')",$link);

En está línea es donde mando insertar los datos a la BD con esos valores.

Línea 17:
Código:
$my_error = mysql_error($link);

Esta es la línea que da el error, pero lo que me extraño aqui es que daba un fallo en esta línea, por lo tanto tendría que poner:

"Ha habido un error al insertar los valores."

Pero ha sido al reves, salió "Los datos han sido introducidos satisfactoriamente"

Le veis algo mal?

PD: ¿Como poneis el código de colores?


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: JUCA en 7 Septiembre 2007, 15:48 pm
Nose en que puede fallar, creo que está todo bien...

Línea 9:
Código:
$link = mysql_connect("XXXXX","XXXXX","XXXXX");

Aquí intento conectar a la base de datos de la siguiente manera:

En el primer hueco la direccion de URL "http://xxx.xxx.x.xx/mysql/"
En el segundo en nombre de user "xxxxx"
Y en el último my password


Ya pues ya se donde esta mal .

En la cadena de conexion se debe ubicar de la siguiente manera:

Código:
$link = mysql_connect("localhost","user","password");

Donde dice localhost ponle asi porque tu maquina que esta haciendo de hosting es tu localhost no debes especificar nada adicional.
Solo cambia eso en vez de poner en el primer hueco "http://xxx.xxx.x.xx/mysql/"
pon "localhost" .
De ahi todo esta correcto . Por si acaso revisa que este completo tu nombre de usuario y la clave que este correcta.

Pero el error que salta a la vista y que es el que seguramente te produce el error es que no has puesto localhost como te indicaba anteriormente .

Bueno espero que con esto se solucione tu problema.

Saludos
JUCA




Título: Re: Como enviar los datos a la Base de Datos
Publicado por: Agente Naranja en 7 Septiembre 2007, 15:56 pm
Pues si, en ocasiones he visto que hay que poner Localhost, y en otras hay que poner la direccion tipo mysql.dominio.com. Intenta con las dos, o pregunta a los que llevan el dominio.

Lo de los colores, cuando pongas una etiqueta como codigo, selecciona el texto, y en la lista de arriba, donde dice "GESHI", a la derecha de los botones de negrilla, cursiva, etc, alli escoje el lenguaje que estás usando y el te lo colorea.


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: giagete en 7 Septiembre 2007, 16:03 pm
Perfecto! Funciona de maravilla, gracias a todos por vuestra ayuuda, y gracias agente naranja por lo de los colores.. es que yo no sabía y todos lo poníais, me sentía desplazado..xDD


Título: Re: Como enviar los datos a la Base de Datos
Publicado por: JUCA en 7 Septiembre 2007, 16:06 pm
Que bueno que ya se soluciono tu problema

Saludos
JUCA