Facebook Fanpage


viernes, 25 de enero de 2013

validaciones ajax yii framework


$form=$this->beginWidget('CActiveForm', array(
        'id'=>'usuario-form',
        'enableClientValidation'=>true,
        'enableAjaxValidation' => true,
        'clientOptions' => array(
                'validateOnSubmit' => true,
        ),
    'focus' => array($model, 'login'),
));


Rules del modelo (resumidas)
array('login', 'unique', 'message' => 'Este usuario ya existe'),
array('password, login', 'length', 'min' => 4),
array('email, login, password, nombre', 'required'),
....


Controlador (resumido tambien)
if ($_POST['Usuario']){
    $model->attributes = $_POST['Usuario'];
    $this->performAjaxValidation($model);
    if ($model->validate()){
    //guardo, mando email de verificación y esas cosas
    }


Espero les sirva


jueves, 24 de enero de 2013

Forzar Descargas en Yii Framework

Forzar una descarga en Yii framework es algo sencillo, simplemente debemos hacer lo siguiente:

CHtml::link("Link Doc.", "http://".$_SERVER["SERVER_NAME"].Yii::app()->request->baseUrl."/images/upload/".$data->link_doc)

y para forzar una descarga en un CGridview solo se debe  hacer de  esta forma:


 array(
'name'=>'link_doc',
        'type'=>'raw',
        'value'=>'CHtml::link("Link Doc.", "http://".$_SERVER["SERVER_NAME"].Yii::app()->request->baseUrl."/images/upload/".$data->link_doc)',
                ),

Consultas mas Usada en Mysql


1. CONEXIÓN A LA BASE DE DATOS

Para conectarnos a la base de datos en primer lugar debemos conocer el nombre de nuestra base de datosnombre de usuario y contraseña. Esto lo podemos conocer directamente desde el phpMyAdmin que nos proporcionan la mayoria de los servidores. En el ejemplo que van a ver a continuación creamos una variable la cual contiene la función mysql_connect(); esta nos indica de que hemos realizado una sesión dentro del MySQL, devolvera "false" en caso de no conseguirse dicha sesión, y "true" en caso de conseguirse, para realizar dicha conexión debemos especificar nuestro nombre de usuario y contraseña, esta sesión nos hara poder acceder a seleccionar la base de datos que queremos, dicha sesión durara hasta que usemos mysql_close(); para cerrar la sesión dentro del MySQL.
La función mysql_select_db(); devuelve el valor "false" en caso de no conectarse a dicha base de datos, claro esto ocurrira en caso de no exisitir la base de datos ó en caso de colocar nombre de usuario y contraseña falsos, y devuelve"true" en caso de lograr dicha conexión a la base de datos, luego procedemos a colocar la variable $con para indicar nuestra sesión en la base de datos. MySQL es "case-sensitive", esto quiere decir que diferencia base de datos que tenga nombre en letras mayúsculas y minusculas, si le colocamos a una base de datos el nombre de 'Usuarios', para llamarla no va ser lo mismo si colocamos como nombre 'usuarios' ya que buscara una base de datos que contenga el nombre de 'usuarios' y no 'Usuarios', por eso se recomienda mantener un standard a la hora de elegir los nombres de las distintas base de datos.
<?php

   $con 
mysql_connect('localhost','usuario','contraseña'); // Conexión a la MySQL.

   
mysql_select_db('base_de_datos',$con); // Elegimos nuestra base de datos, registramos nuestra conexión a la MySQL.
?>

2. CONSULTAS A LA BASE DE DATOS

Una vez logrado la conexión a la base de datos, podemos realizar nuestras consultas a dicha base. Si todavía no hemos creado una tabla en la base de datos debemos crearla para poder realizar con exito dichas consultas. La función para realizar dichas consultas se llama mysql_query(); esta función esta constituida por el tipo de sentencia a realizar y indicar el identificador de la conexión a la base de datos, en este caso $con. Los valores retornados para las sentencias SELECT, SHOW, DESCRIBE o EXPLAIN, regresa un "resource" en caso exitoso, y "false" en error. Para otro tipo de sentencia SQL, UPDATE, DELETE, DROP, etc, regresa "true" en caso exitoso y false en error. El resultado obtenido debe ser pasado a mysql_fetch_array(); y otras funciones para el manejo de las tablas del resultado, para accesar los datos regresados.
Los tipos de sentencia mas comunes son SELECT, UPDATE, DELETE, las cuales a su vez estan constituidos por otras sentencias que nos pueden modificar el tipo de consulta que queremos hacer. Nota: Antes de hacer los querys tienes que incluir tu conexión a la base de datos, es decir, el porcedimiento que anteriormente realizamos, lo puedes colocar en un archivo e incluirlo mediante un include(); si es de tu preferencia, si esto no se hace no podrás realizar dichos querys ya que no existe conexión a la MySQL.
<?php
  // Variable que contiene nuestra consulta
  $query 
mysql_query("SELECT * FROM usuarios ORDER BY id DESC LIMIT 0,50",$con); .
?>

3. SENTENCIAS

¿CUÁL ES LA FUNCIÓN DEL * ?
La función del * despues de los SELECT ó otro tipo de sentencia, es elegir todos los campos de una tabla, es decir, si usamos * en una consulta elegiremos todos los campos que tenga dicha tabla. De esta manera podremos acceder a la tabla de una manera total. De igual forma podemos elegir solo un campo en caso de tener una gran cantidad de campos en la tabla y solo queremos obtener la información de un solo campo.
<?php
// Seleccionando todos los campos en la tabla usuarios $query mysql_query('SELECT * FROM usuarios',$con);
// Seleccionando solo el campo nombre de la tabla usuarios $query mysql_query('SELECT nombre FROM usuarios',$con);
?>
INSERT INTO tabla 
Esta consulta su valor es hacer un "insert", en la tabla de la base de datos especificada, es decir, insertar ó registra una nueva información en la tabla de la base de datos, esto de acuerdo a los campos especificados en la base de datos, debemos conocer nuestra tabla donde queremos hacer el insert y los campos que queremos registrar, en el siguiente query la tabla es 'usuarios' y soló insertamos dos valores en dos campos los cuales son primero y segundo.
<?php
// Simple INSERT en la tabla usuarios, campos primero y segundo.$query mysql_query("INSERT INTO usuarios (primero,segundo) VALUES ('$primero',$segundo')",$con); 
?>
UPDATE SET tabla
Esta consulta su valor es hacer un "update", en la tabla de la base de datos especificada, es decir, hacer una actualización ó modificación en ella, alterando el valor de solo los campos especificados en la consulta, esta consulta resultará exitosa solo si el registro existe, tiene que existir en la base de datos para lograr la actualización o modificación en ella, podemos utilizar algunas sentencias como WHERE en dichos querys con update para que se modifique en un registro especifico, si no se utiliza el WHERE actualizaremos todos los campos de la tabla. Para el ejemplo que viene a continuación hacemos un update en la tabla 'usuarios' donde solo se va a actualizar los campos primero y segundo donde el campo id tenga un valor. Por ejemplo para un sistema de usuarios se actualizaria donde el número de id sea 3, los campos primero y segundo.
<?php

// UPDATE en la tabla usuarios en los campos primero y segundo, donde el campo id es igual a 3
$query 
mysql_query("UPDATE usuarios SET primero='$primero',segundo='$segundo' WHERE id='3'",$con);

?>
DELETE FROM tabla
Esta consulta su valor es hacer un "delete", en la tabla de la base de datos especificada, es decir, borrar datos de una tabla de la base de datos. Al igual que la sentencia UPDATE si no se especifica mediante un WHERE lo que se desea borrar puedes llegar a perder todos los datos registrados en la tabla.
<?php
// DELETE en la tabla usuarios donde la id sea igual a 5 $query mysql_query("DELETE FROM usuarios WHERE id='5'",$con);
?>
ORDER BY campo
Su principal función es ordenar los datos de una base de datos, segun el campo especificado, recordemos que dicho campo debe estar en la tabla de la base de datos.
<?php
// ORDER BY, este query ordernara los campos por el campo primero de la tabla usuarios $query mysql_query("SELECT * FROM usuarios ORDER BY primero DESC LIMIT 0,20",$con);
?>
DESC, ASC
Son formas de ordenamiento, es decir, como van hacer ordenados los datos luego de hacer un ORDER BY. DESC ordena los datos en forma descendete de mayor a menor y ASC ordena en forma ascendente es decir de menor a mayor, este campo es comúnmete utilizado para valores númericos.
<?php
// DESC, ordenando los campos en forma descendente por el campo id de la tabla usuarios $query mysql_query("SELECT * FROM usuarios ORDER BY primero DESC LIMIT 0,20",$con);
// ASC, ordenando los campos en forma ascendete por el campo id de la tabla usuarios $query mysql_query("SELECT * FROM usuarios ORDER BY primero ASC LIMIT 0,20",$con);
?>
WHERE campo
Traducido sería "donde", este sirve para cambiar los datos donde tal campo en la tabla es igual a un valor especifico. Dicha sentencia tiene a la vez varias condiciones para seleccionar de otra manera los registros, los cuales puedes verlos en RincónAstur
<?php
// Query que tomaria la información solo del usuario número 5 en la tabla usuarios $query mysql_query("SELECT * FROM usuarios WHERE id='5'",$con);
?>
LIMIT número principal, número limite
Limita el número de registro a mostrar, se coloca el número principal el cual va hacer el número desde donde va a comenzar los registros hasta el número limite el cual va hacer el número limite de los datos. Ejemplo: LIMIT 0, 20 esto indica que la consulta debe de mostrar 20 resultados a partir del primer registro. LIMIT 7, 20 esto indica que la consulta debe mostrar los resultados a partir del registro número 8, desde 8 por que LIMIT considera el primer registro como cero. (0 = 1, 1 = 2, 3 = 4)
<?php
// Limitando los resultados de la tabla usuarios, nos mostrara solo 20 usuarios $query mysql_query("SELECT * FROM usuarios ORDER BY primero DESC LIMIT 0,20",$con);
// No colocando limite, se mostraran todos los usuarios registrados $query mysql_query("SELECT * FROM usuarios ORDER BY primero DESC",$con);
?>
MAX(campo)
Devuelve el valor máximo de ese campo en todos los registros de la tabla.
<?php
// Seleccionando el último valor registrado en el campo primero de la tabla de usuarios $query mysql_query('SELECT MAX(primero) FROM usuarios',$con);
?>
MIN(campo)
Devuelve el valor mínimo de ese campo en todos los registros de la tabla.
<?php
// Seleccionando el último valor registrado en el campo primero de la tabla de usuarios $query mysql_query('SELECT MAX(primero) FROM usuarios',$con);
?>
RANDOM(campo)
Selecciona aleatoriamente un valor del campo seleccionado de una tabla.
<?php
// Seleccionando un valor alelatorio en el campo segundo de la tabla de usuarios $query mysql_query('SELECT RANDOM(segundo) FROM usuarios',$con);
?>
COUNT(*) AS TOTAL
Cuenta el número total de campos registrados en la base de datos, algunos lo describen como el equivalente de mysql_num_rows(); que cuenta el número de filas de una determinada tabla.
<?php
// Con este query, podemos contar el número de registro en nuestra tabla usuarios $query mysql_query('SELECT COUNT(*) AS TOTAL FROM usuarios',$con);
?>
LIKE campo
Busca un valor especifico en determinado campo de la tabla, usado comunmente para hacer búsquedas rápidas para buscar en una base de datos. Esta sentencia se utiliza con unos signos de % la función de estos es como buscar en el campo, si lo colocamos de esta manera '%campo%' buscara dicho valor en todo el campo, si lo colocamos '%campo' buscara solo si el campo comienza con ese valor y 'campo%' si termina con ese valor.
<?php
// Buscando si el valor de Joosé esta en el campo nombre $query mysql_query("SELECT * FROM usuarios WHERE nombre LIKE '%Joosé%'",$con);
   
?>
BETWEEN valor AND valor
Busca en un campo valores que este entre tal valor y otro valor de ese mismo campo, estos valores debe estar contenidos en el campo. Esta sentencia es utilizada frecuentemente para buscar entre valores númericos, como por ejemplo: fechas. Con esta sentencia podriamos conocer en caso de tener una tabla en la cual se registran noticias, si queremos conocer las noticias que fueron publicados entre enero y febrero.
<?php
// Seleccionando todos los usuarios que tenga de edad entre 18 y 25$query mysql_query("SELECT * FROM usuarios WHERE edad BETWEEN 18 AND 25 ORDER BY id DESC LIMIT 0,50",$con);
?>
GROUP BY campo
Agrupa los registros por el campo seleccionado, dicha sentencia agrupa por los diferentes valores que tenga un campo en dicha tabla de la base de datos, dicho valor tambien puede ser númerico. Muy utilizada en los sistemas de noticias, blogs, usuarios para agrupar los posteos, noticias ó usuarios por fecha de registro, tipo de noticia ó usuario, mes de inicio, etc. En este ejemplo que vamos a ver a continuación se agrupan las noticias por el tipo de noticias que hay registrada en la base de datos, el campo tipo posse estos valores: deportes, nacionales, internacionales.
<?php
// Agrupando los tipos de noticias por el tipo de noticia (deportes, nacionales, internacionales)$query mysql_query('SELECT * FROM noticias GROUP BY tipo ORDER BY id DESC LIMIT 0,50',$con);
?>

Consultas aleatorias mysql php


Para seleccionar datos aleatoriamente tenemos que tener en cuenta la normalización de SQL y que posiblemente no todas apliquen a algunos gestores de bases de datos.
En primera debemos tener en claro una simple sentencia en SQL para seleccionar datos.
SELECT * FROM `tabla` ORDER BY `campo` DESC LIMIT 0,10
Con esta sentencia en sql lo que estamos haciendo es seleccionar los datos de la tabla, que los ordene dependiendo del tipo campo y que tenga un límite de 10 campos. Es así como funciona una sentencia común en SQL.
Para obtener registros aleatorios o azarosos de una tabla se requiere tener la siguiente sentencia:
SELECT * FROM `tabla` ORDER BY RAND() DESC LIMIT 0,10
Al igual nos mostrará 10 campos pero estos de manera aleatoria y de límite 10, esto es muy eficiente para hacer más dinámico nuestro sitio web y de más vistosidad y facilidad de acceso a la información.
Para unir esta sentencia con PHP para mostrar los resultados analicemos el siguiente código.
<?
## nos conectamos a mysql
include("conexion.php");
## Tomamos los datos aleatorios de la tabla
$query = mysql_query("SELECT * FROM `tabla` ORDER BY RAND() LIMIT 0, 10");
## creamos un bucle para que nos muestre los resultados
while ($campo = mysql_fetch_array($query)){
echo $campo["campo"];
}
## liberamos memoria de la sentencia
mysql_free_result($query);
## finalizamos conexión
mysql_close();
?>
El código PHP anterior nos muestra por pasos lo que se requiere para seleccionar los datos al azar, existen algunos artículos referidos en la cual este artículo depende. Entre ellos puedes visitar: "Conexión a MySQL", "Alternar filas de color con PHP", entre otros más asesores. También puedes visitar el manual de PHP.net de Funciones MySQL.

consultas sql usando JOIN


La claúsula JOIN es opción aplicable a consultas en tablas que tiene diversas opciones de uso. Iremos viéndolas de una en una. Todas ellas han de ir incluidas como parámetros de una consulta. Por tanto han de ir precedidas de:
SELECT *
o de 
SELECT nombre_tabla.nombre_campo,..
donde nombre_tabla es un nombre de tabla y nombre_campo es el nombre del campo de esa tabla que pretendemos visualizar para esa consulta. Esta sintaxis es idéntica a la ya comentada en páginas anteriores cuando tratábamos de consultas en varias tablas.
Ahora veremos las diferentes posibilidades de uso de JOIN
FROM tabla1 JOIN tabla2
Suele definirse como el producto cartesiano de los elementos de la primera tabla (tabla1) por lo de la segunda (tabla2).
Dicho de una forma más vulgar, esta consulta devuelve con resultado una lista de cada uno de los registros de la primera tabla asociados sucesivamente con todos los correspondientes a la segunda. Es decir, aparecerá una línea conteniendo el primer registro de la primera tabla seguido del primero de la segunda. A continuación, ese mismo registro de la primera tabla acompañado del segundo de la segunda tabla, y así, sucesivamente hasta acabar los registros de esa segunda tabla. En ese momento, repite el proceso con el segundo registro de la primera tabla y, nuevamente, todos los de la segunda. Así, sucesivamente, hasta llegar al último registro de la primera tabla asociado con el último de la segunda.
En total, devolverá un número de líneas igual al resultado de multiplicar el número de registros de la primera tabla por los de la segunda.
FROM tabla2 JOIN tabla1
Si permutamos la posición de las tablas, tal como indicamos aquí, obtendremos el mismo resultado que en el caso anterior pero, como es lógico pensar, con una ordenación diferente de los resultados.
FROM tabla2 JOIN tabla1 ON condicion
El parámetro ON permite añadir una condición (condicion) a la consulta de unión. Su comportamiento es idéntico al de WHERE en las consultas ya estudiadas y permite el uso de las mismas procedimientos de establecimiento de condiciones que aquel operador.
FROM tabla1 LEFT JOIN tabla2 ON condicion
Cuando se incluye la cláusula LEFT delante de JOIN el resultado de la consulta es el siguiente:
  • – Devolvería cada uno los registros de la tabla especificada a la izquierda de LEFT JOIN –sin considerar las restricciones que puedan haberse establecido en las claúsulas ON para los valores de esa tabla– asociándolos con aquellos de la otra tabla que cumplan las condiciones establecidas en la claúsula ON. Si ningún registro de la segunda tabla cumpliera la condición devolvería valores nulos.

FROM tabla1 RIGHT JOIN tabla2 ON condicion
Se comporta de forma similar al anterior. Ahora los posibles valores nulos serán asignados a la tabla indicada a la izquierde de RIGHT JOIN y se visualizarían todos los registros de la tabla indicada a la derecha.
JOIN múltiples
Tal como puedes observar en el ejemplo, es perfectamente factible utilizar conjuntamente varios JOIN, LEFT JOIN y RIGHT JOIN. Las diferentes uniones irán ejecutándose de izquierda a derecha (según el orden en el que estén incluidos en la sentencia) y el resultado del primero será utilizado para la segunda unión y así sucesivamente.
En cualquier caso, es posible alterar ese orden de ejecución estableciendo otras prioridades mediante paréntesis.
UNION de consultas
MySQL permite juntar en una sola salida los resultados de varias consultas. La sintaxis es la siguiente:
(SELECT ...)
UNION ALL
(SELECT ...)
UNION ALL
(SELECT ...)

Cada uno de los SELECT ha de ir encerrado entre paréntesis.

Ejemplo de consultas de unión (JOIN)
<?php
$base="ejemplos";
$c=mysql_connect ("localhost","pepe","pepa");
mysql_select_db ($base, $c);
# vamos a crear un array con las diferente consultas
# posteriormente lo leeremos y la ejecutaremos secuencialmente
/* Devuelve todos los campos de ambas tablas.
  Cada registro de alumnos es asociado con todos los de domicilios*/
$query[]="SELECT * FROM alumnos JOIN domicilios";
/* Devuelve todos los campos de ambas tablas. Cada registro de domicilios
   es asociado con todos los de alumnos */
$query[]="SELECT * FROM domicilios JOIN alumnos";
/* Devuelve todos los campos de los registros de ambas tablas
en los que coinciden los numeros del DNI*/
$query[]="SELECT * FROM alumnos JOIN domicilios
                        ON domicilios.DNI=alumnos.DNI";
/* Idéntica a la anterior. Solo se diferencia en que ahora
se visualizan antes los campos domicilios*/
$query[]="SELECT * FROM domicilios JOIN alumnos
                        ON domicilios.DNI=alumnos.DNI";
/* devuelve cada uno de los registro de la tabla alumnos. Si existe
   un domicilio con igual DNI lo insertará. Si no existiera
   insertará valores nulos en esos campos
$query[]="SELECT * FROM alumnos LEFT JOIN domicilios
                        ON domicilios.DNI=alumnos.DNI";
/* Se comporta de forma idéntica al anterior.
   Ahora insertará todos los registros  de domicilios
   y los alumnos coincidentes o en su defecto campos nulos.*/
$query[]="SELECT * FROM domicilios LEFT JOIN alumnos
                        ON domicilios.DNI=alumnos.DNI";
/* Al utilizar RIGHT será todos los registros de la tabla de la derecha
(domicilios) los que aparezcan junto con las coincidencias o
junto a campos nulos. Aparecerán primero los campos de alumnos
y detrá los de domicilios*/
$query[]="SELECT * FROM alumnos RIGHT JOIN domicilios
           ON (domicilios.DNI=alumnos.DNI AND alumnos.Nombre LIKE 'A%')";
/* Consulta de nombre, apellido y localidad de todos los alumnos
cuyo nombre empieza por A */
$query[]="SELECT alumnos.Nombre, alumnos.Apellido1,alumnos.Apellido2,
         domicilios.poblacion FROM alumnos JOIN domicilios
                        ON (domicilios.DNI=alumnos.DNI
                        AND alumnos.Nombre LIKE 'A%')";
# una consulta resumen de nos permitirá visualizar una lista con nombre
# y apellidos de alumnos su dirección y localidad del domicilio
# el nombre de la evaluación y su calificación.
# Si no hay datos de población insertará ---- en vez del valor nulo
# y si no hay calificación en una evaluación aparecerá N.P.
# La consulta aparecerá agrupada por evaluaciones
/* iniciamos el select especificando los campos de las diferentes
   tablas que prentendemos visualizar  */
$q="(SELECT alumnos.Nombre,alumnos.Apellido1,";
$q.=" alumnos.Apellido2,domicilios.calle,";
# al incluir IFNULL visualizaremos ---- en los campos cuyo resultado
# sea nulo
$q.=" IFNULL(domicilios.poblacion,'––––'),";
$q.=" evaluaciones.nombre_evaluacion,";
# con este IFNULL aparecerá N.P. en las evaluaciones no calificadas.
$q.=" IFNULL(notas.calificacion,'N.P.')";
# especificamos el primer JOIN con el que tendremos como resultado una lista
# de todos los alumnos con sus direcciones correspondientes
# por efecto de la clausula ON.
# Al poner LEFT se incluirían los alumnos que no tuvieran
# su dirección registrada en la tabla de direccione
$q.=" FROM (alumnos LEFT JOIN domicilios";
$q.="        ON alumnos.DNI=domicilios.DNI)";
# al unir por la izquierda con notas tendríamos todos los resultados
# del JOIN anterior asociados con con todas sus calificaciones
# por efecto de la claúsula ON
$q.="         LEFT JOIN notas ON notas.DNI=alumnos.DNI";
# al añadir esta nueva unión por la DERECHA con la tabla evaluaciones
# se asociaría cada uno de los resultados de las uniones anteriores
# con todos los campos de la tabla evaluaciones con lo que resultaría
# una lista de todos los alumnos con todas las calificaciones
# incluyendo un campo en blanco (sería sustituido por N.P:)
# en aquellas que no tuvieran calificación registrada
$q.="         RIGHT JOIN evaluaciones";
$q.="         ON evaluaciones.NUMERO=notas.evaluacion ";
/* la clausula WHERE nos permite restringir los resultados a los valores
 correspondientes únicamente a la evaluación número 1*/
$q.="              WHERE evaluaciones.NUMERO=1)";
# cerramos la consulta anterior con el paréntesis. Observa que lo
# hemos abierto delante del SELECT e insertamos UNION ALL
# para que el resultado de la consulta anterior aparezca
# seguido del correspondiente a la incluida después de UNION ALL
$q.=" UNION ALL";
#iniciamos (también con paréntesis) la segunda consulta
# que será identica a la anterior salvo el WHERE
# será modificado para extraer datos de la evaluación nº2
$q.="(SELECT alumnos.Nombre,alumnos.Apellido1,";
$q.=" alumnos.Apellido2,domicilios.calle,";
$q.=" IFNULL(domicilios.poblacion,'––––'),";
$q.=" evaluaciones.nombre_evaluacion,";
$q.=" IFNULL(notas.calificacion,'N.P.')";
$q.=" FROM (alumnos LEFT JOIN domicilios";
$q.=" ON alumnos.DNI=domicilios.DNI)";
$q.=" LEFT JOIN notas ON notas.DNI=alumnos.DNI";
$q.=" RIGHT JOIN evaluaciones";
$q.=" ON evaluaciones.NUMERO=notas.evaluacion";
$q.=" WHERE evaluaciones.NUMERO=2)";
# hemos cerrado el parentesis de la consulta anterior
# e incluimos un nuevo UNION ALL para consultar los datos
# correspondientes a la tercera evaluación
$q.=" UNION ALL";
$q.="(SELECT alumnos.Nombre,alumnos.Apellido1,";
$q.=" alumnos.Apellido2,domicilios.calle,";
$q.=" IFNULL(domicilios.poblacion,'––––'),";
$q.=" evaluaciones.nombre_evaluacion,";
$q.=" IFNULL(notas.calificacion,'N.P.')";
$q.=" FROM (alumnos LEFT JOIN domicilios";
$q.=" ON alumnos.DNI=domicilios.DNI)";
$q.=" LEFT JOIN notas ON notas.DNI=alumnos.DNI";
$q.=" RIGHT JOIN evaluaciones";
$q.=" ON evaluaciones.NUMERO=notas.evaluacion";
$q.=" WHERE evaluaciones.NUMERO=3)";
# incluimos la variable $q en el array de consultas
$query[]=$q;
# leemos el array y visualizamos el resultado
# cada consulta a traves de la llamada a la funcion visualiza
# a la que pasamos el resultado de la consulta
# y la cadena que contiene las sentencias de dicha consulta
foreach($query as $v){
    visualiza(mysql_query($v,$c),$v);
}
function visualiza($resultado,$query){
    PRINT "<BR><BR><i>Resultado de la sentencia:</i><br>";
    print "<b><font color=#ff0000>";
    print $query."</font></b><br><br>";
       PRINT "<table align=center border=2>";
          while ($registro = mysql_fetch_row($resultado)){
               echo "<tr>";
               foreach($registro  as $valor){
                     echo "<td>",$valor,"</td>";
               }
         }
       echo "</table><br>";
}
?>

miércoles, 23 de enero de 2013

Bloquear Campo de fecha en form y mostrar fecha actual

hola bueno en esta oportunidad necesitaba mostrar la fecha de creación de un registro pero deforma que el usuario no la pudiera editar y mi solución fue la siguiente:
Código PHP:
$fecha date(Y-m-d);
<?
php echo $form->textField($model,'fecha',array('value'=>$fecha'disabled'=>'disabled')); ?>

espero les sirva

viernes, 18 de enero de 2013

Subir Imagen con Yii Framework


Con esto podremos subir una imagen a una carpeta de nuestro sitio y guardar el path en la base datos, incluyendo la posibilidad de realizar una actualizacion.-

Para esto deberemos modificar la Vista, el Modelo y el Controlador.

Vista:
archivo _form.php

Código PHP:
..//array de opciones del form...'htmlOptions' => array(
        
'enctype' => 'multipart/form-data',
    ),
