Foros del Web » Programando para Internet » PHP »

no guarda datos en la base de datos

Estas en el tema de no guarda datos en la base de datos en el foro de PHP en Foros del Web. buenas tardes tengo un inconveniente con el envio de datos desde mi formulario de registro el cual al dar enviar me comunica que se a ...
  #1 (permalink)  
Antiguo 12/09/2013, 14:38
 
Fecha de Ingreso: agosto-2012
Mensajes: 54
Antigüedad: 11 años, 8 meses
Puntos: 1
no guarda datos en la base de datos

buenas tardes tengo un inconveniente con el envio de datos desde mi formulario de registro el cual al dar enviar me comunica que se a realizado correctamente el registro pero al ver en mi base de datos no existe los datos ingresados y la verdad no me arroja ningun error.

nota "la conexion a la base de datos es correcta y tambien se realiza desde una class llamada enlace la cual se instancio en la class conn"

agradezco su ayuda.


pagina de registro.php
<?php
session_start();
if(isset($_POST['register']))
{
include'registrar.php';
$registrar = new Registrar();

if($registrar->confirmar()) {
echo "Felicitaciones registro exitoso";
header("Refresh: 5; URL=index.php");
} else {
$registrar->_errors();
}
}
?>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" >
<label for="apodo">Nick:</label>
<input type="text" name="apodo" id="apodo" maxlength="20" value="">
<label for="password">Contraseña:</label>
<input type="password" name="password" id="password" maxlength="20" value="">
<input type="hidden" name="token" value="<?php $token = $_SESSION['token'] = md5(uniqid(mt_rand(),true)); echo $token;?>">
<input type="submit" name="register" id="submit" value="registrar">
<input type="reset" value="Borrar">
</form>




/************************************************** *********************************
************************************************** *********************************
************************************************** *********************************/

archivo conexion.php
<?php
require'enlace.php';
class conn {
private $servidor;
private $usuario;
private $password;
private $database;

private static $_instance;

private function __construct() {
$this->enlaces();
$this->conectar();
}

public static function getInstance(){
if (!(self::$_instance instanceof self)){
self::$_instance = new self();
}
return self::$_instance;
}

private function enlaces(){
$enlace = enlace::getInstance();
$this->servidor = $enlace->hostin();
$this->usuario = $enlace->rot();
$this->password = $enlace->pasw();
$this->database = $enlace->test();
}

private function __clone() {
}

private function conectar() {
$mysqli = new mysqli($this->servidor, $this->usuario, $this->password, $this->database);
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}
echo 'Éxito... ' . $mysqli->host_info . "\n";
if (!$mysqli->set_charset("utf8")) {
printf("Error cargando el conjunto de caracteres utf8: %s\n", $mysqli->error);
} else {
printf("Conjunto de caracteres actual: %s\n", $mysqli->character_set_name());
}
$mysqli->close();
}
}
//conn::getInstance();
?>



/************************************************** *********************************
************************************************** *********************************
************************************************** *********************************/



registrar.php
<?php
require'conexion.php';
$mysqli = conn::getInstance();

class Registrar {
private $apodo;
private $contrase;
private $passmd5;

private $errors;
private $token;

public function __construct() {
$this->data();
}

private function data(){
$this->apodo = $_POST['apodo'];
$this->contrase = $_POST['contrase'];
$this->passmd5 = md5($this->contrase);
$this->errors = array();
$this->token = $_POST['token'];
}

public function confirmar() {
if($this->_token() && $this->_data())
$this->users();
return count($this->errors)? 0 : 1;
}

public function users() {
if (isset($mysqli)) {
$mysqli = conn::getInstance();
$mysqli->query("INSERT INTO usuario(apodo,contrase) VALUES (''{$this->apodo}','{$this->passmd5}')");
if($mysqli->affected_rows< 1)
$this->errors[] = 'Could Not Process Form';
}
}

public function existe() {
if (isset($mysqli)) {
$mysqli = conn::getInstance();
$result = $mysqli->query("SELECT id FROM usuario WHERE apodo = '{$this->apodo}'");
$row_cnt = $result->num_rows;
return $row_cnt? 1 : 0;
$result->close();
}

}

public function _errors() {
echo "<h3>Errors</h3>";
foreach($this->errors as $key=>$value)
echo $value."<br>";
}

public function _data() {
if($this->existe()) {
$this->errors[] = 'El seudonimo digitado ya se encuentra en uso';
}
if(empty($this->apodo)) {
$this->errors[] = 'Digite su seudonimo para ingresar a esta web';
}
if(empty($this->contrase)) {
$this->errors[] = 'Sin la contraseña no podra ingresar en el futuro';
}
return count($this->errors)? 0 : 1;
}

public function _token() {
if(!isset($_SESSION['token']) || $this->token != $_SESSION['token'])
$this->errors[] = 'Invalid Submission';
return count($this->errors)? 0 : 1;
}
}
?>

