Comunidad de diseño web y desarrollo en internet online

Cambiar mensaje desde php

Citar            
MensajeEscrito el 03 Dic 2007 02:13 pm
Hola comunidad Cristalabera.

¿Es posible cambiar este mensaje?

Código :

Duplicate entry 'pepe' for key 2


¿Se puede cambiar esto por un mensaje mas personalizado?.

Por greel

41 de clabLevel



Genero:Masculino  

2003

msie
Citar            
MensajeEscrito el 03 Dic 2007 02:20 pm
No entiendo tu pregunta,
Eso que expones es un mensaje de error de la base de datos.-

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie
Citar            
MensajeEscrito el 03 Dic 2007 02:31 pm
Si, es un error que me da cuando ingresas un usuario repetido en la base de datos, que me gustaria cambiar por algo mas personalizado si es posible. ¿O no se puede cambiar?

Por greel

41 de clabLevel



Genero:Masculino  

2003

msie
Citar            
MensajeEscrito el 03 Dic 2007 03:36 pm
Si, es posible hacerlo....

La idea es capturar el tipo de error q te devuelve mysql y a partir de el cambiar el mensaje q muestra

Te paso parte de una clase q he usado bastante...

Código :

<?
class bbdd
{
   var $conn;
   /*
   constructor: bbdd
      Constructor de la clase.
      Realiza la conección a la base de datos
   */
   function bbdd($host,$user,$pass,$base){
        
      $conex=mysql_connect($host,$user,$pass);
      if($conex){
         if(!mysql_select_db($base, $conex))
            echo "no selecciono la bd";
      }else
         echo "no se conecto";
      $this->conn = $conex;
      
   }
   
   function query($sql){
      //realizo la consulta
      $r = mysql_query($sql, $this->conn);
      
      //verifico si hay errores
      if($this->errno()){
         //hay error
         return $this->debugDB();
      }else{
         return $r;
      }      
   }
   
   function errno(){
      $error = mysql_errno($this->conn);
      return $error;
   }
   
   function error(){
      $error = mysql_error($this->conn);
      return $error;
   }
   
   function debugDB(){
      $errores = array(
                  1062 => array(
                           "/Duplicate entry ('.*') for key [0-9]/",
                           'El valor \\1 esta siendo utilizado por otro registro <br/>'
                           ),
                  1216 => array(
                           "/Cannot add or update a child row: a foreign key constraint fails/",
                           "No se pudo agregar/actualizar hay datos que referencian a otras tablas y no existen<br/>"
                           ),
                  1217 => array(
                           "/Cannot delete or update a parent row: a foreign key constraint fails/",
                           "No se puede borrar/actualzar este registro porque esta relacionado con otros conceptos<br/>"
                           )
                  );
      $texto = preg_replace($errores[$this->errno()][0], $errores[$this->errno()][1], $this->error());
      if($texto == "")
         $texto = $this->error();
      echo "Error al cargar en la base de datos<br/>".$texto."<br/>";
      return false;
   }
}

//forma de usarla

$bd = new bbdd($host,$user,$pass,$base);
$r = $bd->query("INSERT INTO tabla (campo1,capo2,campo1) VALUES ('2','3','4')");

?>



De todas formas la mejor forma de hacerlo es mediante excepciones (http://es.php.net/manual/es/language.exceptions.php)... (este codigo te lo debo... lo tengo en casa y ahora estoy en otro lado :( )

Por 3w

145 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 03 Dic 2007 06:22 pm
Enseguida la pruebo. Muchas gracias 3w y por tu interes. Estoy muy agradecido por tu ayuda. Puedes contarme para lo que necesites!.

Por greel

41 de clabLevel



Genero:Masculino  

2003

msie
Citar            
MensajeEscrito el 03 Dic 2007 06:56 pm
Creo que con lo que tienes ya está bien, pero como vi tu mensaje y dije :o yo tengo algo así, se lo voy a pasar... voy a pensar que nadie más ha respondido y dejar el código aquí U_U

Tengo una clase, este es mi metodo de consulta:

Código :

   function enviarConsulta($sql)   {
      if(!($this->consulta = mysql_query($sql))) {
         $this->mysqlErrorHandler($sql);
      }
      return $this->consulta;
   }


si da error se llama a la funcion mysqlErrorHandler pasandole el $SQL completo:

Código :

   function mysqlErrorHandler($sql) {
      $error = mysql_error();
      $errorno = mysql_errno();
      if($errorno == 1062) {
         preg_match("@.+('.+').+([0-9])$@", $error, $coincidencias);
         $sql = "SHOW INDEX from $this->tabla";
         $resul = mysql_query($sql);
         $campos = "";
         $marca = "";
         $k = 1;
         while($vec = mysql_fetch_assoc($resul)) {
            if($k == $coincidencias[2]) {
               $campos .= $vec['Column_name'].', ';
            }
            if($marca != $vec['Key_name']) {
               $k += 1;
               if($k > $coincidencias[2]) {
                  break;
               }
            }
         }
         $this->error = "Error #$errorno: ".sprintf(REGISTRO_DUPLICADO, substr($campos, 0, -2), $coincidencias[1]);
      } else {
         //aca manejarias las otras excepciones de otra forma
      }
   }


aquí hay varios parámetros que tendrías que cambiar para que funcione:

$this->tabla >> nombre de la tabla
REGISTRO_DUPLICADO >> 'Registro duplicado: Ya se encuentra registrado en el sistema los campos "%s" con los valores "%s".'

Esto de devuelve un error con algo como 'Ya se encuentra registrado en el sistema los campos "marca, modelo" con los valores "chevrolet, corsa".'

Básicamente lo que hace el show index es buscar los indices de la tabla que están repetidos y traerlos para imprimirlos en el mensaje junto con los valores que introdujo el usuario. Ya que "key 2" no dice mucho, por ejemplo...

Hasta ahora no he necesitado hacer más submetodos para procesar otros errores, pero si lo necesito solo bastaria agregarlos ahi

Espero le sirva de ayuda a alguien...

Saludos

Por Duilio

Claber

2590 de clabLevel

25 tutoriales
1 articulo

Genero:Masculino   Premio_Secretos

Venezuela

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.