Foros del Web » Programando para Internet » PHP »

Problema al insertar un dato en BD

Estas en el tema de Problema al insertar un dato en BD en el foro de PHP en Foros del Web. Hola a todos, hace poco estuve preguntando por aquí la manera de hacer un registro de usuarios con tres tipos de usuarios diferentes, no sabía ...
  #1 (permalink)  
Antiguo 06/06/2011, 12:44
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 1 mes
Puntos: 17
Problema al insertar un dato en BD

Hola a todos, hace poco estuve preguntando por aquí la manera de hacer un registro de usuarios con tres tipos de usuarios diferentes, no sabía como enfocar el tema de las tablas y tal...

Ahora ya me he organizado y se lo que quiero, tengo el registro, que me mete al usuario en una tabla temporal y el usuario al activar la cuenta por via email se mete en otra tabla definitiva, en esa tabla almaceno los datos básicos que todos los usuarios (sean del tipo que sean) comparten Y UN CAMPO CON EL TIPO DE USUARIO.

El tema es que todo va bien pero no consigo ingresar en la BD el tipo de usuario, directamente no me introduce nada y al mismo tiempo no me salta ningún error... no se que puedo estar haciendo mal. Si alguien me puede revisar un poco el código lo agradecería... aunque sea un vistazo a ver si hay algo que yo no veo... y así ya de paso el que quiera usar el código pues perfecto! jejeje

Este es el tipico archivo de conexion y el de las funciones que utilizo:

Código PHP:
<?php

    $conn
;
    function 
conectar(){
        global 
$conn;
        
$conn mysql_connect("servidor","usuario","contraseña") or die (mysql_error());
        
mysql_select_db("usuario",$conn) or die (mysql_error());        
    }
    
    function 
desconectar() {
    
mysql_close($conn);
    }

?>
Código PHP:
<?php
require_once('class.phpmailer.php');
function 
mailActivacion($dir_correo$usuario$enlace){
    
$dominio "http://www.com/";
    
$mail = new PHPMailer();
    
$mail->IsSMTP();
    
$mail->SMTPAuth true;
    
$mail->SMTPSecure "tls";
    
$mail->Host       "smtp.gmail.com";
    
$mail->Port       587;
    
$mail->Username "usuario";
    
$mail->Password "Contraseña";
    
$body 
            <html> 
                <head> 
                   <title>Activar usuario</title> 
                </head> 
                <body> 
                    <h1>Hola'
;
    
$body .= $usuario;
    
$body .= '<p><b>Gracias por registrarte en</b>.</p>
            <p>Para completar el registro tienes que confirmar que has recibido el e-mail en el siguiente enlace:</p>
            <p style=text-align:center><a href='
;
    
$body .= $dominio $enlace;
    
$body .= " target=_blank>Activa tu usuario</a></p></body></html>";
    
$mail->SetFrom("[email protected]");
    
$mail->AddAddress($dir_correo,$usuario);
    
$mail->Subject "registro asdfasdf";
    
$mail->MsgHTML($body);
    
$mail->Send();
}

function 
generar_txtAct($longitud,$especiales){ 
                
// Array con los valores a escojer
        
$semilla = array(); 
        
$semilla[] = array('a','e','i','o','u');  
        
$semilla[] = array('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z'); 
        
$semilla[] = array('0','1','2','3','4','5','6','7','8','9'); 
        
$semilla[] = array('A','E','I','O','U');  
        
$semilla[] = array('B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','W','X','Y','Z'); 
        
$semilla[] = array('0','1','2','3','4','5','6','7','8','9'); 
         
        
// si puede contener caracteres especiales, aumentamos el array $semilla 
        
if ($especiales) { $semilla[] = array('$','#','%','&','@','-','?','¿','!','¡','+','-','*'); } 
         
        
// creamos la clave con la longitud indicada 
                
for ($bucle=0$bucle $longitud$bucle++)  
                { 
                    
// seleccionamos un subarray al azar 
                    
$valor mt_rand(0count($semilla)-1); 
                    
// selecccionamos una posicion al azar dentro del subarray 
                    
$posicion mt_rand(0,count($semilla[$valor])-1); 
                    
// cojemos el caracter y lo agregamos a la clave 
                    
$clave .= $semilla[$valor][$posicion]; 
                    } 
                    
// devolvemos la clave 
                    
return $clave
}

