PHP 5 stars un rating con estilo

PHP 5 stars es una aplicación del tipico "rate me" con 5 estrellas.

Es algo diferente a las demás y me gusta el toque que deja

Para usarlo se necesita sqlite en el apartado PDO de nuestro hosting.

Saberlo es muy simple, simplemente creamos un script

<?php phpinfo(); ?>

lo subimos al hosting y buscamos sqli en el apartado PDO

Click here to enlarge

Ejemplo de uso:

Agregamos esto al head:



<link rel="stylesheet" type="text/css" href="rating/rating.css" media="screen"/>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript" >google.load("jquery","1.3.2");</script>
<script type="text/javascript" src="rating/rating.js"></script>
<?php include('rating/rating.php'); ?>


y agregamos esto a cada objeto que queremos que tenga las estrellas:

<?php rating_form("unique_table_name"); ?> a cada elemento que queramos tener las estrellas.

donde unique_table_name es el nombre de la tabla en slqi

Demo, descarga y web del autor

saludos

La clase MySQLi

Hoy mismo hablé sobre el uso de mysql_connect pero ahora quiero hablaros de la clase MySQLi que un user de CUH (p3ll3) comentó sobre ella y yo no la habia tenido en mente.

Un código básico de MySQLi:

<?php
$con 
= new MySQLi('host''usuario''pass''db');
$query $con->Query("SELECT algo, otro FROM tabla WHERE id = 1");

while (
$q $query->fetch_object()) {
    echo 
"Hola soy ".$q->algo." y "$q->otro;

}
$query->close(); $con->close();
?>


Como se puede comprobar es bastante sencillo, creamos un objeto con la sentencia new, le decimos que se trata de MySQLi y le pasamos los parámetros de conexión: host, usuario, contraseña y base de datos, aquí ya se nota una mejora por el hecho de no tener que usar mysql_select_db().

Luego para ejecutar una consulta simplemente tomamos el objeto y le indicamos la acción Query seguida de la consulta.

Para accesar a los datos lo hacemos igual que con mysql_query solo que en el while en ves de poner mysql_fetch_array() ponemos la variable y fetch_object().

A la hora de acceder a los datos normalmente lo hariamos como un array $q['algo'] pero con MySQLi se hace así $q->algo.

Eso es todo referente a MySQLi

La Función mysql_connect

No hace mucho publiqué el siguiente artículo en el foro de CUH, el cual se ve que agradó y me solicitaron un poco mas de información, así que os dejo el post completo por si es de ayuda para alguno.

Para establecer una conexión a una base de datos mysql utilizaremos myql_connect().

Esta función se suele almacenar en una variable ya que en futuras acciones debemos decirle cual es la conexion.

Sintaxis:

$variable = mysql_connect([$host],[$usuario],[$password],[$nuevolink],[$flags])

todo es muy simple... un ejemplo de variables sería:

<?php

$host
="localhost"; $usuario="root"; $password=""//sin pass $nuevolink=true; $flags=MYSQL_CLIENT_SSL  
?>


Todos los parámetros de esta función son opcionales... y direis: COMO???, así no hay forma de saber donde conectar...

Bien, hay un detalle que parece ser que mucha gente no usa en cuanto a $host $usuario y $password...

Existe ese maravilloso PHP.ini que tiene unas directivas especialmente para esta función, y en caso de que no se pase un parámetro conectará mediante dichas directiva. Las directivas son:

mysql.default_host =
mysql.default_user =
mysql.default_password =


si les ponemos valores a estas directivas ya no hará falta especificar datos de conexión.

$nuevolink

Por defecto es false y su utilidad en true es que si hacemos otra llamada con los mismos argumentos no establecerá un nuevo link sino que utilizará el que ya se habia creado previamente, por eso no se suele usar..

$flags

Las flags de mysql_connect son:

MYSQL_CLIENT_COMPRESS
Protocolo de compressión

MYSQL_CLIENT_IGNORE_SPACE
Permitir espacios después de nombres de funciones

MYSQL_CLIENT_INTERACTIVE
Permitir los segundos interactive_timeout (en ves de wait_timeout) de inactividad antes de cerrar la conexión

MYSQL_CLIENT_SSL
Encriptación SSL

Eso es todo para mysql_connect() normalmente se usan los 3 primeros parámetros así que si no entendeis el resto no os comais mucho la cabeza

Facebook nos presenta HipHop for PHP

Ayer hablabamos que el compilador de PHP era un JIT.

Hoy podemos obtener más información gracias a vivaPHP!

Según el ingeniero Haiping Zhao, HipHop for PHP les permitió reducir un 50% el uso de sus CPU lo cual implica un mejor rendimiento en la aplicación Facebook.

Hip Hop for PHP lleva ya 2 años de desarollo, pero reconocen que aún no está finalizado y que la actual versión puede considerarse una beta.
Se ha liberado bajo la misma licencia de PHP lo que permitirá a la comunidad acabar el desarollo de la aplicación dando su punto de vista y sus ideas.

Zhao nos explica que es realmente HipHop:

