Cambio de dominio

1 12 2008

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





Libro: “Building Scalable Websites”

13 10 2008

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á





Combos dependientes utilizando PHP, Mysql y jquery( Javascript)

29 07 2008

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:

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 .





Clase en PHP para uso de MYSQL

17 07 2008

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

Descargar archivos de ejemplo