Última edición por liberenatu; 12/09/2013 a las 14:59
  #2 (permalink)  
Antiguo 12/09/2013, 18:53
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 10 años, 8 meses
Puntos: 55
Respuesta: no guarda datos en la base de datos

Hola, debes usar el Highlight; es horrible intentar leer el codigo así.

Debes revisar tu operador ternario.

return count($this->errors)? 0 : 1;

Un operador ternario es un if simplificado.
Saludos
  #3 (permalink)  
Antiguo 13/09/2013, 07:02
 
Fecha de Ingreso: agosto-2012
Mensajes: 54
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: no guarda datos en la base de datos

te agradezco la información Erick_MD9
con respecto a la lectura del código tienes razón pero la verdad es que aun no conozco bien el uso de las herramientas de esta web.

por otro lado realizare los pasos que me haz descrito y comentare luego que a pasado.
  #4 (permalink)  
Antiguo 13/09/2013, 07:05
 
Fecha de Ingreso: agosto-2012
Mensajes: 54
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: no guarda datos en la base de datos

Código PHP:
Ver original
  1. buenas tardes tengo un inconveniente con el envio de datos desde mi formulario de registro el cual al dar enviar me comunica que se a realizado correctamente el registro pero al ver en mi base de datos no existe los datos ingresados y la verdad no me arroja ningun error.
  2.  
  3.  nota "la conexion a la base de datos es correcta y tambien se realiza desde una class llamada enlace la cual se instancio en la class conn"
  4.  
  5.  agradezco su ayuda.
  6.  
  7.  
  8.  pagina de registro.php
  9.  <?php
  10.  if(isset($_POST['register']))
  11.  {
  12.  include'registrar.php';
  13.  $registrar = new Registrar();
  14.  
  15.  if($registrar->confirmar()) {
  16.  echo "Felicitaciones registro exitoso";
  17.  header("Refresh: 5; URL=index.php");
  18.  } else {
  19.  $registrar->_errors();
  20.  }
  21.  }
  22.  ?>
  23.  <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" >
  24.  <label for="apodo">Nick:</label>
  25.  <input type="text" name="apodo" id="apodo" maxlength="20" value="">
  26.  <label for="password">Contraseña:</label>
  27.  <input type="password" name="password" id="password" maxlength="20" value="">
  28.  <input type="hidden" name="token" value="<?php $token = $_SESSION['token'] = md5(uniqid(mt_rand(),true)); echo $token;?>">
  29.  <input type="submit" name="register" id="submit" value="registrar">
  30.  <input type="reset" value="Borrar">
  31.  </form>
  32.  
  33.  
  34.  
  35.  
  36.  /************************************************** *********************************
  37.  ************************************************** *********************************
  38.  ************************************************** *********************************/
  39.  
  40.  archivo conexion.php
  41.  <?php
  42.  require'enlace.php';
  43.  class conn {
  44.  private $servidor;
  45.  private $usuario;
  46.  private $password;
  47.  private $database;
  48.  
  49.  private static $_instance;
  50.  
  51.  private function __construct() {
  52.  $this->enlaces();
  53.  $this->conectar();
  54.  }
  55.  
  56.  public static function getInstance(){
  57.  if (!(self::$_instance instanceof self)){
  58.  self::$_instance = new self();
  59.  }
  60.  return self::$_instance;
  61.  }
  62.  
  63.  private function enlaces(){
  64.  $enlace = enlace::getInstance();
  65.  $this->servidor = $enlace->hostin();
  66.  $this->usuario = $enlace->rot();
  67.  $this->password = $enlace->pasw();
  68.  $this->database = $enlace->test();
  69.  }
  70.  
  71.  private function __clone() {
  72.  }
  73.  
  74.  private function conectar() {
  75.  $mysqli = new mysqli($this->servidor, $this->usuario, $this->password, $this->database);
  76.  printf("Falló la conexión: %s\n", mysqli_connect_error());
  77.  exit();
  78.  }
  79.  echo 'Éxito... ' . $mysqli->host_info . "\n";
  80.  if (!$mysqli->set_charset("utf8")) {
  81.  printf("Error cargando el conjunto de caracteres utf8: %s\n", $mysqli->error);
  82.  } else {
  83.  printf("Conjunto de caracteres actual: %s\n", $mysqli->character_set_name());
  84.  }
  85.  $mysqli->close();
  86.  }
  87.  }
  88.  //conn::getInstance();
  89.  ?>
  90.  
  91.  
  92.  
  93.  /************************************************** *********************************
  94.  ************************************************** *********************************
  95.  ************************************************** *********************************/
  96.  
  97.  
  98.  
  99.  registrar.php
  100.  <?php
  101.  require'conexion.php';
  102.  $mysqli = conn::getInstance();
  103.  
  104.  class Registrar {
  105.  private $apodo;
  106.  private $contrase;
  107.  private $passmd5;
  108.  
  109.  private $errors;
  110.  private $token;
  111.  
  112.  public function __construct() {
  113.  $this->data();
  114.  }
  115.  
  116.  private function data(){
  117.  $this->apodo = $_POST['apodo'];
  118.  $this->contrase = $_POST['contrase'];
  119.  $this->passmd5 = md5($this->contrase);
  120.  $this->errors = array();
  121.  $this->token = $_POST['token'];
  122.  }
  123.  
  124.  public function confirmar() {
  125.  if($this->_token() && $this->_data())
  126.  $this->users();
  127.  return count($this->errors)? 0 : 1;
  128.  }
  129.  
  130.  public function users() {
  131.  if (isset($mysqli)) {
  132.  $mysqli = conn::getInstance();
  133.  $mysqli->query("INSERT INTO usuario(apodo,contrase) VALUES (''{$this->apodo}','{$this->passmd5}')");
  134.  if($mysqli->affected_rows< 1)
  135.  $this->errors[] = 'Could Not Process Form';
  136.  }
  137.  }
  138.  
  139.  public function existe() {
  140.  if (isset($mysqli)) {
  141.  $mysqli = conn::getInstance();
  142.  $result = $mysqli->query("SELECT id FROM usuario WHERE apodo = '{$this->apodo}'");
  143.  $row_cnt = $result->num_rows;
  144.  return $row_cnt? 1 : 0;
  145.  $result->close();
  146.  }
  147.  
  148.  }
  149.  
  150.  public function _errors() {
  151.  echo "<h3>Errors</h3>";
  152.  foreach($this->errors as $key=>$value)
  153.  echo $value."<br>";
  154.  }
  155.  
  156.  public function _data() {
  157.  if($this->existe()) {
  158.  $this->errors[] = 'El seudonimo digitado ya se encuentra en uso';
  159.  }
  160.  if(empty($this->apodo)) {
  161.  $this->errors[] = 'Digite su seudonimo para ingresar a esta web';
  162.  }
  163.  if(empty($this->contrase)) {
  164.  $this->errors[] = 'Sin la contraseña no podra ingresar en el futuro';
  165.  }
  166.  return count($this->errors)? 0 : 1;
  167.  }
  168.  
  169.  public function _token() {
  170.  if(!isset($_SESSION['token']) || $this->token != $_SESSION['token'])
  171.  $this->errors[] = 'Invalid Submission';
  172.  return count($this->errors)? 0 : 1;
  173.  }
  174.  }
  175.  ?>
  #5 (permalink)  