//FUNCION PARA INSERTAR EL REGISTRO EN LA TABLA users_temp
function insertarReg($name_$username_$password1_$email_$tipo_usuario_){
    
        
//Declaramos esta variable global, para poder usarla en toda la aplicación
        
global $url;
        
//LLamar a la función para generar el texto aleatorio para Activar Usuario.
        //Le pasamos como parámetro los caracteres que queremos generar y si los queremos especiales o no
        
$clave generar_txtAct(20,false);
        
//Montamos la estructura del enlace con la clave.
        
$url "activar.php?id=" $clave;
        
        
        
/*Teneis que declarar las variables $servidor, $usuario,$password y 
          $sdb (base de datos). En mi caso para Localhost tengo lo siguiente:*/
        
$servidor "servidor";
        
$usuario "usuario";
        
$password "contrasena";
        
$sdb "basedatos";
                
        
$ilink3=mysql_connect($servidor,$usuario,$password) or die(mysql_error()); 
        
mysql_select_db($sdb,$ilink3); 
        
        
$inserta"insert into users_temp (usersTemp,password,email,fecAlta,txt_Activ,tipo_usuario) values ('$username_','$password1_','$email_',CURDATE(),'$clave','$tipo_usuario_')";
        
$resultado3=mysql_query($inserta,$ilink3) or die (mysql_error());
        
        if (!
$resultado3)
        return 
false;
        else
            return 
true;
}

/*function validateName($name){
    //NO cumple longitud minima
    if(strlen($name) < 5)
        return false;
    //SI longitud pero NO solo caracteres A-z
    else if(!preg_match("/^[a-zA-Z]+$/", $name))
        return false;
    // SI longitud, SI caracteres A-z
    else
        return true;
}*/

function validateName($name){
$permitidos "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
    
$caracter1KO 0;
    if(
strlen($name) < 5):
        return 
false;
    else:
    for (
$i=0$i<strlen($name); $i++){ 
          if (
strpos($permitidossubstr($name,$i,1))===false){ 
             
$caracter1KO 1;
                 } 
    }
    endif;
    if (
$caracter1KO == || strlen($name) <= 4):
        return 
false;
    else:
        return 
true;
    endif;
}

function 
validateUsername($username){
    
$permitidos "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
    
$caracterKO 0;
    if(
strlen($username) < 5):
        return 
false;
    else:
    for (
$i=0$i<strlen($username); $i++){ 
          if (
strpos($permitidossubstr($username,$i,1))===false){ 
             
$caracterKO 1;
                 } 
    }
    endif;
    if (
$caracterKO == || strlen($username) <= 4):
        return 
false;
    else:
        return 
true;
    endif;
}


function 
validateExistUsername($username){
        
/*Teneis que declarar las variables $servidor, $usuario,$password y 
          $sdb (base de datos). En mi caso para Localhost tengo lo siguiente:*/
            
$servidor "servidor";
        
$usuario "usuario";
        
$password "contrasena";
        
$sdb "basedatos";
        
        
$ilink=mysql_connect($servidor,$usuario,$password) or die(mysql_error()); 

        
mysql_select_db($sdb,$ilink); 
        
$consulta"select usersTemp from users_temp where usersTemp = '$username'";
        
$resultado=mysql_query($consulta,$ilink) or die (mysql_error());
        if (
mysql_num_rows($resultado)>0)
            return 
false;
        else
            return 
true;
}

