Unamonos los programadores de taringa y compartamos nuestros codigos, ya sea java, C, C++, php, jsp, html, css, python.... etc etc etc.. Enterate tambien de las innovaciones en el software y nuevas distribuciones de Microsoft, Linux y MacOS

Ver más
  • 1,702 Miembros
  • 560 Temas
  • 308 Seguidores
  • 0

Intro PHP for dummies (buenas practicas)

Muchos usuarios suponen que hacen las cosas bien, pero hay una realidad que nos invade y es que hay mucha mala influencia dando vuelta entre los programadores. Lo que quiero plantear en este post son un poco de buenas costumbres al momento de programar, y con sus ayudas ir mejorándolo en lo que dice y en nuevas ideas que habré pasado por alto. Cada aporte será agradecido con los debidos créditos en este post. Comencemos desde abajo…
1- Definir los errores al mango.

Es importante que nuestro server esté configurado para que nos muestre el más mínimo de los errores. Haremos dos pasos, en uno editaremos el archivo php.ini, y en el paso dos haremos un trackeo de errores del lado de PHP así podremos tenerlo también cuando subamos nuestros sitios online.
Para el primer paso abran el archivo php.ini (si no saben donde está hacen un archivo que tenga <? phpinfo() ?> y buscan “Loaded Configuration File“, o “Configuration File“).
Editaremos las siguientes directivas:

display_errors = On
error_log = off
error_reporting = 6143
ignore_repeated_errors = off


También pueden leer la sección de errores, hay directivas para jugar y probar cosas, como ser error_append_string y error_prepend_string donde pueden poner html, ej. <h1> y </h1> respectivamente.

Una vez esto ya tendremos los errores un poco más afinados. Si quieren más lean el punto siguiente.

Nota: para probarlo solo hagan un PHP con: <?=$quevariableloca;?>
2- Trackear los errores de PHP.

Los usuarios que usen a futuro nuestro sistema serán los mejores testers del mismo ya que probarán todos los casos de uso, muchos de los cuales posiblemente se nos pasen por alto. Si bien la lógica es un error que dependerá de nosotros y suele ser muy importante, también los son los posibles errores que puedan darse en el script en casos de usos no testeados. Haremos que el poder tenerlos en nuestra cuenta de email para sí solucionarlos.
Para ello lo mejor es crear un archivo, por ejemplo errores.php, y en él poner:
<?
function error_handler($errno, $errstr, $errfile, $errline, $errctx) {
$EN_DESARROLLO = substr_count($_SERVER['HTTP_HOST'],"localhost" ) ==0 ? FALSE : TRUE;
$host = $_SERVER['HTTP_HOST'];
$mail_subject = 'Se ha producido un error en '.$host;
$mail_from = 'errores@midominio.com';
$mail_to = array('nicolas@midominio.com') ;
$errortype = array(1=>"Error", 2=>"Warning", 4=>"Parsing Error", 8=>"Notice", 16=>"Core Error", 32=>"Core Warning", 64=>"Compile Error", 128=>"Compile Warning", 256=>"User Error", 512=>"User Warning", 1024=>"User Notice", 2048=>"PHP5 Strict Warning " ) ;
$error_handler_string = "<font size='2' face='courier' color='#666666'><h3>Error en {$host}<br></h3><b>Date: </b>".date('F j, Y, H:i:s a')."<br><b>Error Type: </b>{$errortype[$errno]} ({$errno})<br><b>Description: <font color=657413>{$errstr}</font></b><br><b>Error File: </b>{$errfile}<br><b>Error Line: </b>{$errline}<br><br>";
while( isset($_SESSION) && list($var, $val) = each($_SESSION) ) $error_handler_string .= "_SESSION[{$var}] = {$val}<BR>";
while( isset($_GET) && list($var, $val) = each($_GET) ) $error_handler_string .= "_GET[{$var}] = {$val}<BR>";
while( isset($_POST) && list($var, $val) = each($_POST) ) $error_handler_string .= "_POST[{$var}] = {$val}<BR>";
while( isset($_COOKIE) && list($var, $val) = each($_COOKIE) ) $error_handler_string .= "_COOKIE[{$var}] = {$val}<BR>";
if( $EN_DESARROLLO ){
exit($error_handler_string) ;
}else{
@ini_set("sendmail_from",$mail_from) ;
foreach( $mail_to as $mail_to_str ) mail($mail_to_str, $mail_subject, $error_handler_string, "From: {$mail_from}rnContent-Type: text/html; charset="iso-8859-1"rn" ) ;
if( $errno & (E_WARNING | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR) ) exit("<script>location.href = 'mipaginadeerror.php'</script>" ) ;
}
}
set_error_handler("error_handler" ) ;
error_reporting(E_ALL) ;
?>


