Foros del Web » Programando para Internet » PHP »

Ayuda con formulario de registro

Estas en el tema de Ayuda con formulario de registro en el foro de PHP en Foros del Web. Hola a todos, a ver si me podeis ayudar porque he intentado de todo y no se me ocurre como solucionarlo o al menos apañarlo. ...
  #1 (permalink)  
Antiguo 10/06/2010, 14:58
 
Fecha de Ingreso: junio-2010
Mensajes: 10
Antigüedad: 13 años, 10 meses
Puntos: 0
Ayuda con formulario de registro

Hola a todos, a ver si me podeis ayudar porque he intentado de todo y no se me ocurre como solucionarlo o al menos apañarlo.

Bien lo primero los antecedentes para dejar todo claro...

Mi web no carga las paginas directamente, sino que tiene un index principal y por medio de la funcion onclick='loadcont();' cargo el contenido de las paginas en un div central, quedando un efecto muy apañado, que realiza un efecto de difuminacion entre paginas unicamente en ese div central, en vez de recargar la web desde el principio...

Bien el caso es que esto me funciona con todas mis paginas sin problemas a excepcion de la pagina de registro de usuarios.
Si cargo la pagina de registro directamente saltandome el index la pagina funciona perfectamente, conecta con la BD y registra los campos sin ningun tipo de problema...
La complicacion me viene precisamente en el index debido a esa caracteristica de carga en el div central. Al cargar la pagina de registro y rellenar los datos teoricamente la web te devuelve una pagina en la que se da un mensaje (de exito, o de error si hay algun fallo), pero el div no me carga esa pagina correctamente y me carga el contenido inicial por defecto (no se si me he explicado correctamente xD)

Creo que el problema se podria solucionar si en vez de recargar una pagina con el mensaje correcto, ese mensaje apareciese debajo del formulario por ejemplo, pero no doy con la manera de hacer algo asi (o cualquier otra solucion valida)

El codigo del form es el siguiente para que veais como trabaja (siento que algunas partes de los comentarios esten en portugues)