function 
validatePassword1($password1){
    
//NO tiene minimo de 5 caracteres o mas de 12 caracteres
    
if(strlen($password1) < || strlen($password1) > 12)
        return 
false;
    
// SI longitud, NO VALIDO numeros y letras
    
else if(!preg_match("/^[0-9a-zA-Z]+$/"$password1))
        return 
false;
    
// SI rellenado, SI email valido
    
else
        return 
true;
}

function 
validatePassword2($password1$password2){
    
//NO coinciden
    
if($password1 != $password2)
        return 
false;
    else
        return 
true;
}

function 
validateEmail($email){
    
if ((
strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){ 
           if ((!
strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) { 
              
//miro si tiene caracter . 
              
if (substr_count($email,".")>= 1){ 
                 
//obtengo la terminacion del dominio 
                 
$term_dom substr(strrchr ($email'.'),1); 
                 
//compruebo que la terminación del dominio sea correcta 
                 
if (strlen($term_dom)>&& strlen($term_dom)<&& (!strstr($term_dom,"@")) ){ 
                    
//compruebo que lo de antes del dominio sea correcto 
                    
$antes_dom substr($email,0,strlen($email) - strlen($term_dom) - 1); 
                    
$caracter_ult substr($antes_dom,strlen($antes_dom)-1,1); 
                    if (
$caracter_ult != "@" && $caracter_ult != "."){ 
                       
$mail_correcto 1
                    } 
                 } 
              } 
           } 
       } 
       if (
$mail_correcto
           return 
true
       else 
           return 
false


function 
validateExistMail($mail){
        
/*Teneis que declarar las variables $servidor, $usuario,$password y 
          $sdb (base de datos). En mi caso para Localhost tengo lo siguiente:*/
            
$servidor "servidor";
        
$usuario "usuario";
        
$password "contrasena";
        
$sdb "basedatos";
        
        
$ilink2=mysql_connect($servidor,$usuario,$password) or die(mysql_error()); 
        
mysql_select_db($sdb,$ilink2); 
        
$consulta2"select id_usersTemp from users_temp where email = '$mail'";
        
$resultado2=mysql_query($consulta2,$ilink2) or die (mysql_error());
        if (
mysql_num_rows($resultado2)>0)
            return 
false;
        else
            return 
true;
}

?>
  #2 (permalink)  
Antiguo 06/06/2011, 12:45
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 1 mes
Puntos: 17
Respuesta: Problema al insertar un dato en BD

El formulario.php

Código PHP:
<?php
include('funciones.php');


//Comprobacion de datos
//variables valores por defecto

$name "";
$nameValue "";
$username "";
$usernameValue "";
$password1 "";
$password2 "";
$passwordValue "";
$email1 "";
$emailValue "";
$existusername "";
$existEmail "";

$tipo_usuario "";
$tipo_usuarioValue "";

$existeU 0;
$existeE 0;

//Validacion de datos enviados
if(isset($_POST['send'])){
    if(!
validateName($_POST['name']))
        
$name "error";
    if(!
validateUsername($_POST['username']))
        
$username "error";
    if(!
validateExistUsername($_POST['username']))
        
$existusername "error";
    if(!
validatePassword1($_POST['password1']))
        
$password1 "error";
    if(!
validatePassword2($_POST['password1'], $_POST['password2']))
        
$password2 "error";
    if(!
validateEmail($_POST['email']))
        
$email1 "error";
    if(!
validateExistMail($_POST['email']))
        
$existEmail "error";
    
//Guardamos valores para que no tenga que reescribirlos
    
$tipo_usuarioValue $_POST['tipo_usuario'];
    
$nameValue $_POST['name'];
    
$usernameValue $_POST['username'];
    
$emailValue $_POST['email'];
    
$passwordValue $_POST['password2'];
    
    
    
//Comprobamos si todo ha ido bien
    
if($name != "error" && $username != "error" && $password1 != "error" && $password2 != "error" && $email1 != "error"){    
        if(
$existusername == "error"){
            
$existeU 1;    
        }
        if(
$existEmail == "error"){
            
$existeE 1;    
        }
        if (!
$existeU && !$existeE){
            
$status 1;
        }
    }    
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="es-ES">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Formulario de registro</title>
    <link rel="stylesheet" href="main.css" type="text/css" media="screen" />
</head>
<body>
    <div class="wrapper">    
        <div class="section">
            <?php if(!isset($status)): ?>
            
            <h1>Formulario de Registro</h1>
            
            <form id="form1" action="formulario.php" method="post">
            <label for="tipo_usuario">tipo de usuario:
            
            
            
  <select name="tipo_usuario" class="text <?php echo $tipo_usuario;?>" >
    <option value="<?php echo $tipo_usuarioValue;?>">Usuario a</option>
      <option value="<?php echo $tipo_usuarioValue;?>">Usuario a</option>
      <option value="<?php echo $tipo_usuarioValue;?>">Usuario c</option>
      
    </select></label>
            
   
            
            
            
                <label for="name">Nombre <?php if ($name == "error"): echo "<span style=color:red>"; else: echo "<span style=color:green>"; endif; ?>A-z, mínimo 5 caracteres</span></label>
                <input tabindex="1" name="name" id="name" type="text" class="text <?php echo $name ?>" value="<?php echo $nameValue ?>" />
                
                <label for="username">Nombre de usuario 
                    <?php 
                        
if ($username == "error" || $existusername == "error"): 
                            if (
$existusername == "error"):
                                echo 
"<span style=color:red>El usuario " $usernameValue " ya existe"
                            else:
                                echo 
"<span style=color:red>Caracteres de A-z, mínimo 5 caracteres (No números)";
                            endif; 
                        else: 
                            echo 
"<span style=color:green>Caracteres de A-z, mínimo 5 caracteres (No números)</span>"
                        endif; 
?>
                </label>
        
                <input tabindex="2" name="username" id="username" type="text" class="text <?php if ($existeU == 1):    echo $existusername; else: echo $username; endif;?>" value="<?php echo $usernameValue;?>" />
                
                <label for="password1">Contraseña <?php if ($password1 == "error"): echo "<span style=color:red>"; else: echo "<span style=color:green>"; endif; ?>Mínimo 5 caracteres, máximo 12 caracteres, letras y números</span></label>
                <input tabindex="3" name="password1" id="password1" type="password" class="text <?php echo $password1 ?>" value="" />
                
                <label for="password2">Repetir Contraseña <?php if ($password2 == "error"): echo "<span style=color:red>"; else: echo "<span style=color:green>"; endif; ?>Debe ser igual a la anterior</span></label>
                <input tabindex="4" name="password2" id="password2" type="password" class="text <?php echo $password2 ?>" value="" />
                
                <label for="email">Email <span>
                    <?php 
                        
if ($email1 == "error" || $existEmail == "error"): 
                            if (
$existEmail == "error"):
                                echo 
"<span style=color:red>El email " $emailValue " ya existe"
                            else:
                                echo 
"<span style=color:red>Escribe un email válido por favor";
                            endif; 
                        else:
                            echo 
"<span style=color:green>Escribe un email válido por favor</span>";
                        endif; 
?>
                </label>
                <input tabindex="5" name="email" id="email" type="text" class="text <?php echo $email1 ?>" value="<?php echo $emailValue ?>" />
                <div>
                    <input tabindex="6" name="send" id="send" type="submit" class="submit" value="Enviar formulario" />
                </div>
            </form>
            
            <?php else: ?>
                <?php 
                    
if(insertarReg($nameValue$usernameValue$passwordValue$emailValue$tipo_usuario)):?>
                        <h1>Registro introducido correctamente en la base de datos</h1>
                        
                        <div class="respuesta_insert">
                        <p>Gracias por registrarte.</p>
                        <p>Te hemos mandado un mail a <span style="color:green"><?php echo $emailValue?></span> para que confirmes el alta. Si no lo recibes comprueba la bandeja de correo no deseado</p>
                        <p>Gracias!</p>
                        <br><br>
                        <p>Administrador</p>
                        <p>Tutorial "Registro de Usuarios".</p>
                        <!-- <p>La clave que se enviará por URL es --> <?php //echo $url; ?> </p>
                        </div>
                        
                        <?php mailActivacion($emailValue$username$url); ?>

                        <!-- 
                        <div style="font-color: red">
                        <ul>
                                <li>Name: <?php $nameValue?></li>
                                <li>Username: <?php $usernameValue?></li>
                                <li>Password: <?php $passwordValue?></li>
                                <li>Email: <?php $emailValue?></li>
                        </ul> -->
                <?php else: ?>
                        <?php if ($respuesta == 1?>
                        <h1 style="font-color: red">No se ha podido insertar el registro en nuestra base de datos</h1>
                <!--<h1>¡Formulario enviado con éxito!</h1>-->
                <?php endif; ?>
            <?php endif; ?>
        </div>
    </div>
</body>
</html>
Me falta el archivo que activa la cuenta y la inserta en la tabla de usuarios definitivos pero es que no quiero que asusteis con tanto codigo , de todas formas en la tabla temporal tampoco me inserta el registro!! aaarrgg!!! si lo necesitais decidmelo... ;)
  #3 (permalink)  
Antiguo 06/06/2011, 14:20
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 1 mes
Puntos: 17
Respuesta: Problema al insertar un dato en BD

No se si al ver tanto código os da pereza!! jejejejej

Resumo un poco porque la verdad es que me he pasado con tanta historia y no he comentado el asunto en cuestión.

El select que tengo con las tres opciones (los tres usuarios) no tengo ni idea de como capturar el resultado e introducirlo al mismo tiempo en la base de datos, no se por qué pero no atino con el problema...

He pensado hacer una chapucilla y hacer una función que solo sea para insertar el tipo de usuario en la base de datos, y luego otra para insertar los demás datos... otra cosa no se me ocurre porque no se porqué todo se graba en la BD menos ese campo :(

Alguna sugerencia?? Por favor!!!!!!!
  #4 (permalink)  
Antiguo 06/06/2011, 14:30
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: Problema al insertar un dato en BD

es como dices es mucho código, aca te damos la idea de las cosas, pero leerse todo eso ufff da pereza en serio, lo que lei de tu ultimo comentario es que tienes un select con 3 valores yquieres guardarlos en la bd cuando hagan submit ?, es así ?

bueno...
<select name="usuarios">
<option value="tipo1">tipo1</option>
<option value="tipo2">tipo2</option>
<option value="tipo3">tipo3</option>
</select>

cuando haces el submit en el pho recoges $tipo = $_POST['usarios'];
cualquier cosa postea que te orientamos
  #5 (permalink)  
Antiguo 06/06/2011, 14:52
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 1 mes
Puntos: 17
Respuesta: Problema al insertar un dato en BD

Bueno en el documento que postee lo tengo de otra manera diferente a la que me has puesto (yo en value le meto un 'echo') porque ya he probado mil cosas!! jjejeje pero la version inicial era la mas normalita y lógica como has puesto tu y nada, el problema debe ser de la manera de insertar los datos en la bd, algo debe ir mal en esa funcion, voy a seguir dándole vueltas al asunto, de todas formas muchas gracias por contestar!! Y tu sinceridad al decirme que os he soltado un rollo de código que no hay quien se lo lea !! Pero como no se de donde viene el error pues lo he puesto todo!! XDDDD I'm sorry :p no volverá a pasar.

Un saludo y gracias!!
  #6 (permalink)  
Antiguo 06/06/2011, 14:57
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: Problema al insertar un dato en BD

mira, puedes hacer un echo a tu sql y pobrarlo en tu servidor mysql (phpmyadmin) y verás el error, puedes ponerlo aca si quieres y te vamos dicendo..

Etiquetas: bd, dato
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 17:00.