Antiguo 13/09/2013, 07:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: no guarda datos en la base de datos

Yo, por lo pronto, estoy viendo un apóstrofo de más en el VALUE de este INSERT:
Código PHP:
Ver original
  1. $mysqli->query("INSERT INTO usuario(apodo,contrase) VALUES (''{$this->apodo}','{$this->passmd5}')");

Que debería ser:
Código PHP:
Ver original
  1. $mysqli->query("INSERT INTO usuario(apodo, contrase) VALUES ('{$this->apodo}', '{$this->passmd5}')");
Por otro lado, no estoy muy seguro del efecto de los corchetes. No soy experto en PHP en ese punto.
Una cosa que si deberías es recuperar el error devuelto por MySQL, en caso de suceder y no poner cualquier mensaje. Las bases de datos tienen errores codificados, que indican bastante claramente qué falla cuando falla.
Esto, en cambio, no dice absolutamente nada útil:
Código PHP:
Ver original
  1. $this->errors[] = 'Could Not Process Form';
Aprovechalos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 13/09/2013, 10:27
 
Fecha de Ingreso: agosto-2012
Mensajes: 54
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: no guarda datos en la base de datos

Código PHP:
Ver original
  1. buenas tardes gnzsoloyo realmente realice algunos cambios pero nada funciona reduciré el código del problema a esto
  2.  
  3. primero que todo la class register funciona bien si realizo la conexión a mi base de datos de la forma normal los datos son almacenados en la base de datos.
  4.  
  5.  public function users() {
  6.  $mysqli = new mysqli('localhos','usuario','contraseña','basededatos');
  7.  $mysqli->query("INSERT INTO usuario(apodo,contrase) VALUES ('".{$this->apodo."','".$this->passmd5."')");
  8.   }
  9.  
  10.  public function existe() {
  11.  $mysqli = new mysqli('localhos','usuario','contraseña','basededatos');
  12.  $result = $mysqli->query("SELECT id FROM usuario WHERE apodo = '".$this->apodo."'");
  13.  $row_cnt = $result->num_rows;
  14.  return $row_cnt? 1 : 0;
  15.  $result->close();
  16.  }
  17.  }

