Bueno pues he decidido comprar un dominio y un pequeño hosting, gracias a las personas que me han contactado por medio de este blog por lo que ahora en adelante los invito a visitarme en http://blog.juanesparza.net
Atte. Juan Esparza
Bueno pues he decidido comprar un dominio y un pequeño hosting, gracias a las personas que me han contactado por medio de este blog por lo que ahora en adelante los invito a visitarme en http://blog.juanesparza.net
Atte. Juan Esparza
Hace unos días me encontré este libro del que ya había tenido algunas referencias en el este sitio y ahora lo dejo para descarga..
Lo pueden bajar dando clic acá
La idea es crear un script que al seleccionar el país nos muestre un combo con los estados de este y al seleccionar un estado nos muestre las ciudades del estado, aquí un ejemplo:
Esto utilizando Jquery, php y Mysql, el código que aquí se utilizara es utilizando una pequeña clase para uso de mysql que hice hace algunos días y que pueden encontrar aquí, aunque en los archivos de descarga pondré los 2 utilizando la clase y sin ella.
Bueno para empezar mi base de datos se llama poblaciones y estas son las tablas que necesitamos:
País:
CREATE TABLE `pais` (
`idpais` int(10) unsigned NOT NULL auto_increment,
`pais` varchar(50) default NULL,
PRIMARY KEY USING BTREE (`idpais`)
) ENGINE=MyISAM;
Estado:
CREATE TABLE `estado` (
`idestado` int(10) unsigned NOT NULL auto_increment,
`estado` varchar(50) default NULL,
`pais` int(11) NOT NULL default '0',
PRIMARY KEY USING BTREE (`idestado`)
) ENGINE=MyISAM;
Ciudad:
CREATE TABLE `ciudad` (
`idciudad` int(10) unsigned NOT NULL auto_increment,
`ciudad` varchar(50) NOT NULL default '',
`estado` int(11) NOT NULL default '0',
`pais` int(10) unsigned NOT NULL default '0',
PRIMARY KEY USING BTREE (`idciudad`)
) ENGINE=MyISAM;
y este código de la pagina donde estarán nuestros combos:
“com_dependientes.php”
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
</head>
<?
include("mysql_inc.php");
$mysql = new MySql_Class;
$mysql->user="root";
$mysql->password="root";
$mysql->db="Poblaciones";
$mysql->server="localhost";
$mysql->conection();
?>
<script src="js/jquery.js"></script>
<script>
$(document).ready(function(){
$("select").change(function(){
// Vector para saber cuál es el siguiente combo a llenar
var combos = new Array();
combos['pais'] = "estado";
combos['estado'] = "ciudad";
// Tomo el nombre del combo al que se le a dado el clic por ejemplo: país
posicion = $(this).attr("name");
// Tomo el valor de la opción seleccionada
valor = $(this).val()
// Evaluó que si es país y el valor es 0, vacié los combos de estado y ciudad
if(posicion == 'pais' && valor==0){
$("#estado").html(' <option value="0" selected="selected">----------------</option>')
$("#ciudad").html(' <option value="0" selected="selected">----------------</option>')
}else{
/* En caso contrario agregado el letreo de cargando a el combo siguiente
Ejemplo: Si seleccione país voy a tener que el siguiente según mi vector combos es: estado por qué combos [país] = estado
*/
$("#"+combos[posicion]).html('<option selected="selected" value="0">Cargando...</option>')
/* Verificamos si el valor seleccionado es diferente de 0 y si el combo es diferente de ciudad, esto porque no tendría caso hacer la consulta a ciudad porque no existe un combo dependiente de este */
if(valor!="0" || posicion !='ciudad'){
// Llamamos a pagina de combos.php donde ejecuto las consultas para llenar los combos
$.post("combos.php",{
combo:$(this).attr("name"), // Nombre del combo
id:$(this).val() // Valor seleccionado
},function(data){
$("#"+combos[posicion]).html(data); //Tomo el resultado de pagina e inserto los datos en el combo indicado
})
}
}
})
})
</script>
<body>
<form id="form1" name="form1">
<div>
<select name="pais" id="pais">
<option selected="selected" value="0">---------</option>
<?
$query = $mysql->query("SELECT * FROM pais");
if($query["amount"]>0){
foreach($query["data"] as $rs)?>
<option value="<?=$rs["idpais"]?>"><?=$rs["pais"]?></option>
<?
}
?>
</select>
</div>
<div>
<select id="estado" name="estado">
<option value="0" selected="selected">----------------</option>
</select>
</div>
<div>
<select id="ciudad" name="ciudad">
<option value="0" selected="selected">-------------------</option>
</select>
</div>
</form>
</body>
</html>
y este es el código de “combos.php” :
<?
include("mysql_inc.php");
$mysql = new MySql_Class;
$mysql->user="root";
$mysql->password="root";
$mysql->db="Poblaciones";
$mysql->server="localhost";
$mysql->conection();
$idcombo = $_POST["id"];
$action =$_POST["combo"];
switch($action){
case "pais":{
$query =$mysql->query("SELECT idestado,estado FROM estado WHERE pais = $idcombo order by estado ASC");
foreach($query["data"] as $rs)
echo '<option value="'.$rs["idestado"].'">'.htmlentities($rs["estado"]).'</option>';
break;
}
case "estado":{
$query =$mysql->query("SELECT idciudad,ciudad FROM ciudad WHERE estado= $idcombo order by ciudad ASC");
foreach($query["data"] as $rs)
echo '<option value="'.$rs["idciudad"].'">'.htmlentities($rs["ciudad"]).'</option>';
break;
}
}
?>
y por último acá los archivos aquí los archivos en descarga con la siguiente estructura:
conclase -> capeta con el script tal y como esta en este post
sinclase -> carpeta con el script sin el uso de la clase
combos_dependientes.sql -> Archivo de texto con las ciudades, estados de méxico, solo las tablas ustedes crean la base de datos e insertan estas y cambian el nombre de la base datos en el script y listo tiene que funcionar de la mejor manera .
Bueno para iniciar voy a publicar una pequeña clase con la que he venido trabajando de unos días a la fecha, en caso de que la gusten tomar no hay ningún problema, en caso de hacer alguna observación sería muy bien recibida, entonces aquí les dejo la clase y un ejemplo de su uso..
Primero el código de la clase :
<?
/**
* @author L.I. Juan José Esparza barajas
* @date Lunes, 18 de junio de 2008
* @copyright 2008
* @Version 1.0
* @License Freeware
*/
Class MySql_Class{
// function conection
var $user= "root";
var $password= "root";
var $server= "localhost";
var $db="paises";
var $erroconec="Error conectando a la base de datos";
var $errodatabase="Error conectando a la base de datos";
// function query
var $errorempty="La consulta se encuentra vacia";
var $errorquery="<b>Error al ejecutar la consulta:</b>";
var $result;
//function query -pagination
var $itemspage = 4;
var $label_next = "Siguiente";
var $label_previous= "Anterior";
var $amountitems=0;
var $home = 0;
var $end =0;
var $page=1;
var $numPages=0;
var $labelpagination="Páginas";
var $divclass = "pagination";
var $hrefclass= "a_paginado";
var $hreftext = "Texto";
// For connection to the database
function conection(){
if (!($link=mysql_connect($this->server,$this->user,$this->password))){
die($this->$erroconec);
}
if (!$link=mysql_select_db($this->db,$link)){
die($this->$errodatabase);
}
return($link);
}
//Run SQL
function query($sql,$pagination=''){
if(empty($sql)){
die($this->errorempty);
}
$tipo = explode(" ",$sql);
if(strtoupper($tipo[0])=="SELECT"){
$select = true;
}
if(strtoupper($tipo[0])=="INSERT"){
$insert = true;
}
if($pagination=='P'){ // Pagination
if($_REQUEST["page"]){
$this->page=$_REQUEST["page"];
}
$this->result = mysql_query($sql);
$this->amountitems = mysql_num_rows($this->result);
if(empty($this->page)){
$this->page=1;
$this->home=1;
$this->end=$this->itemspage;
}
$limitInf=(($this->page-1) * $this->itemspage);
$this->numPages=ceil($this->amountitems/$this->itemspage);
if(empty($this->page)){
$this->page=1;
$this->home=1;
$this->end= $this->itemspage;
}else{
$seccionActual=intval(($this->page-1)/$this->itemspage);
$this->home=($seccionActual*$this->itemspage)+1;
if($this->page< $this->numPages){
$this->end=$this->home + $this->itemspage-1;
}else{
$this->end=$this->itemspage;
}
if ($this->end>$this->numPages){
$this->end=$this->numPages;
}
}
$sql = $sql." LIMIT ".$limitInf.",".$this->itemspage;
}
$this->result = mysql_query($sql);
if($this->result){
$return["success"] = true;
if($select){
while($rs = mysql_fetch_array($this->result)){
$return["data"][]=$rs;
}
$amount = mysql_num_rows($this->result);
if($amount >0){
$return["amount"]=$amount;
}else{
$return["amount"] = 0;
}
}
if($insert){
$return["insert_id"]=mysql_insert_id();
}
}else{
die($this->errorquery."<br><b>".$sql."</b><br>".mysql_error());
}
$return["SQL"]=$sql;
return($return);
}
// To clean the problem quotes
function sql_quotes($value){
if(get_magic_quotes_gpc())
$value = stripslashes($value);
//check if this function exists
if(function_exists("mysql_real_escape_string"))
$value = mysql_real_escape_string($value);
else//for PHP version < 4.3.0 use addslashes
$value = addslashes( $value );
return $value;
}
// Count items SQL
function countitems($sql){
$result = mysql_query($sql);
if($result){
$cant = mysql_num_rows($result);
$salida=$cant;
}else{
die($this->errorquery."<br><b>".$sql."</b><br>".mysql_error());
}
return($salida);
}
// show pagination
function showpagination($morevar=''){
if($this->amountitems>0){
echo '<div align="right" class="'.$this->divclass.'">';
echo '<b>'.$this->labelpagination.': </b>';
if($this->page>1){
echo '<a class="'.$this->hrefclass.'" href="'.$_SERVER['PHP_SELF']."?page=".($this->page-1).'&'.$morevar.'"> '.$this->label_previous.'</a>';
}
for($i=$this->home;$i<=$this->end;$i++){
if($i==$this->page){
echo ' <span class="'.$this->hreftext.'">'.$i.'</spaa>';
}else{
echo ' <a class="'.$this->hrefclass.'" href="'.$_SERVER['PHP_SELF']."?page=".$i.'&'.$morevar.'">'.$i.'</a>';
}
}
if($this->page<$this->numPages){
echo '<a class="'.$this->hrefclass.'" href="'.$_SERVER['PHP_SELF']."?page=".($this->page+1).'&'.$morevar.'"> '.$this->label_next.'</a>';
}
echo "</div>";
}
}
}
?>
y acá un ejemplo de su uso:
<?php
//Incluyo la libreria mysql_inc.php
include("mysql_inc.php");
$mysql = new MySql_class;
$mysql->conection();
// Ejemplos de su uso
echo "<br>--------Listado de registros con paginado--------<br>";
$mysql->label_next="Next";
$mysql->label_previous="Previous";
$consulta= $mysql->query("select value,id FROM countries Order by id","P");
foreach($consulta["data"] as $rs)
echo $rs["id"]."-->".$rs["value"]."<br>";
echo $mysql->showpagination();
// Cuenta la cantidad de registro que te devuelve la consulta
echo "Total de registros -> ".$mysql->countitems("select value FROM countries");
//Lista los ultimos 10 de la tabla paises
echo "<br>--------Listado los ultimos 10--------<br>";
$consulta= $mysql->query("select value,id FROM countries Order by id DESC limit 0,9 ");
foreach($consulta["data"] as $rs){
echo $rs["id"]."-->".$rs["value"]."<br>";
}
// Por cuestiones de tiempo solo inserto sobe un campo de la base de datos..pero tambien puede hacerlo sin especifcar los campos
echo "<br>--------Insertando--------<br>";
$datos= $mysql->sql_quotes('País de INSERTADO"');
$rs = $consulta= $mysql->query("INSERT INTO countries (value) values ('$datos');");
echo "Consulta insertada, el id insertado es ->".$rs["insert_id"];
$idinsertado = $rs["insert_id"];
echo "<br>".$rs["SQL"]."<br>";
// Listando pero con el nuevo registro ya agregando
echo "<br>--------Listado los ultimos 10 con el registro insertado--------<br>";
$consulta= $mysql->query("select value,id FROM countries Order by id DESC limit 0,9 ");
foreach($consulta["data"] as $rs)
echo $rs["id"]."-->".$rs["value"]."<br>";
echo "<br>--------Modificando el registro insertado--------<br>";
$datos= $mysql->sql_quotes('País de MODIFICADO"');
$rs = $consulta= $mysql->query("UPDATE countries SET value = '$datos' WHERE id=$idinsertado");
if($rs["success"]){
echo "Registro modificado"."<br>";
echo $rs["SQL"]."<br>";
}else{
echo "no se modifico";
}
// Listando pero con el nuevo registro ya agregando
echo "<br>--------Listado los ultimos 10 con el registro modificado--------<br>";
$consulta= $mysql->query("select value,id FROM countries Order by id DESC limit 0,9 ");
foreach($consulta["data"] as $rs)
echo $rs["id"]."-->".$rs["value"]."<br>";
echo "<br>--------Elimindo el registro modificado--------<br>";
$rs = $consulta= $mysql->query("DELETE FROM countries WHERE id=$idinsertado");
if($rs["success"]){
echo "Registro eliminado.."."<br>";
echo $rs["SQL"]."<br>";
}else{
echo "No se borro";
}
echo "<br>--------Listado los ultimos 10 sin el registro de prueba--------<br>";
$consulta= $mysql->query("select value,id FROM countries Order by id DESC limit 0,9 ");
foreach($consulta["data"] as $rs)
echo $rs["id"]."-->".$rs["value"]."<br>";
?>
Algunas de funciones las vi en otro sitio y decidi ponerlas por que me parecieron muy buenas, por ejemplo la un sitio donde vi una función fue en http://vyk1.spaces.live.com/blog/cns!EBE3A761F939F926!1097.entry