“HipHop no es técnicamente un compilador. En su lugar es un transformador de código. HipHop transforma tu código fuente PHP en un altamente optimizado código C++ y luego usa g++ (GNU C++) para compilarlo. HipHop ejecuta el código fuente en una manera semánticamente equivalente y sacrifica algunas características raramente usadas -como eval()- a cambio de una performance mejorada. HipHop incluye el transformador de código, una reimplementación del runtime de PHP y una re-escritura de varias extensiones de PHP comunes para aprovechar estas optimizaciones”.

Fuente: vivaPHP!

Sistema de comentarios simple con captcha

Bueno he avierto otro post porque en el otro hay muchos comentarios de todo tipo, no se si aún lo necesias pero como hace poco me pidieron lo mismo te dejo el trabajo:

El sistema de comentarios estaba pensado para funcionar igual en diferentes secciones de la web... compartiendo tablas de la DB y solo modificando un campo entre las diferentes secciones.

SQL: 


CREATE TABLE IF NOT EXISTS `web_michelmin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`autor` varchar(50) NOT NULL,
`hora` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`comentario` text NOT NULL,
`seccion` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;



<?php

#~~ Connect.php
$host 'localhost';
$user 'root';
$pass '';
$db 'z_test'//nombre de la bd
$tabla 'web_michelmin'//nombre de la tabla a usar

$con mysql_connect($host$user$pass) or die(mysql_error());
mysql_select_db($db,$con) or die(mysql_error());

?> 



Parte que se agrega a la página:


<?php 
session_start
();
#~~ Comentarios a final de página; 

include_once('conect.php');

$seccion 'index'//Nombre que le quieras dar a ala seccion 

$comentarios mysql_query("SELECT comentario, autor FROM ".$tabla." WHERE seccion = '".$seccion."' "$con) or die(mysql_error());

echo 
'<table border="1">';

 

    while (
$coments mysql_fetch_array($comentarios)) { 

 

       echo 
'<tr><td colspan="2"><sub><strong>'.$coments['autor'] .'</strong></sub></td></tr> 

               <tr><td colspan="2">'
nl2br(htmlentities($coments['comentario'])) . '</td></tr>'

    } 

 

echo 
'<tr><td colspan="2"></td> 

      </tr><tr><td colspan="2">Escribe tu comentario: </td></tr> 

      <tr><td colspan="2"> 

          <form method="post" action="update.php"> 

            Autor: <input type="text" name="autor" size="31" maxlength="50" value="" /> 

        </td>
    </tr>
    <tr> 

        <td colspan="2"> 

            Comentario: <br /> 

            <textarea name="coment" cols="31"></textarea>  

            <input name="seccion" type="hidden" value="'
.$seccion.'" />
            
        </td>
    <tr>
        <td>
            Captcha:
        </td>
        <td>
            <img src="captcha.php" /> <br />
            <input type="text" name="captcha" size="10" maxlength="7" value="" />
            </div>
            <br /> 

            

        </td>
    </tr>

        <td colspan="2" align="center">
            <input name="Enviar" type="submit" /> 
        </td>
    </tr> 

        </form> 

    </table>'
;
    
    if (
$_GET['err'])
        echo 
"<b>Ha introducido un captcha incorrecto</b>";

?> 



se modifica la variable $seccion dandole el nombre de la página donde se incrustara el código sin el .php de esta forma separamos las diferentes páginas que tendrán un comentario y a la vez redirijimos en el update.php

update.php:
por errores con los headers no hago un include a conect.php...

<?php
session_start
();


$coment $_POST['coment'];
$seccion $_POST['seccion'];
$autor $_POST['autor'];

if (
$_POST['captcha'] && $_POST['captcha'] == $_SESSION['rand'])
{


$host 'localhost';
$user 'root';
$pass '';
$db 'z_test';
$tabla 'web_michelmin';
$con mysql_connect($host$user$pass) or die(mysql_error());
mysql_select_db($db,$con) or die(mysql_error());


$update mysql_query("INSERT INTO " $tabla " (id, autor, hora, comentario, seccion) VALUES (NULL, '" $autor "', CURRENT_TIMESTAMP, '" $coment "', '" $seccion "') "$con) or die (mysql_error());

header("location: "$seccion .".php");

} else
    
header("location: ".$seccion .".php?err=badcaptcha");
?> 


captcha.php (esta parte es de shell root si no me equivoco)

<?php

# Em3trix

session_start();

$x ImageCreateFrompng("captcha.PNG");

$numeros rand(0000,9999);
$letras "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

$final $letras{rand(1,50)};
$final .= $letras{rand(1,50)};
$final .= $letras{rand(1,50)};

$rand $numeros.$final;

$rand2 $rand[3].$rand[5].$rand[1].$rand[6].$rand[2].$rand[7].$rand[3];

$color imagecolorallocate($x,"250","0","0");
$string imagestring($x,5,"13","7","$rand2",$color);

$color1 imagecolorallocate($x,"250","250","0");
$color2 imagecolorallocate($x,"0","250","0");
$color3 imagecolorallocate($x,"0","0","250");

$linea imageline($x,"0","20","100","10",$color3);
$linea imageline($x,"0","10","20","100",$color1);
$linea imageline($x,"50","0","100","100",$color2);

ImageGIF($x);

$_SESSION['rand'] = $rand2;

?> 


Estilos css = 0 soy malo con eso y al final cada uno tiene su estilo xD así que espero os sirva.