Código PHP:
Ver original
  1. pero el inconveniente me empieza a surgir cuando utilizo la class con dentro de la clas register y específicamente en la función users que seria de la siguiente forma
  2.  
  3. public function users() {
  4.  $mysqli = conn::getInstance();
  5.  $mysqli->query("INSERT INTO usuario(apodo,contrase) VALUES ('".{$this->apodo."','".$this->passmd5."')");
  6.  }
  7.  
  8.  public function existe() {
  9.  $mysqli = conn::getInstance();
  10.  $result = $mysqli->query("SELECT id FROM usuario WHERE apodo = '".$this->apodo."'");
  11.  $row_cnt = $result->num_rows;
  12.  return $row_cnt? 1 : 0;
  13.  $result->close();
  14.  }
  15.  
  16. de esta forma me lanza los siguientes errores
  17.  
  18. Fatal error: Call to undefined method conn::query() in C:registrar.php on line xx
  19.  
  20. pero si defino el método mediante un isset no arroja  error realiza como si se enviara la información y me redirige a la pagina de inicio.php
  21.  
  22. la forma como defini el primer error fue la siguiente
  23.  
  24. public function users() {
  25. if(isset($mysqli)){
  26.  $mysqli = conn::getInstance();
  27.  $mysqli->query("INSERT INTO usuario(apodo,contrase) VALUES ('".{$this->apodo."','".$this->passmd5."')");
  28. }
  29.  }
  30.  
  31.  public function existe() {
  32. if(isset($mysqli)){
  33.  $mysqli = conn::getInstance();
  34.  $result = $mysqli->query("SELECT id FROM usuario WHERE apodo = '".$this->apodo."'");
  35.  $row_cnt = $result->num_rows;
  36.  return $row_cnt? 1 : 0;
  37.  $result->close();
  38. }
  39.  }
  40.  
  41. y la verdad ya no se que hacer mas agradezco orientacion
  #7 (permalink)  
Antiguo 13/09/2013, 10:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: no guarda datos en la base de datos


Ahora estás haciendo al revés: Estás poniendo el texto de lo que dices dentro de los highlights, y resulta confuso.
Pon únicamente el código PHP entre los highligts, no el texto de lo que tu escribes...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 13/09/2013, 12:20
 
Fecha de Ingreso: agosto-2012
Mensajes: 54
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: no guarda datos en la base de datos

buenas tardes gnzsoloyo realmente realice algunos cambios pero nada funciona reduciré el código del problema a esto

primero que todo la class register funciona bien si realizo la conexión a mi base de datos de la forma normal los datos son almacenados en la base de datos.

Código PHP:
Ver original
  1. public function users() {
  2. $mysqli = new mysqli('localhos','usuario','contraseña','basededatos');
  3. $mysqli->query("INSERT INTO usuario(apodo,contrase) VALUES ('".{$this->apodo."','".$this->passmd5."')");
  4.  }
  5.  
  6.  
  7. public function existe() {
  8. $mysqli = new mysqli('localhos','usuario','contraseña','basededatos');
  9. $result = $mysqli->query("SELECT id FROM usuario WHERE apodo = '".$this->apodo."'");
  10. $row_cnt = $result->num_rows;
  11. return $row_cnt? 1 : 0;
  12. $result->close();
  13. }
  14. }
pero el inconveniente me empieza a surgir cuando utilizo la class con dentro de la clas register y específicamente en la función users que seria de la siguiente forma

Código PHP:
Ver original
  1. public function users() {
  2. $mysqli = conn::getInstance();
  3. $mysqli->query("INSERT INTO usuario(apodo,contrase) VALUES ('".{$this->apodo."','".$this->passmd5."')");
  4. }
  5.  
  6. public function existe() {
  7. $mysqli = conn::getInstance();
  8. $result = $mysqli->query("SELECT id FROM usuario WHERE apodo = '".$this->apodo."'");
  9. $row_cnt = $result->num_rows;
  10. return $row_cnt? 1 : 0;
  11. $result->close();
  12. }
de esta forma me lanza los siguientes errores
Fatal error: Call to undefined method conn::query() in C:registrar.php on line xx


pero si defino el método mediante un isset no arroja error realiza como si se enviara la información y me redirige a la pagina de inicio.php

la forma como defini el primer error fue la siguiente

Código PHP:
Ver original
  1. public function users() {
  2.  
  3. if(isset($mysqli)){
  4. $mysqli = conn::getInstance();
  5. $mysqli->query("INSERT INTO usuario(apodo,contrase) VALUES ('".{$this->apodo."','".$this->passmd5."')");
  6. }
  7. }
  8.  
  9. public function existe() {
  10. if(isset($mysqli)){
  11. $mysqli = conn::getInstance();
  12. $result = $mysqli->query("SELECT id FROM usuario WHERE apodo = '".$this->apodo."'");
  13. $row_cnt = $result->num_rows;
  14. return $row_cnt? 1 : 0;
  15. $result->close();
  16. }
  17. }
y la verdad ya no se que hacer mas agradezco orientacion
  #9 (permalink)  
Antiguo 13/09/2013, 14:24
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 10 años, 8 meses
Puntos: 55
Respuesta: no guarda datos en la base de datos

Hola.
El error de undefined method es por que no esta llegando tu objeto mysqli correctamente.

Inentas hacer un singleton, te dejo aqui una clase y su uso básico.
Código PHP:
Ver original
  1. class dbConeccion {
  2.  
  3.     private static $servidor = 'localhost';
  4.     private static $usuario = '';
  5.     private static $password = '';
  6.     private static $database='';
  7.     private static $instance;
  8.    
  9.     private function __construct() {}
  10.    
  11.     public static function getInstance(){  
  12.         if (!isset(self::$instance)){
  13.             $mysqli = new mysqli(self::$servidor, self::$usuario, self::$password, self::$database);
  14.                 if (mysqli_connect_errno()) {
  15.                     printf("Falló la conexión: %s\n", mysqli_connect_error());
  16.                     exit();
  17.                 }
  18.                 if (!$mysqli->set_charset("utf8")) {
  19.                     printf("Error cargando el conjunto de caracteres utf8: %s\n", $mysqli->error);
  20.                     exit();
  21.                 }
  22.                 self::$instance= $mysqli;
  23.         }
  24.         return self::$instance;  
  25.     }
  26.    
  27.     public function __clone() {  
  28.         printf("NO SE PERMITE DUPLICAR ESTO");
  29.         exit();
  30.     }
  31.  
  32. }

DONDE QUIERAS USAR LA CONECCION EXISTENTE USAS

$MYSQLI=dbConeccion::getInstance();

YO PREFIERO USARLA EN EL COSTRUCTOR DE LAS CLASE Y COLOCARLA COMO UNA PROPIEDAD, LOS METODOS QUE LA OCUPEN LLAMO A LA PROPIEDAD DEL OBJETO.

EJEMPLO:

Código PHP:
Ver original
  1. class xxxxxxxxxxxxxx{
  2.  
  3. private $mysqli;
  4.  
  5.     function __construct(){
  6.         $this->mysqli=DB_CONECTION::getInstance();
  7.     }
  8.  
  9.     function hacerAlgo(){
  10.         $mysqli=$this->mysqli;
  11.         $mysqli->query("INSERT INTO usuario(apodo,contrase) VALUES ('aaaa','bbbbbb')");
  12.     }
  13.  
  14. }

Espero te sirva. Saludos

Etiquetas: formulario, mysql, registro, select, sql
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 20:35.