Problema con formulario PHP

Duel

Se trata de un formulario muy simple a través del cual se registra un usuario con un nick y una password, pues bien, no consigo que se añadan los datos de ese usuario a la BD, cuando relleno los 2 campos, al darle a enviar los campos se vacian y no envia nada.

Copy&Paste de lo que tengo hecho...

Registro.html

<FORM>
<table align="center">
	<form action="registrar.php" METHOD="POST">
	<tr>
	<td><font color="white">[b]Nombre:[/b]</font></td>  
<td><input type="text" name="nick"></td> </tr> <br> <tr> <td><font color="white">[b]Password:[/b]</font></td> <td><input type="password" name="pass"></td> </tr> </table> <br> <table align="center"> <tr> <td><input type="submit" value="enviar" ></td> <td><input type="reset" value="reset"</td> </tr>
</table> </FORM>

registrar.php

<?
	include("conectarse.php"); 

$link=conectarse();

mysql_query("INSERT INTO usuarios (nick,pass) VALUES 	('{$_POST['nick']}', {$_POST['pass']})", 

$link);


?>

Y el tipico conectarse.php

<?
function conectarse ()

{
if (! ($link=mysql_connect("localhost", "root","mysql")))
{
	echo "Error al conectar .";
	exit();
}
if(!mysql_select_db("asot", $link))
{
	echo "Base de datos incorrecta.";
	exit();
}
return $link;
}
$link=conectarse();
echo "Conectado...  ";
mysql_close($link);

?>

Y esta es la BD:

-- phpMyAdmin SQL Dump
-- version 3.1.1
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 12-02-2009 a las 23:37:55
-- Versión del servidor: 5.1.30
-- Versión de PHP: 5.2.8

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de datos: `asot`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `usuarios`
--

CREATE TABLE IF NOT EXISTS `usuarios` (
  `nick` varchar(10) NOT NULL,
  `pass` int(10) NOT NULL,
  PRIMARY KEY (`nick`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Volcar la base de datos para la tabla `usuarios`
--

PD: uso EasyPHP.

r2d2rigo

Haces cosas raras en el mysql_query... yo te recomiendo construirte la string del query por un lado y luego llamarla por otro

$query = "INSERT INTO usuarios(nick,pass) VALUES ('".$POST['nick']."','".$POST['pass']."')";
mysql_query($query,$link);

Fr4nk0

Porque pones en la linea 1 <FORM> (sin action ni method) y luego en la 3 otro <form> (este ya con action y method)? Puede que sea por esto por lo que se te vacíe, pq hay un form que no cierras y además no tiene action ni method.

Además como bien te han dicho antes, es mejor por un lado formar la consulta y luego hacerla del tiron, siempre queda más claro.

Duel

#3 el primer FORM se me olvidó borrarlo, pero vamos, que lo he eliminado y no soluciona nada.

En cuanto a la insert aunque de la forma que me decis queda más clara, de esta otra también tendria que funcionar, no?

El caso es que sigue sin funcionar, relleno los campos del formulario y no se envia nada a la BD ¬¬

horvathzeros

mañana lo pruebo en clase a ver si va xDD

en clase lo hacemos de otra forma, a ver si lo arreglas.

pd: el formulario así:

spoiler
Duel

#5 el tema es que tengo que terminar este proyecto para mañana :D

horvathzeros

No es que sepa mucho pero dime cosas e intento ayudar xd

El nombre q intentas registrar tiene q tener menos de 10 caracteres y la pass tiene q ser entero y tener menos de 10 caracteres, no?

imagino q lo habras probado asi al crearlo

pd:linia 17 del conectarse.php ese } hace algo?

Duel

#7 lo he puesto asi por poner pero vamos, que como está ya es suficiente.

ZaO

Te falta cerrar la cadena de la instruccion sql "; );

y mejor hacerlo como dice #2 y queda mas legible.

Duel

#9 pues no veo en que parte falta eso :/

Fr4nk0

Prueba a poner en el archivo dle action del form un var_dump($POST) para ver que es lo que te envía el formulario, y asi podras ver donde falla. Lo mismo te envía bien los datos, pero si luego usas otro fichero y ya el $POST se te borra. Pruebalo

Dod-Evers

Una cosa, aparte de todo lo que te hayan dicho, las passwords tienes que guardarlas en md5 o sha1 como mínimo, es decir, en el insert, o al construir la query:

$pass = md5($POST['pass']);

Luego puedes jugar con md5(cadena + "234") o alguna cosa así, y te puedes emparanoyar todo lo que quieras.

NeB1

esta mal esto

mysql_query("INSERT INTO usuarios (nick,pass) VALUES ('{$_POST['nick']}', {$_POST['pass']})", 

porque dentro de una cadena no puedes llamar a un array ($_POST) tienes que hacer esto, además de que no cierras el paréntesis ni las comillas del query ni pones el punto y coma de final de instrucción...

mysql_query("INSERT INTO usuarios (nick,pass) VALUES ('".$_POST['nick']."', '".$_POST['pass']."')"); 

creo vamos,porque la "{" yo nunca la he gastado, además en el "pass" te faltaba 'pass' las comillas simples.

de todas formas, para saber si el error está al recoger los datos del formulario o al insertar en la base de datos haz esto:

print_r($_POST) //para ver si contiene los datos
mysql_query("INSERT INTO usuarios (nick,pass) VALUES ('".$_POST['nick']."', '".$_POST['pass']."')");  
echo mysql_error(); //para que nos muestre si existe el error del insert
ZaO

#10 no me fije que cierras abajo :P, es como dice #13 tienes que concatenar con puntos para que te pille las ' ' de los POST, o pasarlo a una variable para hacerlo mas comodo ,
$var =$_POST['text'] , y despue lo insertas , VALUES('$var',...)

r2d2rigo

#13, #14, toda esa pesca ya la puse yo en #2 :P

NeB1

<ironía>

lo de echo mysql_error()?

lo de print_r($_POST)?

</ironía>

además yo no le he dixo que construya la cadena del query aparte, eso realmente es tontería y, si no gastas la misma query muchas varias veces, aumenta las lineas de código, si nos si que es útil.

Usuarios habituales

  • NeB1
  • r2d2rigo
  • ZaO
  • Dod-Evers
  • Fr4nk0
  • Duel
  • horvathzeros