Comunidad de diseño web y desarrollo en internet online

Fatal error: Call to undefined function

Citar            
MensajeEscrito el 30 May 2007 05:24 am
Estoy tratando de hacer un formulario con captcha, y el captcha lo estoy generando con una clase, la cual importo a un archivo formulario.php e inserto la imagen; por el momento no eh validado nada porque nisiquiera puedo hacer aparecer el captcha :oops:

Este es el codigo de error:
Fatal error: Call to undefined function: getcadenaencrip() in /usr/home/la100rra/public_html/jorgelig/pedidos/captcha.php on line 27


captcha:

Código :

<?php
define("CARPETA","fuentes/"); //nombre de la carpeta donde tenemos guardadas las imagenes, fuente y demas
define("NOMBREFONDO","captcha"); //nombre de la imagen de fondo del captcha, sin la extencion (ejem: imagen.pnp, seria "imagen"
define("EXTIMG","png");//extencion de la imagen del fondo(ejem: imagen.png seria "png")
define("FUENTELETRA","VeraBd.ttf"); //nombre con extencion del arcvhivo de la fuente a usar
define("TAMFUENTE",12); //definimos el tamano de la fuente
define("TAMANOCAPTCHA",5); //tamano del codigo que queremos que aparesca en el captcha
define("NUMEROLINEAS",7); //numero de lineas a dibujar en el captcha
define("MAXFILES",5); //numero maximo de archivos que se guardaran temporalmente una vez que se genere el captcha

class captcha{
   function getcadenaencrip($tamanocaptcha){
      do {
         $md5Hash = md5( microtime( ) * mktime( ) );// Generamos un string aleatorioamente y lo encriptamos con md5
         preg_replace( '([1aeilou0])', "", $md5Hash ); //quitamos los caracteres indistinguibles
      } while( strlen( $md5Hash ) < $tamanocaptcha ); //generaremos el numero de caracteres que dice $captchaTextSize
      $cadenaencriptada = substr( $md5Hash, 0, $tamanocaptcha ); //guardamos la clave encriptada en la variable de sesion
      
      return $cadenaencriptada;
   }
   
   function crearimagen(){
      $captchafondo = imagecreatefrompng( CARPETA.NOMBREFONDO.".".EXTIMG );//Especificamos la imagen del fondo
      $colortexto = imagecolorallocate( $captchafondo, 31, 118, 92 ); //elegimos color de texto
      $colorlineas = imagecolorallocate( $captchafondo, 15, 103, 103 );//elegimos color de lineas
      $infoimagen = getimagesize( CARPETA.NOMBREFONDO.".".EXTIMG);  //recuperamos tama�o de la imagen de fondo
      $codigo=getcadenaencrip(TAMANOCAPTCHA);
      
      //dibujamos las lineas
      for($i=0;$i<NUMEROLINEAS;$i++){
         $inicioX= mt_rand( 0, $imageInfo[ 0 ] ); 
         $finX= mt_rand( 0, $imageInfo[ 0 ] ); 
         //dibujamos lineas en el captcha
         imageline( $captchafondo, $xStart, 0, $xEnd, $imageInfo[1], $lineColor ); 
      }
      
      imagettftext( $captchafondo, TAMFUENTE, 10, 35, 35, $colortexto, CARPETA.FUENTELETRA,$codigo); 
      
      //Preparamos cabeceras de la imagen para que no se guarde en cache
      header ("Content-type:".CARPETA.EXTIMG);
      header("Cache-Control: no-cache, must-revalidate");
      header("Expires: Fri, 19 Jan 1994 05:00:00 GMT");
      header("Pragma: no-cache");
      
      imagepng($captchafondo); 
   }
   
   function borraimagenesguardadas(){
   $DIR=opendir(CARPETA);
   $imagenes=array();
      while(($nombre=readdir($DIR))){
         if($nombre!= "." && $name != ".."){
            $imagenes=$nombre;
         }
      }
      closedir($DIR);
      if(count($imagenes)==0)return;
      rsort($imagenes);
      while(count($imagenes)>MAXARCHIVOSIMAGENES)
      {
         $last=array_pop($imagenes);
         unlink(CARPETA.$last);
      }
   }

}

?>

El formulario index.php

Código :

<?php
session_start(); //iniciamos la sesión

require_once('captcha.php');
$captcha = new Captcha();
?>

<html>
<head></head>
<body>
<form action="validacion.php” method="post">
  <?php $_SESSION['image_name'] =$captcha->crearimagen(); ?>
  <img src="<?php echo $_SESSION[’image_name’] ?>">
  <input type="text" name="imageText" />
  <input type="submit" name="action" value="Submit" />
</form>
</body>
</html>


El formulario lo tengo montado aqui:
http://jorgelig.la100rra.com.mx/pedidos/

