He hecho una recopilación de algunos de los errores mas comunes que la gente comete a la hora de programar en C, el lenguaje C aunque es muy poderoso es bastante inflexible a diferencia de otros lenguajes de tipado sencillo como PHP por ejemplo :), sin embargo son obvias las ventajas que nos aporta C frente a los demás lenguajes, podemos comenzar diciendo que C ha sido el padre de varios lenguajes :)!.
1.- Sintaxis de comentarios incompletos
a = b; /* el comentario no termina
c = d; /* c = d se incluye en el comentario */
f1.c y f2.c difieren acerca del atributo principal de la estructura foo.
5.- Valores de retorno fantasma
Suponemos que tenemos el siguiente código:
int foo (a)
{
if (a) return(1);
}
/* Esta mal, ya que en algunos casos no retornara ningún valor */
Este es el típico caso donde no conceptualizamos todos los posibles casos y nos hace falta implementar valores de retorno.
Finalmente no esta de mas decir que con las nuevas arquitecturas de 64 bits, hay nuevas formas de cometer errores cuando programamos en C, especialmente cuando se trabaja con matrices que se acercan o superan los 2 ^ 31 elementos (aunque es bastante raro).
Existen muchos mas errores que podemos cometer, algunos son verdaderamente difíciles de ocasionar pero pueden llegar a suceder, sobre todo los que tienen que ver con el compilador xD.
Para una lista mas detallada de errores pueden visitar el siguiente sitio The Top 10 Ways to get screwed by the “C” programming language
Retomando los post sobre programación web en esta ocasión les comparto un rápido ejemplo sobre selectbox dependientes, mas concretamente el ejemplo de selectbox de ciudades y estados. Básicamente tenemos 2 selectbox, el primero contendrá los estados de la republica mexicana, cuando seleccionamos alguno el segundo selectbox contendrá ahora las ciudades de ese estado, para hacer esto necesitamos una pequeña base de datos con 2 tablas (ciudades y estados .. obvio), después algo de código php que se encargue de hacer la conexión y otro mas que nos devuelva los datos de las consultas vía JSON y por ultimo nuestro html y javascript que se encargara de mostrar el resultado.
Al terminar el tutorial tendremos algo que se vera así 🙂
Puedes descargar los archivos que se utilizara en la practica a continuación.
Comenzamos creando el archivo que hará la conexión a la base de datos, yo acostumbro hacer una clase para eso ya que luego puedo hacer extends de la misma y todo es mas fácil.
<?
global $ID_BD;
$ID_BD=mysql_connect("127.0.0.1", "root","");
mysql_select_db("states_cities", $ID_BD);
mysql_query("SET NAMES 'utf8'", $ID_BD);
class mysql {
VAR $ID;
function mysql (){
}
function _query($sql){
global $ID_BD;
//echo "$sql\n";
return mysql_query($sql,$ID_BD);
}
function _registers($sql){
global $ID_BD;
[email protected]_query($sql, $ID_BD);
//echo $result;
//echo $sql;
if ($row=mysql_fetch_object($result)){
do{
$registros[]= $row;
}while($row=mysql_fetch_object($result));
}
else
return array();
return $registros;
}
function _register ($sql){
global $ID_BD;
//echo "$sql";
$result=mysql_query($sql, $ID_BD);
if ($row=mysql_fetch_object($result))
return $row;
}
function _close(){
mysql_close($this->ID);
}
function _last_id(){
global $ID_BD;
return mysql_insert_id($ID_BD);
}
}
?>
Después creamos el archivo que se encargara de hacer las consultas y regresar el JSON correspondiente, realizaremos peticiones a este archivo via ajax por medio de jquery.
<?php
require_once 'mysql.php';
class data extends mysql
{
function getStates()
{
$states = $this->_registers("SELECT * FROM states;");
return json_encode($states);
}
function getCities($idState)
{
$idState = (int) $idState;
$cities = $this->_registers("SELECT * FROM cities WHERE id_state = " . $idState . ";");
return json_encode($cities);
}
}
$data = new data();
if($_GET['action'] == "getStates")
{
echo $data->getStates();
}
else if($_GET['action'] == "getCities" && isset($_GET['stateID']))
{
echo $data->getCities($_GET['stateID']);
}
?>
Como podemos ver he empaquetado el código en una clase y casi en la parte final del código reviso si existen algunos parámetros pasados por GET para mandar llamar a las funciones correspondientes :), examinemos por ejemplo la función que nos trae los estados:
function getStates()
{
$states = $this->_registers("SELECT * FROM states;");
return json_encode($states);
}
Básicamente hacemos un select y el arreglo asociativo resultante (checar la clase mysql para mas información) lo pasamos por json_encode para ser manipulado con javascript, lo mismo pasa con la función que te arroja las ciudades solo que esa tiene una clausula WHERE que te manda traer solo las ciudades de X estado :).
Finalmente creamos nuestro archivo html donde desplegaremos los 2 selectbox, para eso escribimos el siguiente código.
Como pueden ver, al inicio cargamos la librería de JQuery desde google, después hacemos la primera petición al script data.php via ajax para que nos traiga los estados y poder “rellenar el primer selectbox”, después tenemos el siguiente código javascript.
change() nos permite detectar el cambio de selección de un selectbox, entonces utilizamos ese evento para “refrescar” las opción del segundo selectbox, vemos cual es el estado que esta seleccionado, extraemos su valor (es el mismo id que le corresponde en la tabla de estados) y armamos la petición para mandar traer las ciudades :).
Y listo con esto tenemos listo un mini ejemplo de selectbox dependientes, espero les sirva este pequeño snippet :), ya saben cualquier duda pónganla en comentarios.
La verdad es un código bastante sencillo y fácil de implementar (unos 10 mins a lo mucho), con un poco mas de código se podría mostrar la ubicación de la ciudad en google maps o utilizar esto en algún formulario de registro o cualquier otra cosa.
salu2
This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish.AcceptRead More
Privacy & Cookies Policy
Privacy Overview
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.