Jump to content


Photo

Duda con Update Mysql


  • Please log in to reply
5 replies to this topic

#1 Lestat

Lestat

    Member

  • Miembros
  • PipPip
  • 28 posts
  • Locationvenezuela

Posted 24 October 2012 - 11:52 AM

Hola, Buena Tardes, reciban un cordial saludo, les escribo por que estoy haciendo una web con php poo mvc y tengo una duda que es la siguiente

Tengo La Siguiente Tabla:

CREATE TABLE IF NOT EXISTS `account` (
    `id_account` int(11) NOT NULL auto_increment,
    `name` varchar(45) not null,
    `password` varchar(65) not null,
    `email` varchar(100) not null,
    `creation_date` timestamp NOT NULL default '0000-00-00 00:00:00',
    `last_ip` varchar(20) default null,
    `access_lvl` tinyint(3) not null default '0',
    `online` tinyint(1) not null default '0',<----Esta Parte
    PRIMARY KEY (`id_account`),
    UNIQUE KEY `name` (`name`),
    UNIQUE KEY `email` (`email`),
    UNIQUE KEY `last_ip` (`last_ip`)
)    ENGINE=InnoDB DEFAULT CHARSET=utf8;


Si Miran donde te marque  tengo una columna que se llama online que manejara  de la siguiente manera 0 desconectado, 1 conectado..

Ahora en la Parte del Login Tengo lo Siguiente  en el Archivo a procesar Tengo el Siguiente Metodo
public function Login_Db ()
    {
        if(empty($_POST["nick"]) or  empty($_POST["password"]))
        {
            header("LOcation: ".Conectar::ruta()."?accion=index&s=1");
            exit;
        }else{
            $power = "gamer";
            $_pass = $_POST["password"] + $power;
            // Crypt password
            $pass_web = md5($_pass);
            $passwordcript = base64_encode($pass_web);
         
            parent::Connect_Db();
         
            $sql = sprintf
            (
                "SELECT id_account,name,password,email,access_level,online From account WHERE name=%s and password=%s",
                parent::Anti_Sql($_POST["nick"]),
                parent::Anti_Sql($passwordcript)
            );
         
            $reg = mysql_query($sql);
            if($res = mysql_fetch_array($reg))
            {
                $_SESSION["ID_SESSION"] = $res["id_account"];
                $_SESSION["USER_SESSION"] = $res["nickname"];
                $_SESSION["EMAIL_SESSION"] = $res["email"];
                $_SESSION["ACCESS_SESION"] = $res["access_level"];
                $_SESSION["ONLINE_SESSION"] = $res["online"];
         
                header("Location: ".Conectar::ruta()."?accion=home&s=3");
                exit;
            }else{
                header("Location: ".Conectar::ruta()."?accion=index&s=2");
                exit;
            }
        }
    }


Ahora Voy a Mi Duda En que Parte  Tengo que hacer el Update de la columna online para que lo cambie a 1 no se si hacerlo dentro de este if

     
     Update AQUI?
            if($res = mysql_fetch_array($reg))
            {
                Update AQUI?
                $_SESSION["ID_SESSION"] = $res["id_account"];
                $_SESSION["USER_SESSION"] = $res["nickname"];
                $_SESSION["EMAIL_SESSION"] = $res["email"];
                $_SESSION["ACCESS_SESION"] = $res["access_level"];
                $_SESSION["ONLINE_SESSION"] = $res["online"];
              Update AQUI?
         
                header("Location: ".Conectar::ruta()."?accion=home&s=3");
                exit;

O Antes De Ese If.
Mi Otra Duda  Para Hacer el Update Tengo que Hacer otro if, por que estaba  viendo que no seria necesario ya que cuando el hace la consulta ya viene con los datos de comparacion y de que el usuario ya existe...

Gracias Ante mano
  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 24 October 2012 - 12:44 PM

Desde mi perspectiva... podrías hacerlo despúes de validar que se ha conectado y anets de iniciar la sesión...



if($res = mysql_fetch_array($reg))
  { 
            Update AQUI?
            $_SESSION["ID_SESSION"] = $res["id_account"];


Y te voy a decir por qué: qué ocurrirá si al actualizar el campo de conectado ocurre un error?, aún así registrarias la sesión? Considero que en este punto. podrías validar si la operación de cambio de estatus ha sido correcta, de serlo iniciarias la sesión y darias paso libre al usuario. Pero si por x motivo la actualización falla, podrías redireccionarlo a una pantalla mencionándole el error y solicitando vuelva a logearse...

Si el éxito en cambio de estatus es irrelevante, entonces puede ir en el bloque que propongo al final del inicio del bloque de sesión , puesto que es irelevante su éxito.

Saludox
  • 0

#3 Lestat

Lestat

    Member

  • Miembros
  • PipPip
  • 28 posts
  • Locationvenezuela

Posted 24 October 2012 - 01:20 PM

tu me dices que deberia de hacerlo asi

$sql = sprintf
(
"SELECT id_account,name,password,email,access_level,online From account WHERE nickname=%s and password=%s",
parent::Anti_Sql($_POST["nick"]),
parent::Anti_Sql($passwordcript)
);

$reg = mysql_query($sql);
if($res = mysql_fetch_array($reg))
{
                  mysql_query("UPDATE account SET online='1'");

                    if($res["online"] == 1)
                          {
$_SESSION["ID_SESSION"] = $res["id_account"];
$_SESSION["USER_SESSION"] = $res["nickname"];
$_SESSION["EMAIL_SESSION"] = $res["email"];
$_SESSION["ACCESS_SESION"] = $res["access_level"];
$_SESSION["ONLINE_SESSION"] = $res["online"];

header("Location: ".Conectar::ruta()."?accion=home&s=3");
exit;
                            }else{
                                      header("Location: ".Conectar::ruta()."?accion=home&s=4");
      exit;
                                    }
}else{
header("Location: ".Conectar::ruta()."?accion=index&s=2");
exit;
}

  • 0

#4 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 24 October 2012 - 02:25 PM

Yo diría más bien así:


$sql = sprintf(
"SELECT id_account,name,password,email,access_level,online From account WHERE nickname=%s and password=%s",
parent::Anti_Sql($_POST["nick"]),
parent::Anti_Sql($passwordcript)
              );
$reg = mysql_query($sql);
if($res = mysql_fetch_array($reg))
  {
    if (mysql_query("UPDATE account SET online='1' where id_account=".$res["id_account"])) {
$_SESSION["ID_SESSION"] = $res["id_account"];
$_SESSION["USER_SESSION"] = $res["nickname"];
$_SESSION["EMAIL_SESSION"] = $res["email"];
$_SESSION["ACCESS_SESION"] = $res["access_level"];
$_SESSION["ONLINE_SESSION"] = $res["online"];
header("Location: ".Conectar::ruta()."?accion=home&s=3");
exit;
    }
    else {
        header("Location: ".Conectar::ruta()."?accion=home&s=4");
exit;
    }
  }
  else {
header("Location: ".Conectar::ruta()."?accion=index&s=2");
exit;
  }

  • 0

#5 Lestat

Lestat

    Member

  • Miembros
  • PipPip
  • 28 posts
  • Locationvenezuela

Posted 24 October 2012 - 02:39 PM

Gracias Men Problema  Resuelto xD
  • 0

#6 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 24 October 2012 - 02:49 PM

Gracias Men Problema  Resuelto xD


Me alegra saber que te ha funcionado.... saludox
  • 0




IP.Board spam blocked by CleanTalk.