Pd. La libreria GD esta habilitada
gd
GD Support enabled
GD Version bundled (2.0.28 compatible)
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled

Por Jorgelig

Claber

3035 de clabLevel

12 tutoriales

 

Monterrey, Nuevo Leon, MX

firefox
Citar            
MensajeEscrito el 30 May 2007 06:53 am
Bueno, veo un par de cosas, primero, donde estás construyendo el objeto?? (__construct)
Segundo, puede ser que la debas llamar asi:

Código :

$codigo=$this->getcadenaencrip(TAMANOCAPTCHA);

en vez de así...

Código :

$codigo=getcadenaencrip(TAMANOCAPTCHA);


Espero que sirva de algo, un saludo...

Por Johnny

Claber

1589 de clabLevel

4 tutoriales

  Héroes

firefox
Citar            
MensajeEscrito el 30 May 2007 01:55 pm
ya checaste esto http://recaptcha.net/ ? si fuera a utilizar un captcha usaría ese, seguro. además de prevenir spam ayuda a digitalizar textos, es una muy buena idea.

Por fael

BOFH

2443 de clabLevel

3 tutoriales
2 articulos

 

firefox
Citar            
MensajeEscrito el 30 May 2007 02:11 pm

Johnny escribió:

Bueno, veo un par de cosas, primero, donde estás construyendo el objeto?? (__construct)
Segundo, puede ser que la debas llamar asi:

Código :

$codigo=$this->getcadenaencrip(TAMANOCAPTCHA);

en vez de así...

Código :

$codigo=getcadenaencrip(TAMANOCAPTCHA);


Espero que sirva de algo, un saludo...


use $this->getcadenaencript(TAMANOCAPTCHA); como sugeriste pero ahora me marca un error en la linea 37:

Código :

Fatal error: Call to undefined function: imagettftext() in /usr/home/la100rra/public_html/jorgelig/pedidos/captcha.php on line 37


Estoy basandome en este ejemplo y tampoco veo el __construc :(

fael escribió:

ya checaste esto http://recaptcha.net/ ? si fuera a utilizar un captcha usaría ese, seguro. además de prevenir spam ayuda a digitalizar textos, es una muy buena idea.

Esta muy bueno tnks por el dato, pero soy algo.........como decirlo.........orgullosillo y no me quiero quedar con el mal sabor de boca que no pude hacerlo XD. Pero lo tendre en cuenta para cuandome toque algo un poco mas serio y no disponga de tiempo para experimentar y hacerlo por mi mismo (eeeeeeeeeh acaba de terminar el semestre y tengo tiempo libre, que mejor manera de celebrarlo XD )

Por Jorgelig

Claber

3035 de clabLevel

12 tutoriales

 

Monterrey, Nuevo Leon, MX

firefox
Citar            
MensajeEscrito el 30 May 2007 02:28 pm
eso es más raro, ya que es una de las funciones de GD, revisa que de verdad la tienes, a ver si es eso...

Por Johnny

Claber

1589 de clabLevel

4 tutoriales

  Héroes

firefox
Citar            
MensajeEscrito el 30 May 2007 05:20 pm
Lean bien la documentación de php.net sobre esa función.

Pista: no solo necesita a la libreria GD

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 31 May 2007 05:06 am

Maikel escribió:

Lean bien la documentación de php.net sobre esa función.

Pista: no solo necesita a la libreria GD
Cierto, no habia leido y al parecer necesita de la libreria: FreeType. y esa libreria me parece que el servidor no la tiene instalada; voy a optar por el tip que me paso fael (y)

Por Jorgelig

Claber

3035 de clabLevel

12 tutoriales

 

Monterrey, Nuevo Leon, MX

firefox
Citar            
MensajeEscrito el 04 Jun 2007 03:57 pm
no clickeis, aunque os pique el gusanillo...

Por Johnny

Claber

1589 de clabLevel

4 tutoriales

  Héroes

firefox
Citar            
MensajeEscrito el 30 Dic 2012 09:10 am
Pon en la línea 27
class VerifiqueCaptcha

Y el error se va a desaparecer

Por Jose19386

1 de clabLevel



 

safari
Citar            
MensajeEscrito el 30 Dic 2012 01:51 pm

Johnny escribió:

Bueno, veo un par de cosas, primero, donde estás construyendo el objeto?? (__construct)
Segundo, puede ser que la debas llamar asi:

Código :

$codigo=$this->getcadenaencrip(TAMANOCAPTCHA);

en vez de así...

Código :

$codigo=getcadenaencrip(TAMANOCAPTCHA);


Espero que sirva de algo, un saludo...


El método "mágico" ( __construct() ) no es obligatorio .. Y no hace falta, pero si viene bien para inicializar la clase, otra alternativa sería crear un método que haga la misma función sólo que tendrás que llamar ese método.

Por redigaffi

1 de clabLevel



 

chrome

 

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