...
..
//Otros Elementos..
..
<
div class="row">
        <?
php echo $form->labelEx($model,'imagen'); ?>        <?php echo CHtml::activeFileField($model'imagen'); ?>  //con esto levantamos la imagen
        <?php echo $form->error($model,'imagen'); ?></div>
<?php if($model->isNewRecord!='1'){ ?><div class="row">
     <?php echo CHtml::image(Yii::app()->request->baseUrl.'/banner/'.$model->imagen,"imagen",array("width"=>200)); ?>  // La Imagen se muestra aquí si la página es la página de actualización
</div>
..
..
Otros elementos
..
.. 

Modelo:
solo es necesario agregar una linea en el metodo rules() en el Modelo, de la siguiente manera:

Código PHP:
array('imagen''file','types'=>'jpg, gif, png''allowEmpty'=>true'on'=>'update'), 
esto permitirá campo vacío cuando la página es la actualización

para todas las demás normas que le tiene que dar un escenario para insertar y actualizar, según la regla se aplicará tanto en la página (Insert y Update)

Código PHP:
array('titulo, imagen''length''max'=>255'on'=>'insert,update'), 

.. .. ahora viene la parte principal,

Controlador:
En el controlador Create subiremos la imagen con nombre aleatorio y guardamos la entrada en la base de datos.-

Código PHP:
public function actionCreate()
    {
        
$model=new Banner;  // este es el modelo relacionado a la tabla
        
if(isset($_POST['Banner']))
        {
            
$rnd rand(0,9999);  // Generamos un numero aleatorio entre 0-9999
            
$model->attributes=$_POST['Banner'];

            
$uploadedFile=CUploadedFile::getInstance($model,'imagen');
            
$fileName "{$rnd}-{$uploadedFile}";  // numero aleatorio  + nombre de archivo
            
$model->imagen $fileName;

            if(
$model->save())
            {
                
$uploadedFile->saveAs(Yii::app()->basePath.'/../banner/'.$fileName);  // la imagen se subirá a la carpeta raiz /banner/
                
$this->redirect(array('admin'));
            }
        }
        
$this->render('create',array(
            
'model'=>$model,
        ));
    } 

Ahora viene la parte de la accion de actualizar

Código PHP:
public function actionUpdate($id)
    {
        
$model=$this->loadModel($id);

        if(isset(
$_POST['Banner']))
        {
            
$_POST['Banner']['imagen'] = $model->imagen;
            
$model->attributes=$_POST['Banner'];

            
$uploadedFile=CUploadedFile::getInstance($model,'imagen');

            if(
$model->save())
            {
                if(!empty(
$uploadedFile))  // checkeamos si el archivo subido esta seteado o no
                
{
                    
$uploadedFile->saveAs(Yii::app()->basePath.'/../banner/'.$model->imagen);
                }
                
$this->redirect(array('admin'));
            }

            if(
$model->save())
                
$this->redirect(array('admin'));
        }

        
$this->render('update',array(
            
'model'=>$model,
        ));
    } 

En este ejemplo subimos una imagen a una carpeta especifica e introducimos la entrada en la base de datos. En la actualizacion sobreescribimos la imagen en la carpeta y actualizamos los datos.-

Archivo original desde aqui