Código:
<?
include ("../include/config.php");
if($_POST['act']=="Aceptar") {

$id = htmlspecialchars($_POST['id']);
$senha = htmlspecialchars($_POST['senha']);
$senha2 = htmlspecialchars($_POST['senha2']);
$senhap = htmlspecialchars($_POST['senhap']);
$senhap2 = htmlspecialchars($_POST['senhap2']);
$nome = htmlspecialchars($_POST['nome']);
$email = htmlspecialchars($_POST['email']);
$dias = htmlspecialchars($_POST['dias']);
$meses = htmlspecialchars($_POST['meses']);
$anos = htmlspecialchars($_POST['anos']);
$pergunta = htmlspecialchars($_POST['pergunta']);
$resposta = htmlspecialchars($_POST['resposta']);

$id = strip_tags($id);
$senha = strip_tags($senha);
$senha2 = strip_tags($senha2);
$senhap = strip_tags($senhap);
$senhap2 = strip_tags($senhap2);
$nome = strip_tags($nome);
$email = strip_tags($email);
$dias = strip_tags($dias);
$meses = strip_tags($meses);
$anos = strip_tags($anos);
$pergunta = strip_tags($pergunta);
$resposta = strip_tags($resposta);

function anti_injection($string){

  $string = str_ireplace(" or ", "", $string);
  $string = str_ireplace("select ", "", $string);
  $string = str_ireplace("delete ", "", $string);
  $string = str_ireplace("create ", "", $string);
  $string = str_replace("#", "", $string);
  $string = str_replace("=", "", $string);
  $string = str_replace("--", "", $string);
  $string = str_replace(";", "", $string);
  $string = str_replace("*", "", $string);
  $string = trim($string);
  $string = strip_tags($string);
  $string = addslashes($string);

  return $string;
}

//aqui eu pego todos os dados vindos do form
//e tratos todos de uma vez e já cria as variaveis correspondentes
foreach ($_POST as $campo => $valor) {
   $$campo = anti_injection ($valor);
}


//Verifica se já existe ID
$selec = "SELECT * FROM account_data WHERE name='".$id."'";
$selec2 = "SELECT * FROM personal_data WHERE email='".$email."'";
$exec = mysql_query($selec, $conecta) or die(mysql_error());
$exec2 = mysql_query($selec2, $conecta) or die(mysql_error());
$total = mysql_num_rows($exec);
$total2 = mysql_num_rows($exec2);

if($total>="1") {
echo "<center><p><br><p><font color=red>El usuario $id ya esta registrado, por favor escoge otro nombre de usuario.</font>";
echo "<meta HTTP-EQUIV='Refresh' CONTENT='3;URL=registro3.php'>";
} else {

//vericifa se o email já existe
if($total2>="1") {
echo "<center><p><br><p><font color=red>El email $email ya existe en nuestra BD, por favor escoge otro email.</font>";
echo "<meta HTTP-EQUIV='Refresh' CONTENT='3;URL=registro3.php'>";
} else {

if(empty($id) || empty($senha) || empty($senha2) || empty($nome) || empty($email) || empty($dias) || empty($meses) || empty($anos) || empty($pergunta) || empty($resposta)) {
echo "<center><p><br><p><font color=red>Todos los campos son Obligatorios, por favor rellenalos correctamente.</font>";
echo "<meta HTTP-EQUIV='Refresh' CONTENT='3;URL=registro3.php'>";
} else {
//Pegando IP
$ip = $_SERVER["REMOTE_ADDR"];

//Criptando senha
$senhasha = sha1($senha, true);
$senhacript = base64_encode($senhasha);

  //Tabela Registro Game
  $qry = "INSERT INTO account_data (name, password,last_ip) VALUES ('$id','$senhacript','$ip')" or die("Erro em $qry");
  $exe = mysql_query($qry, $conecta) or print(mysql_error());

  $data_registro = date("Y-m-d H:i:s");
  $nascimento = "$anos-$meses-$dias";
  //Tabela de Dados Personalizados
  $qryp = "INSERT INTO personal_data (acc_id,name,email,data_register,birth,pergunta,resposta)
  VALUES ('$id','$nome','$email','$data_registro','$nascimento','$pergunta','$resposta')" or die("Erro em $qry");
  $exep = mysql_query($qryp, $conecta) or print(mysql_error());

echo "Tu cuenta ha sido registrada con exito. Que disfrutes en el juego!";

} }}
} else {
?>
Como veis en el codigo inicial que es el que me importa (lo siguiente es el form propiamente dicho que he obviado porque es tonteria) el script comprueba por ejemplo que el nombre de usuario no esta registrado, y si lo esta devuelve el error por medio de un echo y la frase...
AHi es donde esta el problema, esa frase la recarga en una nueva pagina y entonces el div me da el error, hay alguna forma de que eso lo haga en la propia pagina y asi que no tenga que recargar nada?
  #2 (permalink)  
Antiguo 10/06/2010, 17:33
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Ayuda con formulario de registro

Puedes hacerlo con una funcion ajax que envie los datos a una pagina php que revise si existe o no y devuelva verdadero o falso...

Revisa aca para que veas de lo que hablo.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #3 (permalink)  
Antiguo 11/06/2010, 02:02
 
Fecha de Ingreso: junio-2010
Mensajes: 10
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Ayuda con formulario de registro

He intentado hacer algo parecido a lo que ponias pero el resultado es siempre el mismo, me muestra el mensaje en otra pagina recargando la anterior y eso el div no lo acepta y da el fallo...

Lo que necesito es que la sentencia:

Código:
if($total>="1") {
echo "<center><p><br><p><font color=red>El usuario $id ya esta registrado, por favor escoge otro nombre de usuario.</font>";
echo "<meta HTTP-EQUIV='Refresh' CONTENT='3;URL=registro3.php'>";
} else {
o cualquiera de las siguientes similares, esta de comprobacion de usuario es un ejemplo, lo haga devolviendome ese valor EN LA MISMA pagina, que no intente recargarla sino que el mensaje lo muestre directamente en la pagina...
AL estilo por ejemplo los foros phpbb cuando vas a registrarte y si metes un nombre de usuario que ya esta registrado te aparece en la pagina un error, pero no la recarga en ningun momento... Pues algo asi pero que ocurra cuando le das al boton de enviar datos del formulario (que lo mismo lo que pido es imposible no se...)
  #4 (permalink)  
Antiguo 11/06/2010, 08:49
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Ayuda con formulario de registro

Como lo implementaste??... porque la funcion que puse en esa pagina que postie, es una funcion para que te devuelva los datos a la misma pagina y no se redireccione a ningun lado....

Saludos!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #5 (permalink)  
Antiguo 11/06/2010, 10:39
 
Fecha de Ingreso: junio-2010
Mensajes: 10
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Ayuda con formulario de registro

Pues primero lo probe directamente con tu codigo para no crear una pagina y que resultase que despues no funcionase :)

Cree 2 paginas, un index inicial con el siguiente codigo:

Código:
<script language="Javascript">
	//Esta funcion permite hacer llamadas asincronicas.
	function crearAjax(){
		var xmlhttp = false;
		try{
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		}catch (e){
			try{
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			}catch (E){
				xmlhttp = false;
			}
		}

		if (!xmlhttp && typeof XMLHttpRequest != 'undefined'){
			xmlhttp = new XMLHttpRequest();
		}
		return xmlhttp;
	}
	function buscaInfo(id){
		var http = crearAjax();
		var url = "sacaDatos.php?id="+id;
		http.open("GET", url, true);
		http.onreadystatechange = function(){
			if (http.readyState == 4){
				var json = eval('(' + http.responseText + ')');
				alert("json");
			}
		}
		http.send(null);
	}
</script>

<select id="test" name="test" onClick="buscaInfo(this.options[this.selectedIndex].value)">
	<option value="1">1</option>
	<option value="2">2</option>
</select>
Y despues una pagina llamada sacaDatos.php con el codigo php

Código:
<?php
include "include/config.php";

$id = $_GET['id'];
$sql = "SELECT * FROM account_data WHERE name='".$id."'";
$result = mysql_query($sql, $conecta) or die(mysql_error());
while($data = mysql_fetch_array($result))
{
    return ''.json_encode($data['nombre']).'';
}
return 'No existe';
?>
Como ves modifique eso si un poco la sentencia para conectar con la BD por si daba problemas que saliese un error de conexion...

El caso es que si las uso asi tal cual en el index no pasa absolutamente nada, da igual que elija los valores 1 o 2 que no aparece ningun mensaje en pantalla...
Evidentemente no he creado ninguna tabla en la BD que corresponda a esas variables, pero deberia de darme entonces el mensaje de no existe no?
O eso o no he entendido muy bien el codigo...
  #6 (permalink)  
Antiguo 11/06/2010, 14:14
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Ayuda con formulario de registro

Nop... no esta programado para que arroje un error en caso que no encuentre nada.

Trata de ver si te arroja un error en firebug de mozilla (Este programa es bueno para ver problemas con javascript's)

Saludos!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!

Etiquetas: registro, formulario
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 22:02.