Lenguaje PHP

8 Errores comunes al programar en PHP: Ejemplo y solución

8 Errores comunes al programar en PHP. En este artículo veremos 8 errores  que cometemos a menudo cuando programamos en el lenguaje PHP. En especial, si recién estas empezando a aprender este famoso lenguaje.

Si bien PHP, en un lenguaje muy dinámico y la mayor parte de internet lo usan, por ejemplo: Facebook, etc.  Algunos programadores suelen cometer errores muy cotidianos al momento de programar.

8 Errores comunes al programar en PHP

A continuación, veremos algunos errores con su descripción y solución.

1.- La función header(): Re direccionar.

Este error es bien conocido entre los programadores de PHP y el mensaje que devuelve es el siguiente:

warning: Cannot add header information – headers already sent

Ahora, esto se debe que el navegador solicita una página en el servidor y este envía la respuesta en 2 partes, el header, que está conformado por “datos invisibles” para el usuario como las cookies por ejemplo; y el contenido que es lo que el usuario ve en el navegador, estructuras HTML, imágenes, textos,etc.

¿En qué parte de nuestro código ocurre este error?

<!DOCTYPE html>
<?php
    // Aquí ya no puedes modificar las cabeceras

También en este ejemplo

 <?php
// ERROR: ¡Si hay 1 espacio en blanco delante de la etiqueta de inicio del PHP!

¿Cómo solucionar este error?

a) Primera forma. Si tenemos acceso al servidor debemos de configurar nuestro fichero «php.ini» contiene una opción que permite habilitar y deshabilitar este mensaje de error:

output_buffering = on / off.

Seamos sinceros, quien de nosotros tiene acceso al fichero PHP.INI, a menos que tengamos un servidor dedicado. Sin embargo, la mayoría de nosotros tenemos servidores compartidos, entonces hay que dar otras alternativas. Veamos.

b) Segunda Forma. Esta opción es muy funcional, probaremos añadiendo estas funciones al inicio de la etiqueta del PHP y al término del mismo.

// Colocar antes de cualquier código:
<?php ob_start();?>
<html>

Al final de todo el código PHP y/o HTML

// al terminio del fichero
</html>
<?php ob_end_flush(); ?>

Esta segunda opción es muy eficaz a la hora de resolver este inconveniente, pruébenlo y verán su eficacia.

2.- Problemas al comparar:

El lenguaje PHP es dinámico. Por lo tanto, se puede realizar condicional, ciclos, etc. Recordemos que PHP posee operadores de comparación y es común ver el siguiente error de código.

<?php
// Código incorrecto
if ($variable = 'algo'){
    //imprime algo
}
?>

Ahora mostramos el código correcto que debe de tener doble «==»

<?php
//Código correcto por el uso "=="
if ($variable == 'algo'){
    // Imprime algo
}
?>

Explicando el código debemos de recordar que:

a) El operador de comparación de igual es «==»

b) El símbolo « es el indicador de asignación de variable.

3.- Olvidar break en el switch: Ejemplo

La sentencia switch es muy parecido a una serie de sentencias IF ELSE. Sin embargo, cuando usamos la sentencia de control switch, se suele olvidar usar break al final de cada opción, dentro de la condicional lo que genera un error. Veamos un ejemplo:

<?php
$prueba= 2;
switch($prueba){
    case 1: echo 'algo';
    case 2: echo 'algo mas';
    case 3: echo 'mucho mas';    
    case 4: echo 'bastante';
}
?>

Explicación del código

En el código anterior la opción verdadera es el 2, pero al no tener un break ejecutará todos los «echo» siguientes hasta encontrar un break o hasta terminar el switch, lo que ocasionara un error fatal.

Al igual que las condicionales IF ELSE es recomendable usar la opción default que vendría a ser el valor por defecto, si ninguna de las alternativas es la correcta.

El código correcto seria

<?php
$prueba= 2;
switch($prueba){
     case 1: echo 'algo';
                break;
     case 2: echo 'algo mas';
                break;
     case 3: echo 'mucho mas';
                break;
     case 4: echo 'bastante';
                break;
     default: echo 'opcion por defecto si ninguno de las opciones se cumple';
}
?>

4.- Error de caracteres especiales PHP MySQL

Son errores muy especiales y a veces traen dolor de cabeza a muchos programadores. Por lo tanto, en algunos casos es difícil  de detectar.

Si bien, para controlar las tildes, Ñ, comillas, entre otros caracteres lo podemos controlar incluyendo una meta dentro de la etiqueta HEAD de nuestro fichero PHP y/o HTML.

<html>
<head>
<!-- Agregamos esta etiqueta para controlar tildes y eñes -->
   <meta charset="utf-8">
</head>
<body>
</body>
</html>

Esto sería una solución genial, pero para la información extraída de una base de datos con PHP. Esta alternativa no tiene efecto y se mostraran los caracteres especiales.

Caracteres especiales PHP MySQL
Caracteres especiales PHP MySQL

En los textos devueltos por MySQL mostrara extraños símbolos como en la imagen anterior, y letras con acentos que no habías visto ni en el diccionario árabe.