Poniendo este include en todas las páginas tendremos control de los errores (siempre y cuando haya un display_error en on, el cual pueden configurar con una llamada a la función ini_set() o un htaccess).
Si están en localhost tendrán un error en pantalla cortando la ejecución del script, sino, les mandará un email con el error en el cuerpo a todas las cuentas que estén en el array $mail_to, y al usuario lo redireccionará a mipaginadeerror.php la cual tendrá un diseño acorde al sitio donde está puesto.

Nota: para probarlo solo hagan un PHP con: <?=$quevariableloca;?>
3- Setear las variables antes de usarlas.

Es muy común encontrar un script como el siguiente:
<?
if(date('N')==1) $dia = 'Lunes';
echo "que lindo día hace hoy $dia";
?>


Analicemos esto. La variable $día estará seteada solo si hoy es Lunes, pero que pasa en un día Martes? Si hiciste bien el paso 1 tendrás un error del tipo NOTICE diciéndote que $dia no esta definida (Notice: Undefined variable $dia…).
Esto desde ahora en más lo llamaremos lógica, y es muy importante controlar bien el flujo de los datos en nuestro script, es el éxito de que funcione a la perfección.
Para solucionar el caso anterior hay muchas maneras, pondré algunas ya que es solo un ejemplo:
<?
$dia = '';
if(date('N')==1) $dia = 'Lunes';
echo 'que lindo día ', $dia;
?>


Ustedes sabrán que método usar o si usar isset() o empty(), lo importante es que llegados a la función echo() tengamos la variable seteada o sino evaluemos que así lo esté al momento de usarla:
<?
if(date(’N')==1) $dia = ‘Lunes’;
else $dia = ”;
echo ‘que lindo día ‘, $dia;
?>
<?
if(date(’N')==1) $dia = ‘Lunes’;
echo ‘que lindo día ‘, (isset($dia) ? $dia : ” ) ;
?>
4- No confundir un string con una constante.

Les suena el siguiente código?:
<?
...
while( $rs = mysql_fetch_assoc( $r ) ) echo $rs[foo];
...
?>


Pues si, está plagado de este código en la web y está mal. Si pensaste que estaba bien te recomiendo leer un poco sobre:
http://php.net/manual/es/language.constants.php
http://php.net/manual/es/language.variables.php
http://php.net/manual/es/language.types.array.php
http://php.net/manual/es/language.types.php

De todas maneras te adelato, que en cada iteración mysql_fetch_assoc() asigna en $rs un array asociativo.
Estos arrays tienen posiciones o claves que son strings y como sabrás un strings va entres comillas, simples o dobles.
Sino, estarás llamando a una constante, te pongo un ejemplo de que sería correcto:
<?
...
$r = mysql_query("Select nombre from tbl" ) ;
while( $rs = mysql_fetch_assoc( $r ) ) echo $rs['nombre'];
...
?>

O bien:
<?
...
define('foo','nombre') ;
$r = mysql_query("Select nombre from tbl " ) ;
while( $rs = mysql_fetch_assoc( $r ) ) echo $rs[foo];
...
?>


Si la primer opción, que está mal, te funciona, es porque tenés los errores de PHP mal configurados y PHP entiende que como la constante foo no existe es un string con ese valor, pero no es bueno dejar que PHP decida nuestrá lógica, para eso estamos nosotros los programadores .

Nota: Esto aplica a toooodo array asociativo, no necesariamente creado por nosotros, bien puede ser un $_GET['valor'].
  • 0
  • 5Calificación
  • 0Seguidores
  • 1.007Visitas
  • 1Favoritos

8 respuestas

@Toxic90s dijo Hace más de 2 años:

a mi me paso lo mismo no puedo editar mi thread y los emoticons molestan jeje

por otra parte, PHP for dummies es ideal para mi XD

@ApaLaPapa dijo Hace más de 2 años:

Justo empece co php! Es copado pero se me complica por ahora

@olsenvon dijo Hace más de 2 años:

php es la ley

@ricardo33175 dijo Hace más de 2 años:

cuando continúan las lecciones. gracias

@ricardo33175 dijo Hace más de 2 años:

sorry GeorgeCloney podrías editar el post dejando espacio entre : y ) para que desaparezca la carita?

Tienes que ser miembro para responder en este tema