Ahora temo decirles que enfrentas a un error de codificación en tu base de datos. Este error, puede ser debido a múltiples motivos los cuales se pueden relacionar entre sí. Veamos.

a) Una mala codificación del fichero PHP.
b) Mala asignación de cotejamiento en la base de datos.

¿Cuál sería la solución para este error?

Primero. Asignar el charset UTF-8 en nuestros documentos PHP

Segundo. Asignar el cotejamiento de nuestra base de datos al «utf8_general_ci»

 

Cotejamiento utf8_general_ci
Cotejamiento utf8_general_ci

Tercero. Configurar nuestra conexión con la base de datos
Este código de conexión MySQLi genera error de caracteres especiales.

$servidor= "localhost";
$usuario= "root";
$password = "";
$nombreBD= "php_buscador";
$db = new mysqli($servidor, $usuario, $password, $nombreBD);
if ($db->connect_error) {
    die("la conexión ha fallado: " . $db->connect_error);
}
?>

La solución de estos caracteres especiales es agregando el charset UTF8

<?php
$servidor= "localhost";
$usuario= "root";
$password = "";
$nombreBD= "php_buscador";
$db = new mysqli($servidor, $usuario, $password, $nombreBD);
if ($db->connect_error) {
    die("la conexión ha fallado: " . $db->connect_error);
}
 
// AGREGANDO CHARSET UTF8
if (!$db->set_charset("utf8")) {
    printf("Error al cargar el conjunto de caracteres utf8: %s\n", $db->error);
    exit();
} else {
    printf("Conjunto de caracteres actual: %s\n", $db->character_set_name());
}
 
?>

5.- Fatal error: en PHP

Los errores tipo Fatal error de PHP, son errores que pueden comprometer seriamente el funcionamiento del programa y por ello, para prevenir estos inconvenientes, se detiene la ejecución y el programa deja de funcionar al 100%. Es el nivel de error más alto en este famoso lenguaje.

En ejemplos de este tipo de error  es ejecutar una función que no ha sido declarada «Fatal error undefined function» y/o intentar inicializar un objeto de una clase que no existe «Fatal error class not found«. Veamos ejemplos:

<?php
function unaFuncion() {
    return true;
}
//La siguiente funcion no existe y se genera un error Fatal
otraFuncion();
?>

Por defecto, cualquier instalación de PHP viene activado el reporte de errores y dada su importancia. Por lo tanto, se recomienda tenerlos activados incluso en servidores en producción, es decir servidor en internet.

6.- Warning: Error de advertencias

Estos errores tipo Warnings (Advertencia) son errores con nivel menor a los errores fatales y su presencia no interrumpe el funcionamiento del programa. Por lo tanto, esto no quiere decir que puedan ser errores graves. El programa sigue funcionando pero eso no garantiza que trabaje de manera correcta. Sin embargo, tenemos que darle solución rápidamente para que no produzcan errores a futuro.

¿Cómo se genera este tipo de error?

Por ejemplo, intentar anexar un archivo mediante include() con una ruta que no existe en el servidor:

<?php
//Genera un error tipo Warning
include('/archivo/inexistente.php');
?>

Otro ejemplo. Si se utiliza require() en lugar de include(), el error generado es tipo Fatal y el programa se detiene.

<?php
//Genera un error tipo Fatal error
require('archivo/inexistente.php');
?>

7.- Notice

Los errores tipo Notice (Aviso) son los errores de menor nivel de gravedad. Señalan la presencia de un posible error pero que podrían ocurrir también de forma normal en la ejecución del programa. La aparición de errores Notice no supone la terminación del programa y, aunque no suelen ser fuente de problemas serios, pueden hacer que el programa no funcione exactamente como deseamos.

¿Qué causa un error tipo NOTICE?

Un ejemplo puede ser la referencia a variables no definidas con anterioridad e imprimirlas:

<?php
$name = "Carlos";
//$nombre es una variable
echo 'Tu nombre es: ' . $nombre;
?>

Sin embargo. Su relativa baja gravedad, en servidores de producción estos viene desactivados por defecto porque no genera errores que ponen en peligro al sistema.

8. Parse

Los erres tipo Parse (Analizar) son errores del analizador del núcleo de PHP y suponen la terminación del programa.

Los errores del analizador más comunes son errores de sintaxis. Por ejemplo:

<?php
//Falta el ")" en la definición de la función, generará un Parse syntax error
function myFunction( {
    $name = "Carlos";
    return $name;
}
?>

Como pueden observar, este error es muy común entre los programadores y la solución seria completar el paréntesis en el nombre de la función.

<?php
// Funcion correcta
function myFunction() {
    $name = "Manolo";
    return $name;
}
?>

 

8 Errores comunes al programar en PHP Ejemplo y solución
8 Errores comunes al programar en PHP Ejemplo y solución

CONCLUSIÓN

El conocimiento de estos errores hace que a un futuro realicemos sistemas más rápidamente y con menos errores. Solo me queda agradecer a todos ustedes por leerme y no olviden en comentar ante cualquier inquietud.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba