<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Pedro Ventura | Blog librerias y funciones artículos librerias y funciones Encuentra manuales y tutoriales sobre librerias y funciones ejemplos de código php y otras funciones. Ejemplos de código y librerías en php que pueden ayudar a mejorar y optimizar el trabajo.
 </title>
	<atom:link href="http://www.pedroventura.com/blog_programacion/tag/librerias-y-funciones/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pedroventura.com</link>
	<description>Portfolio Profesional y Blog</description>
	<lastBuildDate>Sat, 04 Feb 2012 10:50:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Detectar iPad con PHP o Javascript</title>
		<link>http://www.pedroventura.com/blog_programacion/php/detectar-ipad-con-php-o-javascript/</link>
		<comments>http://www.pedroventura.com/blog_programacion/php/detectar-ipad-con-php-o-javascript/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 09:30:59 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[librerias y funciones]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=3431</guid>
		<description><![CDATA[Si hace unos días escribía un artículo sobre como redireccionar una web en función del dispositivo móvil, ya sea iPad, iPhone o cualquier otro smartphone, hoy explicaré más en concreto como saber si se está visitando una web desde un iPad. Detectar iPad mediante PHP Detectar si es un iPad es muy sencillo, no es más complicado que saber si está desde un pc, mac o lo que sea. Para ello usaremos la variable de servidor USER_AGENT, $_SERVER['HTTP_USER_AGENT'] que es lo que el navegador envía al servidor para identificarse. En esta variable de servidor contiene bastante información acerca del usuario, como por ejemplo el sistema operativo que está usando y su versión, el motor de navegador y su versión, y otros datos de idioma y geoposicionamiento básico, etc. En mi caso la información que está enviando es la siguiente (desde mi navegador de mi pc con Linux): [HTTP_USER_AGENT] =&#62; Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 En el caso de que estemos visitando nuestra web desde un iPad será algo similar a lo siguiente: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; es) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10 Con toda esta información ya podemos realizar una [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/sysadmin/directiva-htaccess-para-redireccionar-web-en-dispositivo-movil/' rel='bookmark' title='Directiva htaccess para redireccionar web en dispositivo móvil'>Directiva htaccess para redireccionar web en dispositivo móvil</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/parseando-xml-con-php-lo-mas-facil-y-simple/' rel='bookmark' title='Parseando XML con PHP. Lo más fácil y simple'>Parseando XML con PHP. Lo más fácil y simple</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/comprobar-extensiones-de-una-imagen-subida-con-php/' rel='bookmark' title='Obtener la extension de un archivo subido con php'>Obtener la extension de un archivo subido con php</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/mostrar-los-mensajes-de-error-del-php-por-pantalla-con-error_reporting/' rel='bookmark' title='mostrar los mensajes de error del php por pantalla con error_reporting'>mostrar los mensajes de error del php por pantalla con error_reporting</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/crear-marcas-de-agua-con-php/' rel='bookmark' title='crear marcas de agua con php'>crear marcas de agua con php</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Si hace unos días escribía un artículo sobre como <a href="http://www.pedroventura.com/blog_programacion/sysadmin/directiva-htaccess-para-redireccionar-web-en-dispositivo-movil/" target="_blank">redireccionar una web en función del dispositivo móvil</a>, ya sea iPad, iPhone o cualquier otro smartphone, hoy explicaré más en concreto como saber si se está visitando una web desde un iPad.</p>
<p><strong>Detectar iPad mediante PHP</strong></p>
<p>Detectar si es un iPad es muy sencillo, no es más complicado que saber si está desde un pc, mac o lo que sea. Para ello usaremos la variable de servidor USER_AGENT, $_SERVER['HTTP_USER_AGENT'] que es lo que el navegador envía al servidor para identificarse. En esta variable de servidor contiene bastante información acerca del usuario, como por ejemplo el sistema operativo que está usando y su versión, <a href="http://www.pedroventura.com/blog_programacion/internet/motores-de-navegadores-web-gecko-trident-webkit-y-otros/" target="_blank">el motor de navegador</a> y su versión, y otros datos de idioma y geoposicionamiento básico, etc.</p>
<p>En mi caso la información que está enviando es la siguiente (desde mi navegador de mi pc con Linux):</p>
<pre class="brush: plain; title: ;">
[HTTP_USER_AGENT] =&gt; Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
</pre>
<p>En el caso de que estemos visitando nuestra web desde un iPad será algo similar a lo siguiente:</p>
<pre class="brush: plain; title: ;">

Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; es) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10
</pre>
<p>Con toda esta información ya podemos realizar una simple expresión regular y comprobar si el usuario está navegando desde un iPad. En PHP se haría de la siguiente manera:</p>
<pre class="brush: php; title: ;">
function detectar_iPad() {
return (bool) strpos($_SERVER['HTTP_USER_AGENT'],'iPad');
}
</pre>
<p>Si devuelve <em>true</em> es que es un iPad.</p>
<p><strong>Detectar iPad mediante Javascript</strong></p>
<pre class="brush: plain; title: ;">

function isIPad(){

    if(navigator.userAgent.match(/iPad/i) != null){
        return true;
    }else{ return false;}
}
</pre>
<p><strong>Detectar iPad mediante Apache, directiva en .htaccess</strong></p>
<p>Y la forma de hacer esto a nivel global es metiendo una directiva de Apache, de esta manera no lo tendremos que hacer ni con php ni con Javascript.</p>
<pre class="brush: plain; title: ;">
RewriteCond %{HTTP_USER_AGENT} ^.*iPad.*$
RewriteRule ^(.*)$ http://ipad.dominio.com [R=301]
</pre>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> detectar informacion del usuario por php, detectar ipad con javascript, detectar web si es ipad, javascript ipad, ssi detectar ipad</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/sysadmin/directiva-htaccess-para-redireccionar-web-en-dispositivo-movil/' rel='bookmark' title='Directiva htaccess para redireccionar web en dispositivo móvil'>Directiva htaccess para redireccionar web en dispositivo móvil</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/parseando-xml-con-php-lo-mas-facil-y-simple/' rel='bookmark' title='Parseando XML con PHP. Lo más fácil y simple'>Parseando XML con PHP. Lo más fácil y simple</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/comprobar-extensiones-de-una-imagen-subida-con-php/' rel='bookmark' title='Obtener la extension de un archivo subido con php'>Obtener la extension de un archivo subido con php</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/mostrar-los-mensajes-de-error-del-php-por-pantalla-con-error_reporting/' rel='bookmark' title='mostrar los mensajes de error del php por pantalla con error_reporting'>mostrar los mensajes de error del php por pantalla con error_reporting</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/crear-marcas-de-agua-con-php/' rel='bookmark' title='crear marcas de agua con php'>crear marcas de agua con php</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/php/detectar-ipad-con-php-o-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mantener session PHP cuando se cambia entre HTTP a HTTPS. Evitar perder session</title>
		<link>http://www.pedroventura.com/blog_programacion/php/mantener-session-php-cuando-se-cambia-entre-http-a-https-evitar-perder-session/</link>
		<comments>http://www.pedroventura.com/blog_programacion/php/mantener-session-php-cuando-se-cambia-entre-http-a-https-evitar-perder-session/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 08:18:01 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[librerias y funciones]]></category>
		<category><![CDATA[navegadores]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=3291</guid>
		<description><![CDATA[Desde hace un tiempo que estaba teniendo un problema en mi aplicación en una zona restringida para los administradores y redactores de la web (no se trata de este blog). Los administradores y los redactores accedían a esta sección de la web para gestionar toda la aplicación, así como crear contenido, etc,&#8230; el problema es que tras navegar por la aplicación interna, realizar diferentes acciones, crear contenido, editar o lo que necesitaran hacer llegaba un momento que la aplicación se deslogueaba. Porqué? El problema reside en la session que se crea bajo HTTP o HTTPS no son iguales. De manera que una session creada bajo HTTP como la siguiente &#60;?php $_SESSION['user'] = 'pedro'; ?&#62; bajo HTTPS si queremos hacer un print_r o un var_dump, no tiene valor, no existe. &#60;?php var_dump($_SESSION['user']); ?&#62; Sessión creada bajo HTTP creada con CakePHP Ahora bien, porque se deslogueaba? Normalmente los paneles de control o herramientas de gestión internas y privadas, la cuenta de facebook, etc,.. tienen el login inicial y sucesivas comprobaciones de las credenciales a lo largo de la conexión por medio de la sessión. Pues bién en mi caso había ciertas llamadas bajo http o algunos elementos que incluía por ejemplo un [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/cakephp-cannot-send-session-cache-limiter-headers-already-sent/' rel='bookmark' title='error con sessiones: Cannot send session cache limiter – headers already sent'>error con sessiones: Cannot send session cache limiter – headers already sent</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/cakephp-aumentar-el-tiempo-de-session-timeout/' rel='bookmark' title='Cakephp aumentar el tiempo de session timeout'>Cakephp aumentar el tiempo de session timeout</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/cakephp-funcion-para-bloquear-ips-y-evitar-spam/' rel='bookmark' title='cakephp funcion para bloquear ips y evitar spam'>cakephp funcion para bloquear ips y evitar spam</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/enviar-que-se-descarguen-tu-web-y-bloquear-otros-crawlers-desde-robots-txt/' rel='bookmark' title='Evitar que se descarguen tu web y bloquear otros crawlers desde robots.txt'>Evitar que se descarguen tu web y bloquear otros crawlers desde robots.txt</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/mostrar-los-mensajes-de-error-del-php-por-pantalla-con-error_reporting/' rel='bookmark' title='mostrar los mensajes de error del php por pantalla con error_reporting'>mostrar los mensajes de error del php por pantalla con error_reporting</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Desde hace un tiempo que estaba teniendo un problema en mi aplicación en una zona restringida para los administradores y redactores de la web (no se trata de este blog).</p>
<p>Los administradores y los redactores accedían a esta sección de la web para gestionar toda la aplicación, así como crear contenido, etc,&#8230; el problema es que tras navegar por la aplicación interna, realizar diferentes acciones, crear contenido, editar o lo que necesitaran hacer llegaba un momento que la aplicación se deslogueaba. Porqué?</p>
<p>El problema reside en la session que se crea bajo HTTP o HTTPS no son iguales.<br />
De manera que una session creada bajo HTTP como la siguiente</p>
<pre class="brush: php; title: ;">
&lt;?php   $_SESSION['user'] = 'pedro'; ?&gt;
</pre>
<p>bajo HTTPS si queremos hacer un print_r o un var_dump, no tiene valor, no existe.</p>
<pre class="brush: php; title: ;">
&lt;?php   var_dump($_SESSION['user']); ?&gt;
</pre>
<p>Sessión creada bajo HTTP creada con CakePHP</p>
<p><img class="aligncenter size-full wp-image-3292" title="session http" src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/09/session.png" alt="" width="388" height="75" /></p>
<p>Ahora bien, porque se deslogueaba?</p>
<p>Normalmente los paneles de control o herramientas de gestión internas y privadas, la cuenta de facebook, etc,.. tienen el login inicial y sucesivas comprobaciones de las credenciales a lo largo de la conexión por medio de la sessión. Pues bién en mi caso había ciertas llamadas bajo http o algunos elementos que incluía por ejemplo un .css o un .js que no existían y daban como resultado un error 404 pero bajo http, lo que pasaba es que la conexión http me estaba sobrescribiendo la session de https y cuando el panel de control interno quería comprobar de nuevo las credenciales mediante la sessión, esta se había sobrescrito y estaba vacía de manera que como sistema de seguridad se deslogueaba.</p>
<p><strong>Solución 1. La más rápida</strong></p>
<p>La solución más sencilla a priori es obtener el id de session que se asigna mediante <em>session_start()</em> y pasarla por url. Ejemplo http://www.example.com/index.php?sid=123 => https://secure.example.com/login.php?sid=123<br />
Esto no es ni siquiera recomendable. Lo comento porque lo he visto en muchos blogs y foros. Y personalmente no enviaría el id de session por url, porque puede dar lugar a ataques de tipo <a href="http://en.wikipedia.org/wiki/Session_fixation" target="_blank" rel="nofollow">Session fixation</a>. (Más sobre <a href="http://www.pedroventura.com/wp-content/plugins/download-monitor/download.php?id=21" title="Session Fixation" target="_blank">Session Fixation Vulnerability</a>). A parte parece una chapuza o un parche, y si parece una chapuza entonces es que lo es.</p>
<p>Creo que nunca lo he hecho hasta el momento y es posible que no lo haga.</p>
<p><strong>Solución 2. Usar sólo cookies bajo HTTPS</strong></p>
<ul>
<li>Cuando usas <em>session_start()</em> se genera una cookie con el ID de session y se almacena en el navegador del usuario. La session ID es solicitada, por lo que el script PHP puede identificar la session del usuario.</li>
<li>
Se puede establecer la configuración de la session con parámetros en el PHP para restringir la cookie de session para que solo se solicite en peticiones bajo HTTPS. Esto hace que el ID de session se envíe encriptado, pero que no funcione la session en peticiones bajo HTTP. Lo que tampoco es algo productivo.</li>
</ul>
<p>Para ello tendremos que añadir una directiva de PHP al código.<br />
session.cookie_secure especifica si las cookies deberían enviarse sólo sobre conexiones seguras. Por defecto es off.</p>
<pre class="brush: php; title: ;">
if (env('HTTPS')) {
        ini_set('session.cookie_secure', 1);
}
</pre>
<p>De esta manera forzamos a que las cookies se envíen siempre encriptadas.</p>
<p>O para forzar que sea en toda la aplicación, habría que poner la directiva session.cooke_secure a 1 en cualquier archivo de configuración principal para que herede toda la aplicación.</p>
<p><strong>Solución 3. Usar sólo cookies bajo HTTP</strong></p>
<p>Sería el caso contrario al anterior, el problema es que el id de session no estaría encriptado y sería un nivel que quitamos de seguridad, a la aplicación.</p>
<p>Bastaría con forzar el mismo parámetro anterior a 0.</p>
<pre class="brush: php; title: ;">
ini_set('session.cookie_secure', 0);
</pre>
<p>Como yo uso mucho el framework CakePHP también he querido probar esta solución.<br />
Habría que comentar la linea 420 en /cake/lib/session.php, la linea sería la siguiente:ini_set(&#8216;session.cookie_secure&#8217;, 1);</p>
<pre class="brush: php; title: ;">
if (env('HTTPS')) {
        ini_set('session.cookie_secure', 1);
}
</pre>
<p><strong>Una solución mejor</strong></p>
<p>Quizá la mejor solución es manejar sessiones bajo HTTP y HTTPS pero para eso se requiere que el login, paneles de control de usuario y demás información personal se lleve a cabo bajo HTTPS de manera que toda la información sensible esté en la cookie encriptada y usar una session PHP normal para el resto de datos en general, sin restricciones ni seguridad.</p>
<p>De entre todo el código que he hecho y que he visto, podría como posibles soluciones las siguientes.</p>
<pre class="brush: php; title: ;">

session_start();
setcookie(session_name(), session_id(), NULL, NULL, NULL, 0);
setcookie(session_name(), session_id(), NULL, NULL, NULL, 1);
</pre>
<p>Con lo cual creamos dos cookies de sessiones una para HTTP y otra para HTTPS</p>
<pre class="brush: php; title: ;">
&lt;?php
$secure = array_key_exists('HTTPS', $_SERVER);
$cookie = false;

// existing session
if(array_key_exists('PHPSESSID', $_COOKIE))
{
$cookie = setcookie('PHPSESSID', $_COOKIE['PHPSESSID'], NULL, NULL, NULL, (int) !$secure);
}
session_start();

// new session
if(!$cookie)
{
setcookie(session_name(), session_id(), NULL, NULL, NULL, (int) !$secure);
}
?&gt;
</pre>
<p>De todas maneras este artículo está abierto a sugerencias y comentarios, no estaría mal saber como otros desarrolladores gestionan este problema.</p>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> evitar que entren por url session php, https con php</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/cakephp-cannot-send-session-cache-limiter-headers-already-sent/' rel='bookmark' title='error con sessiones: Cannot send session cache limiter – headers already sent'>error con sessiones: Cannot send session cache limiter – headers already sent</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/cakephp-aumentar-el-tiempo-de-session-timeout/' rel='bookmark' title='Cakephp aumentar el tiempo de session timeout'>Cakephp aumentar el tiempo de session timeout</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/cakephp-funcion-para-bloquear-ips-y-evitar-spam/' rel='bookmark' title='cakephp funcion para bloquear ips y evitar spam'>cakephp funcion para bloquear ips y evitar spam</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/internet/enviar-que-se-descarguen-tu-web-y-bloquear-otros-crawlers-desde-robots-txt/' rel='bookmark' title='Evitar que se descarguen tu web y bloquear otros crawlers desde robots.txt'>Evitar que se descarguen tu web y bloquear otros crawlers desde robots.txt</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/mostrar-los-mensajes-de-error-del-php-por-pantalla-con-error_reporting/' rel='bookmark' title='mostrar los mensajes de error del php por pantalla con error_reporting'>mostrar los mensajes de error del php por pantalla con error_reporting</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/php/mantener-session-php-cuando-se-cambia-entre-http-a-https-evitar-perder-session/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cadenas en JavaScript. Parte 1</title>
		<link>http://www.pedroventura.com/blog_programacion/javascript/cadenas-en-javascript-parte-1/</link>
		<comments>http://www.pedroventura.com/blog_programacion/javascript/cadenas-en-javascript-parte-1/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 08:00:01 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[librerias y funciones]]></category>
		<category><![CDATA[tutoriales]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=3202</guid>
		<description><![CDATA[Hace unas semanas que he recibo 2 libros de Javascript que me he comprado en Amazon y estoy empezando poco a poco a leerlos. Intentaré todo lo que pueda ir colgando resúmenes de los capítulos de uno de los libros : Javascript Cookbook. Por lo que he visto, una maravilla. Las cadenas en JavaScript es uno de los componentes mas importantes, probablemente mas usado que cualquier otro tipo de dato. Las cadenas son también usadas como parámetros cuando se invoca aplicaciones AJAX del lado del servidor, además de crear el formato de serialización básica de todos los objetos JavaScript. Uno de los métodos que comparten todos los objetos JavaScript es toString, que devuelve una cadena que contiene el formato serializado del objeto. Una cadena JavaScript puede ser un tipo de dato primitivo o un objeto. Los tipos de datos primitivos en Javascript son: números, Boolean (true or false), null (sin dato), and undefined (unknown o no conocido). Adicionalmente como tipo de dato primitivo las cadenas son también literales JavaScript: una colección que incluye los números (ya sean floats o enteros), el formato literal de las matrices, objetos y expresiones regulares, así como los números y booleanos. Una cadena Objeto Un [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/funcion-en-php-para-limpiar-cadenas-de-texto-en-utf8/' rel='bookmark' title='funcion en php para limpiar cadenas de texto en utf8'>funcion en php para limpiar cadenas de texto en utf8</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/javascript/obtener-el-nombre-del-dominio-con-javascript/' rel='bookmark' title='obtener el nombre del dominio con javascript'>obtener el nombre del dominio con javascript</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/javascript/revelar-las-contrasenas-con-javascript/' rel='bookmark' title='Revelar las contraseñas con Javascript'>Revelar las contraseñas con Javascript</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/javascript/funciones-javascript-%e2%80%93-setinterval-clearinterval-settimeout-2/' rel='bookmark' title='funciones Javascript – setInterval() clearInterval() setTimeout() – 2'>funciones Javascript – setInterval() clearInterval() setTimeout() – 2</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/javascript/funciones-javascript-setinterval-clearinterval-settimeout/' rel='bookmark' title='funciones Javascript – setInterval()  clearInterval() setTimeout()'>funciones Javascript – setInterval()  clearInterval() setTimeout()</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Hace unas semanas que he recibo 2 libros de Javascript que me he comprado en Amazon y estoy empezando poco a poco a leerlos.<br />
Intentaré todo lo que pueda ir colgando resúmenes de los capítulos de uno de los libros : <a href="http://oreilly.com/catalog/9780596806149/" rel="nofollow" target="_blank">Javascript Cookbook</a>. Por lo que he visto, una maravilla.<br />
<br />
<img src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2011/07/cat.gif" alt="" title="javascript cookbok" width="180" height="236" class="aligncenter size-full wp-image-3213" /></p>
<p>Las cadenas en JavaScript es uno de los componentes mas importantes, probablemente mas usado que cualquier otro tipo de dato.<br />
Las cadenas son también usadas como parámetros cuando se invoca aplicaciones AJAX del lado del servidor, además de crear el formato de serialización básica de todos los objetos JavaScript. Uno de los métodos que comparten todos los objetos JavaScript es <em>toString</em>, que devuelve una cadena que contiene el formato serializado del objeto.</p>
<p>Una cadena JavaScript puede ser un tipo de dato primitivo o un objeto. Los tipos de datos primitivos en Javascript son: números, Boolean (true or false), null (sin dato), and undefined (unknown o no conocido). Adicionalmente como tipo de dato primitivo las cadenas son también literales JavaScript: una colección que incluye los números (ya sean floats o enteros), el formato literal de las matrices, objetos y expresiones regulares, así como los números y booleanos.</p>
<p><strong>Una cadena Objeto</strong></p>
<p>Un objeto de cadena se llama String,  y como todos los otros objetos JavaScript tiene un conjunto de propiedades que vienen predefinidos en el tipo de objeto.</p>
<p>Un objeto String puede crear una instancia mediante el operador <em>new </em>de JavaScript, para crear una nueva instancia de objeto:</p>
<pre class="brush: jscript; title: ;">
var ciudad= new String(&quot;Salamanca&quot;);
</pre>
<p>Una vez que una instancia, cualquiera de las propiedades de la cadena disponibles se puede acceder a ella. Por ejemplo podemos usar el método <em>toLowerCase  </em> para pasar todo a minúsculas</p>
<pre class="brush: jscript; title: ;">
var ciudad_min= ciudad.toLowerCase(); //  quedaría como salamanca
</pre>
<p><strong>Concatenando cadenas</strong></p>
<p>Se pueden concatenar cadenas de varias formas en JavaScript.<br />
Lo normal es usar el operador (+).</p>
<pre class="brush: jscript; title: ;">
var string1 = &quot;Hola &quot;;
var string2 = &quot;mundo&quot;;

var string3 = string1 + string2; // creará una cadena nueva con &quot;Hola mundo&quot;
</pre>
<p>Se puede concatenar las cadenas de texto que sean necesarias con el operador (+).</p>
<p>También se puede usar la asignación (+=) para concatenar varias cadenas.</p>
<pre class="brush: jscript; title: ;">
var oldValue = &quot;creando &quot;;
oldValue += &quot; un tutorial&quot;; // concatendo las cadenas nos resultaría &quot;creando un tutorial&quot;
</pre>
<p>Hay un método incorporado en <em>String</em> que permite concatenar multiples cadenas. Se necesita uno o más parámetros, cada uno de los cuales se anexan al final del objeto de cadena. Este método es <em>concat</em>.</p>
<pre class="brush: jscript; title: ;">
var nwStrng = &quot;&quot;.concat(&quot;Esto&quot;,&quot;es &quot;,&quot;una &quot;,&quot;cadena&quot;); // que devolverá &quot;Esto es una cadena&quot;
</pre>
<p>El método concat puede ser una manera más sencilla de generar una cadena de varios valores, como la generación de una cadena de varios campos del formulario. Sin embargo, el uso del operador de suma es el método más comúnmente utilizado.</p>
<p><strong>Que ocurre cuando quieres concatenar con otro tipo de dato?</strong></p>
<p>Usar exactamente los mismos operadores, tales como la suma (+) y la asignación  (+=), para concatenar.</p>
<p>Por ejemplo con números:</p>
<pre class="brush: jscript; title: ;">
var numValue = 23.45;
var total = &quot;El total es:  &quot; + numValue; // la cadena será &quot;El total es: 23.45&quot;
</pre>
<p>Con el tipo de dato Boolean o booleano</p>
<pre class="brush: jscript; title: ;">
var boolValue = true;
var strngValue = &quot;El valor es: &quot; + boolValue; // resultará &quot;El valor es: true&quot;
</pre>
<p>O con tipo de datos number o con números</p>
<pre class="brush: jscript; title: ;">
var numValue = 3.0;
strngValue = &quot;El valor es: &quot; + numValue; // resultará  &quot;El valor es: 3&quot;
</pre>
<p>La conversión automática de datos también se aplica en la concatenación de un objeto String con una cadena literal, que es una capacidad necesaria cuando no sabes que las cadenas con las que estas trabajando son objetos o literales, pero igualmente se quiere concatenar.</p>
<pre class="brush: jscript; title: ;">
var strObject = new String(&quot;El valor es: &quot;);
var strngLiteral = &quot;una cadena&quot;;
var strngValue = strObject + strngLiteral; // resultará  &quot;El valor es: una cadena&quot;
</pre>
<p><strong>Comparando cadenas</strong></p>
<p>Para comparar cadenas se utiliza el operador (==)</p>
<pre class="brush: jscript; title: ;">
var strName = prompt(&quot;Introduce tu nombre&quot;, &quot;&quot;);

if (strName == &quot;Pedro&quot;) {
   alert(&quot;ooh yeah!!&quot;);
} else {
   alert(&quot;no eres el peter!&quot;);
}
</pre>
<p>Ahora digamos que queremos comparar la cadena y el tipo de dato. Para ellos usaremos el comparador estricto de igualdad (===) que comprueba que el dato sea el mismo, así como el tipo de dato.</p>
<pre class="brush: jscript; title: ;">
var  strObject = new  String(&quot;Pedro&quot;);
var  strLiteral  =  &quot;Pedro&quot;;

if (strObject  ==  strLiteral) // esto devolverá true

if (strObject === strLiteral) // esto fallará porque los tipos de dato son distintos
</pre>
<p>También se pueden comparar cadenas para saber el orden alfabético de una palabra. Esto se hace muy fácilmente con el comparador (<) o (>), es decir, el mayor que o menor que.</p>
<pre class="brush: jscript; title: ;">
var sOne = &quot;gato&quot;;
var sTwo = &quot;perro&quot;
if (sOne &gt; sTwo) //devolverá true porque la &quot;g&quot; está antes que la &quot;p&quot;
</pre>
<p>También se puede usar con mayúsculas y minúsculas.</p>
<pre class="brush: jscript; title: ;">
var sOne  = &quot;Gato&quot;;
var sTwo  = &quot;gato&quot;;
if (sOne &gt;=  sTwo) // true, porque 'G'  tiene mas importancial léxicamente que &quot;g&quot;.
</pre>
<p>Otra forma para comparar cadenas es usar el método <em>localeCompare</em> de String.</p>
<pre class="brush: jscript; title: ;">
var fruit1 = &quot;manzana&quot;;
var fruit2 = &quot;pero&quot;;
var i = fruit1.localeCompare(fruit2); // devolverá -1
</pre>
<p><strong>Pasar cadena a mayúsculas. O bien pasar cadena a minúsculas</strong></p>
<p>Hay varios métodos incorporadoras en String para convertir textos a mayúsculas o minúsculas que son <em>toUpperCase</em> y <em>toLowerCase </em> respectivamente.</p>
<p>Pasar cadena de texto a mayúsculas en Javascript.</p>
<pre class="brush: jscript; title: ;">
var strName = prompt(&quot;Cual es tu nombre&quot;, &quot;&quot;);

var NombreMayuscula = strName.toUpperCase ();
</pre>
<p>Pasar cadena de texto a minúscula en Javascript.</p>
<pre class="brush: jscript; title: ;">
var strName = prompt(&quot;Cual es tu nombre&quot;, &quot;&quot;);

var NombreMayuscula = strName.toLowerCase ();
</pre>
<p>Fuente : <a href="http://oreilly.com/catalog/9780596806149/" rel="nofollow" target="_blank">Javascript Cookbook</a></p>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> parte de cadena jscript, cadenas en javascript, javascript comparar cadenas, javascript comparar texto, javascript enviar parametros string, javascripts cadenas inicio, limpiar cadena con javascript, limpiar cadena javascript, limpiar string en javascript, msgbox javascript concatenar variable</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/funcion-en-php-para-limpiar-cadenas-de-texto-en-utf8/' rel='bookmark' title='funcion en php para limpiar cadenas de texto en utf8'>funcion en php para limpiar cadenas de texto en utf8</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/javascript/obtener-el-nombre-del-dominio-con-javascript/' rel='bookmark' title='obtener el nombre del dominio con javascript'>obtener el nombre del dominio con javascript</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/javascript/revelar-las-contrasenas-con-javascript/' rel='bookmark' title='Revelar las contraseñas con Javascript'>Revelar las contraseñas con Javascript</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/javascript/funciones-javascript-%e2%80%93-setinterval-clearinterval-settimeout-2/' rel='bookmark' title='funciones Javascript – setInterval() clearInterval() setTimeout() – 2'>funciones Javascript – setInterval() clearInterval() setTimeout() – 2</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/javascript/funciones-javascript-setinterval-clearinterval-settimeout/' rel='bookmark' title='funciones Javascript – setInterval()  clearInterval() setTimeout()'>funciones Javascript – setInterval()  clearInterval() setTimeout()</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/javascript/cadenas-en-javascript-parte-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP meter una sentencia if dentro de un echo</title>
		<link>http://www.pedroventura.com/blog_programacion/php/php-meter-una-sentencia-if-dentro-de-un-echo/</link>
		<comments>http://www.pedroventura.com/blog_programacion/php/php-meter-una-sentencia-if-dentro-de-un-echo/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 08:00:14 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[librerias y funciones]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=3154</guid>
		<description><![CDATA[Digamos que quieres hacer algo así: echo '&#60;option value=&#34;'.$value.'&#34;'.if($value=='España') echo 'selected=&#34;selected&#34;';.'&#62;'.$value.'&#60;/option&#62;'; Esto claro está va a fallar porque no se puede meter sentencias de control dentro de un echo. Para ello, se puede usar un pequeño truco usando el operador ternary (o ternario) para similar una sentencia if/else. Bueno no simula nada, porque es en sí un operador condicional. Se define de la siguiente manera &#8220;?:&#8221; &#60;?php // Ejemplo de uso para: Operador Ternario $action = (empty($_POST['action'])) ? 'default' : $_POST['action']; // Lo anterior es idéntico a esta sentencia if/else if (empty($_POST['action'])) { $action = 'default'; } else { $action = $_POST['action']; } ?&#62; La expresión (expr1) ? (expr2) : (expr3) evalúa a expr2 si expr1 se evalúa como TRUE y a expr3 si expr1 se evalúa como FALSE. A partir de PHP 5.3, es posible dejar de lado la parte media del operador ternario. La expresión expr1 ?: expr3 retorna expr1 si expr1 se evalúa como TRUE y expr3 si es de otra manera. De esta manera ya podremos tener la siguiente lógica en nuestro formulario para verificar si esta seleccionado o no usando una sentencia de control. echo '&#60;option value=&#34;'.$value.'&#34; '.(($value=='España')?'selected=&#34;selected&#34;':&#34;&#34;).'&#62;'.$value.'&#60;/option&#62;'; El operador ternario puede se un poco [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/como-comprobar-si-existe-una-funcion-en-php/' rel='bookmark' title='Cómo comprobar si existe una función en PHP'>Cómo comprobar si existe una función en PHP</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/funcion-php-generar-password/' rel='bookmark' title='funcion php generar password'>funcion php generar password</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/una-aplicacion-multiples-bases-datos-cakephp/' rel='bookmark' title='Una aplicación, multiples bases de datos CakePHP'>Una aplicación, multiples bases de datos CakePHP</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/javascript/cambiar-el-nombre-de-una-clase-css-con-javascript-y-con-jquery/' rel='bookmark' title='Cambiar el nombre de una clase css con javascript y con jquery'>Cambiar el nombre de una clase css con javascript y con jquery</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/comprobar-si-existe-un-fichero-con-php-y-unix/' rel='bookmark' title='comprobar si existe un fichero con php y linux'>comprobar si existe un fichero con php y linux</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Digamos que quieres hacer algo así:</p>
<pre class="brush: php; title: ;">
 echo '&lt;option value=&quot;'.$value.'&quot;'.if($value=='España') echo 'selected=&quot;selected&quot;';.'&gt;'.$value.'&lt;/option&gt;';
</pre>
<p>Esto claro está va a fallar porque no se puede meter sentencias de control dentro de un <em>echo</em>.</p>
<p>Para ello, se puede usar un pequeño truco usando el operador ternary (o ternario) para similar una sentencia if/else. Bueno no simula nada, porque es en sí un operador condicional.</p>
<p>Se define de la siguiente manera &#8220;?:&#8221;</p>
<pre class="brush: php; title: ;">
&lt;?php
// Ejemplo de uso para: Operador Ternario
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];

// Lo anterior es idéntico a esta sentencia if/else
if (empty($_POST['action'])) {
    $action = 'default';
} else {
    $action = $_POST['action'];
}

?&gt;
</pre>
<p>La expresión (expr1) ? (expr2) : (expr3) evalúa a expr2 si expr1 se evalúa como TRUE y a expr3 si expr1 se evalúa como FALSE. </p>
<p>A partir de PHP 5.3, es posible dejar de lado la parte media del operador ternario. La expresión expr1 ?: expr3 retorna expr1 si expr1 se evalúa como TRUE y expr3 si es de otra manera. </p>
<p>De esta manera ya podremos tener la siguiente lógica en nuestro formulario para verificar si esta seleccionado o no usando una sentencia de control.</p>
<pre class="brush: php; title: ;">
echo '&lt;option value=&quot;'.$value.'&quot; '.(($value=='España')?'selected=&quot;selected&quot;':&quot;&quot;).'&gt;'.$value.'&lt;/option&gt;';
</pre>
<p>El operador ternario puede se un poco complejo en algunos casos.</p>
<pre class="brush: php; title: ;">
&lt;?php
echo &quot;a string that has a &quot; . (true) ? 'true' : 'false' . &quot; condition in. &quot;;
?&gt;
</pre>
<p>Imprimirá true.</p>
<p>Para comparar todo el conjunto hacer lo siguiente:</p>
<pre class="brush: php; title: ;">
&lt;?php
echo &quot;a string that has a &quot; . ((true) ? 'true' : 'false') . &quot; condition in. &quot;;
?&gt;
</pre>
<p>Esto evaluará todo el string como se espera: &#8220;a string that has a true condition in. &#8221;</p>
<p>Fuente: <a href="http://www.php.net/manual/language.operators.comparison.php" rel="nofollow" target="_blank">php.net Operadores de comparación</a></p>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> <option> con echo dentro, condicion if con email, consulta mysql dentro funcion php en sentencia if, dentro de un if en php no hacer nada en una condicion, funciones php para string isempty, if dentro de query mysql en php, php echo if else, sentencia if dentro de un select en php, sentencia if php wordpress</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/como-comprobar-si-existe-una-funcion-en-php/' rel='bookmark' title='Cómo comprobar si existe una función en PHP'>Cómo comprobar si existe una función en PHP</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/funcion-php-generar-password/' rel='bookmark' title='funcion php generar password'>funcion php generar password</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/una-aplicacion-multiples-bases-datos-cakephp/' rel='bookmark' title='Una aplicación, multiples bases de datos CakePHP'>Una aplicación, multiples bases de datos CakePHP</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/javascript/cambiar-el-nombre-de-una-clase-css-con-javascript-y-con-jquery/' rel='bookmark' title='Cambiar el nombre de una clase css con javascript y con jquery'>Cambiar el nombre de una clase css con javascript y con jquery</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/comprobar-si-existe-un-fichero-con-php-y-unix/' rel='bookmark' title='comprobar si existe un fichero con php y linux'>comprobar si existe un fichero con php y linux</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/php/php-meter-una-sentencia-if-dentro-de-un-echo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Error de Mysql: Found row where the auto_increment column has the value 0</title>
		<link>http://www.pedroventura.com/blog_programacion/sql/error-de-mysql-found-row-where-the-auto_increment-column-has-the-value-0/</link>
		<comments>http://www.pedroventura.com/blog_programacion/sql/error-de-mysql-found-row-where-the-auto_increment-column-has-the-value-0/#comments</comments>
		<pubDate>Wed, 23 Feb 2011 16:35:28 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[librerias y funciones]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=2236</guid>
		<description><![CDATA[Una tabla que me estaba dando este error: Found row where the auto_increment column has the value 0. Ha simple vista esta claro. Un campo que es autoincrementable que tiene el valor 0. Explico como lo he arreglado, es muy sencillo. Al hacer un check de la tabla en cuestión es como se descubre este warning. check table MI_TABLA Extended; Table Op Msg_type Msg_text &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; BBDD.MI_TABLA check warning Found row where the auto_increment column has the value 0 BBDD.MI_TABLA check status OK Intento reparar la tabla con REPAIR repair table MI_TABLA; Table Op Msg_type Msg_text &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212; &#8212;&#8212;&#8211; &#8212;&#8212;&#8211; BBDD.MI_TABLA repair status OK Vuelvo a chequear la tabla a ver si se ha solucionado al problema. Pero no! La secuencia auto-numérica no se ha podido ajustar. check table MI_TABLA Extended; Table Op Msg_type Msg_text &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; BBDD.MI_TABLA check warning Found row where the auto_increment column has the value 0 BBDD.MI_TABLA check status OK Bueno pues como acabo de indicar, este error significa que tiene un registro en la tabla donde la columna AUTO_INCREMENT contiene un valor de índice de 0. Esto no es un error por si mismo, pero puede causar problemas si decide volcar [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/cakephp/una-aplicacion-multiples-bases-datos-cakephp/' rel='bookmark' title='Una aplicación, multiples bases de datos CakePHP'>Una aplicación, multiples bases de datos CakePHP</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/sql/optimizando-consultas-mysql-creando-y-definiendo-indices-manage-index/' rel='bookmark' title='Optimizando consultas mysql. Creando y definiendo indices. Manage index'>Optimizando consultas mysql. Creando y definiendo indices. Manage index</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/sql/error-client-does-not-support-authentication-protocol-requested-by-server/' rel='bookmark' title='Error Client does not support authentication protocol requested by server'>Error Client does not support authentication protocol requested by server</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/mostrar-los-mensajes-de-error-del-php-por-pantalla-con-error_reporting/' rel='bookmark' title='mostrar los mensajes de error del php por pantalla con error_reporting'>mostrar los mensajes de error del php por pantalla con error_reporting</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/cakephp-cannot-send-session-cache-limiter-headers-already-sent/' rel='bookmark' title='error con sessiones: Cannot send session cache limiter – headers already sent'>error con sessiones: Cannot send session cache limiter – headers already sent</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Una tabla que me estaba dando este error: Found row where the auto_increment column has the value 0. Ha simple vista esta claro. Un campo que es autoincrementable que tiene el valor 0.<br />
Explico como lo he arreglado, es muy sencillo.</p>
<p>Al hacer un check de la tabla en cuestión es como se descubre este warning.</p>
<pre class="brush: plain; title: ;">
check table MI_TABLA Extended;
</pre>
<p>Table                  Op      Msg_type  Msg_text<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;  &#8212;&#8212;  &#8212;&#8212;&#8211;  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
BBDD.MI_TABLA  check   warning   Found row where the auto_increment column has the value 0<br />
BBDD.MI_TABLA  check   status    OK                                                       </p>
<p>Intento reparar la tabla con REPAIR</p>
<pre class="brush: plain; title: ;">
repair table MI_TABLA;
</pre>
<p>Table                  Op      Msg_type  Msg_text<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;  &#8212;&#8212;  &#8212;&#8212;&#8211;  &#8212;&#8212;&#8211;<br />
BBDD.MI_TABLA  repair  status    OK      </p>
<p>Vuelvo a chequear la tabla a ver si se ha solucionado al problema. Pero no! La secuencia auto-numérica no se ha podido ajustar.</p>
<pre class="brush: plain; title: ;">
check table MI_TABLA Extended;
</pre>
<p>Table                  Op      Msg_type  Msg_text<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;  &#8212;&#8212;  &#8212;&#8212;&#8211;  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
BBDD.MI_TABLA  check   warning   Found row where the auto_increment column has the value 0<br />
BBDD.MI_TABLA  check   status    OK                                                       </p>
<p>Bueno pues como acabo de indicar, este error significa que tiene un registro en la tabla donde la columna AUTO_INCREMENT contiene un valor de índice de 0.<br />
Esto no es un error por si mismo, pero puede causar problemas si decide volcar la tabla y restaurarla o realizar un ALTER TABLE en la tabla.<br />
En este caso, la columna AUTO_INCREMENT cambia los valores según las reglas de las columnas AUTO_INCREMENT , que pueden causar problemas tales como errores de clave duplicada.</p>
<p>Para evitar las advertencias, simplemente se puede cambiar el id en cuestión ejecutando un  UPDATE para poner en la columna un valor distinto a 0.<br />
O bien, se puede borrar directamente si el registro es irrelevante o no necesario.</p>
<p>Yo he optado por lo rápido y he borrado el registro con valor 0. Después hago otra vez el check de la tabla y ya todo está ok.</p>
<pre class="brush: plain; title: ;">
check table MI_TABLA Extended;
</pre>
<p>Table                  Op      Msg_type  Msg_text<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;  &#8212;&#8212;  &#8212;&#8212;&#8211;  &#8212;&#8212;&#8211;<br />
BBDD.MI_TABLA  check   status    OK      </p>


<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/cakephp/una-aplicacion-multiples-bases-datos-cakephp/' rel='bookmark' title='Una aplicación, multiples bases de datos CakePHP'>Una aplicación, multiples bases de datos CakePHP</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/sql/optimizando-consultas-mysql-creando-y-definiendo-indices-manage-index/' rel='bookmark' title='Optimizando consultas mysql. Creando y definiendo indices. Manage index'>Optimizando consultas mysql. Creando y definiendo indices. Manage index</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/sql/error-client-does-not-support-authentication-protocol-requested-by-server/' rel='bookmark' title='Error Client does not support authentication protocol requested by server'>Error Client does not support authentication protocol requested by server</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/mostrar-los-mensajes-de-error-del-php-por-pantalla-con-error_reporting/' rel='bookmark' title='mostrar los mensajes de error del php por pantalla con error_reporting'>mostrar los mensajes de error del php por pantalla con error_reporting</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/cakephp-cannot-send-session-cache-limiter-headers-already-sent/' rel='bookmark' title='error con sessiones: Cannot send session cache limiter – headers already sent'>error con sessiones: Cannot send session cache limiter – headers already sent</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/sql/error-de-mysql-found-row-where-the-auto_increment-column-has-the-value-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Funciones php para codificar textos</title>
		<link>http://www.pedroventura.com/blog_programacion/php/funciones-php-para-codificar-textos/</link>
		<comments>http://www.pedroventura.com/blog_programacion/php/funciones-php-para-codificar-textos/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 22:30:45 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[librerias y funciones]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=2211</guid>
		<description><![CDATA[En programación ya sea php u otro lenguaje es muy útil y aconsejable usar textos codificados para determinadas funcionalidades de seguridad. Php nos ofrece una serie de funciones para encriptar y crear un hash a partir de una cadena de texto. crypt() Funcion para para crear un hash de una cadena. Por defecto usa el algoritmo básico DES-based o un algoritmo alternativo que haya disponible en el sistema. Muchas veces suele tomar algoritmos basados en md5. Ejemplo de uso: &#60;?php $password = 'mi_password'; $hash = crypt($password); ?&#62; sha1 Calcula el hash sha1 de un string. Utiliza el algoritmo Secure Hash Algorithm 1 (SHA1). SHA-0 y SHA-1 producen una salida resumen de 160 bits (20 bytes) de un mensaje que puede tener un tamaño máximo de 264 bits, y se basa en principios similares a los usados por el profesor Ronald L. Rivest del MIT en el diseño de los algoritmos de resumen de mensaje MD4 y MD5. Algunos datos de interés: La resistencia del algoritmo SHA-1 se ha visto comprometida a lo largo del año 2005. Después de que MD5, entre otros, quedara seriamente comprometido en el 2004 por parte de un equipo de investigadores chinos, el tiempo de vida [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/sql/sql-actualizar-todos-los-passwords-de-una-tabla-a-md5/' rel='bookmark' title='sql actualizar todos los passwords de una tabla a md5'>sql actualizar todos los passwords de una tabla a md5</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/funcion-en-php-para-limpiar-cadenas-de-texto-en-utf8/' rel='bookmark' title='funcion en php para limpiar cadenas de texto en utf8'>funcion en php para limpiar cadenas de texto en utf8</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/php-meter-una-sentencia-if-dentro-de-un-echo/' rel='bookmark' title='PHP meter una sentencia if dentro de un echo'>PHP meter una sentencia if dentro de un echo</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/componente-de-autologin-para-cakephp-no-cerrar-sesion-uso-y-manejo-de-cookies/' rel='bookmark' title='Componente de AutoLogin para CakePHP, no cerrar sesión. Uso y manejo de Cookies'>Componente de AutoLogin para CakePHP, no cerrar sesión. Uso y manejo de Cookies</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/expresiones-regulares-php/' rel='bookmark' title='expresiones regulares php'>expresiones regulares php</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>En programación ya sea php u otro lenguaje es muy útil y aconsejable usar textos codificados para determinadas funcionalidades de seguridad.<br />
Php nos ofrece una serie de funciones para encriptar y crear un hash a partir de una cadena de texto.</p>
<p><strong>crypt() </strong></p>
<p>Funcion para para crear un hash de una cadena. Por defecto usa el algoritmo básico DES-based o un algoritmo alternativo que haya disponible en el sistema. Muchas veces suele tomar algoritmos basados en md5.</p>
<p>Ejemplo de uso:</p>
<pre class="brush: php; title: ;">
&lt;?php
$password = 'mi_password';
$hash = crypt($password);
?&gt;
</pre>
<p><strong>sha1 </strong></p>
<p>Calcula el hash sha1 de un string. Utiliza el algoritmo Secure Hash Algorithm 1 (SHA1). SHA-0 y SHA-1 producen una salida resumen de 160 bits (20 bytes) de un mensaje que puede tener un tamaño máximo de 264 bits, y se basa en principios similares a los usados por el profesor Ronald L. Rivest del MIT en el diseño de los algoritmos de resumen de mensaje MD4 y MD5.</p>
<p>Algunos datos de interés:</p>
<p>La resistencia del algoritmo SHA-1 se ha visto comprometida a lo largo del año 2005. Después de que MD5, entre otros, quedara seriamente comprometido en el 2004 por parte de un equipo de investigadores chinos, el tiempo de vida de SHA-1 quedó visto para sentencia.<br />
El mismo equipo de investigadores chinos, compuesto por Xiaoyun Wang, Yiqun Lisa Yin y Hongbo Yu (principalmente de la Shandong University en China), ha demostrado que son capaces de romper el SHA-1 en al menos 269 operaciones, unas 2000 veces más rápido que un ataque de fuerza bruta (que requeriría 280 operaciones). Los últimos ataques contra SHA-1 han logrado debilitarlo hasta 263.</p>
<p>Ejemplo de uso:</p>
<pre class="brush: php; title: ;">
&lt;?php
$str = 'mi_contraseña';
echo sha1($str);
?&gt;
</pre>
<p><strong>sha1_file()</strong></p>
<p>Calcula el hash sha1 de un archivo. Básicamente es lo mismo que sha1() pero en vez de introducir una cadena de texto se introduce el path completo de una cadena de texto.</p>
<p>Ejemplo de uso:</p>
<pre class="brush: php; title: ;">
&lt;?php
$ruta_fichero = '/home/pedro/fichero.txt';
echo sha1($ruta_fichero);
?&gt;
</pre>
<p><strong>md5() </strong></p>
<p>Calcula el hash md5 de un string. Uno de las funciones de encriptación mas usadas. utiliza el algoritmo de &#8220;resumen de mensajes&#8221; o MD5 Message-Digest Algorithm.</p>
<p>Puedes utilizar el siguiente <a href="http://www.pedroventura.com/blog_programacion/conversor-md5/">Generador online md5</a> para comprobar y testear resultados de cadenas encriptadas en md5.</p>
<p>Puedes usar la siguiente función para generar contraseñas <a href="http://www.pedroventura.com/blog_programacion/2010/09/20/funcion-php-generar-password/">http://www.pedroventura.com/blog_programacion/2010/09/20/funcion-php-generar-password</a>/ para usuarios o cualquier otra funcionalidad. Una vez generada la contraseña, se le aplica el md5() o el sha1().</p>
<p>Existen infinidad de funciones para generar una buena cadena encriptada en md5(), tantas como cada uno lo quiera complicar, añadiendo variables de tiempo, añadiendo intervalos de pulso de cpu, añadiendo &#8220;salt&#8221;, combinaciones adicionales de palabras y caracteres a la cadena de texto dada, añadiendo expresiones regulares propias e incorporando un sistema de encriptacion adicional, etc..</p>
<p>Mirando en la documentación oficial de php.net, me quedo con la siguiente función, es simple, pero eficaz.<br />
Pero sin duda si queréis usar la  función en algún desarrollo en producción la cambiaría para no dejarla igual. Mucha gente ya la habrá copiado tal cual.</p>
<pre class="brush: php; title: ;">
&lt;?php
function eliteEncrypt($string) {
    // Create a salt
    $salt = md5($string.&quot;%*4!#$;\.k~'(_@&quot;); 

    // Hash the string
    $string = md5(&quot;$salt$string$salt&quot;); 

    return $string;
}
?&gt;
</pre>
<p>A pesar de ser una de las funciones para codificar o encriptar textos más usadas, ciertas investigaciones han revelado vulnerabilidades que hacen cuestionable el uso futuro del MD5. En agosto de 2004, Xiaoyun Wang, Dengguo Feng, Xuejia Lai y Hongbo Yu anunciaron el descubrimiento de colisiones de hash para MD5. Su ataque se consumó en una hora de cálculo con un clúster IBM P690.<br />
Aunque dicho ataque era analítico, el tamaño del hash (128 bits) es lo suficientemente pequeño como para que resulte vulnerable frente a ataques de «fuerza bruta». El proyecto de computación distribuida MD5CRK arrancó en marzo de 2004 con el propósito de demostrar que MD5 es inseguro frente a uno de tales ataques, aunque acabó poco después del aviso de la publicación de la vulnerabilidad del equipo de Wang.<br />
Debido al descubrimiento de métodos sencillos para generar colisiones de hash, muchos investigadores recomiendan su sustitución por algoritmos alternativos tales como SHA-1 o RIPEMD-160. </p>
<p><strong>hash()</strong></p>
<p>Genera un valor cifrado en base a un string.<br />
En esta función primero hay que especificar que encriptacion queremos usar, y como segundo valor indicamos la cadena de texto.</p>
<p>Ejemplo para encriptar un texto en base al algoritmo <a href="http://es.wikipedia.org/wiki/RIPEMD-160" rel="nofollow" target="_blank">ripemd160</a></p>
<pre class="brush: php; title: ;">
&lt;?php
echo hash('ripemd160', 'Codificando un texto.');
?&gt;
</pre>
<p>También podemos usar sha1 o md5</p>
<pre class="brush: php; title: ;">
&lt;?php
$id = rand();
$salt =&quot;Un texto aleatorio que queramos para añadir mas seguridad&quot;;
$codigo = hash(&quot;sha512&quot;, $id.$salt);
?&gt;
</pre>
<p>La lista actual de sistema de encriptacion que soporta la funcion hash() es la siguiente:</p>
<p>    [0] => md4<br />
    [1] => md5<br />
    [2] => sha1<br />
    [3] => sha256<br />
    [4] => sha384<br />
    [5] => sha512<br />
    [6] => ripemd128<br />
    [7] => ripemd160<br />
    [8] => whirlpool<br />
    [9] => tiger128,3<br />
    [10] => tiger160,3<br />
    [11] => tiger192,3<br />
    [12] => tiger128,4<br />
    [13] => tiger160,4<br />
    [14] => tiger192,4<br />
    [15] => snefru<br />
    [16] => gost<br />
    [17] => adler32<br />
    [18] => crc32<br />
    [19] => crc32b<br />
    [20] => haval128,3<br />
    [21] => haval160,3<br />
    [22] => haval192,3<br />
    [23] => haval224,3<br />
    [24] => haval256,3<br />
    [25] => haval128,4<br />
    [26] => haval160,4<br />
    [27] => haval192,4<br />
    [28] => haval224,4<br />
    [29] => haval256,4<br />
    [30] => haval128,5<br />
    [31] => haval160,5<br />
    [32] => haval192,5<br />
    [33] => haval224,5<br />
    [34] => haval256,5</p>
<p>Para más informacion consultar la documentacion oficial de php en php.net</p>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> genera cadena encriptada en linea, caclcular md5 y sha1 a la vez, encriptar texto php, encriptar un cadena cakephp, encriptar y desencriptar salt en php, funciones en php para seguridad, funciones php seguridad, no codificacion de funciones, php5 limpiar cadenas, encriptar texto en html</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/sql/sql-actualizar-todos-los-passwords-de-una-tabla-a-md5/' rel='bookmark' title='sql actualizar todos los passwords de una tabla a md5'>sql actualizar todos los passwords de una tabla a md5</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/funcion-en-php-para-limpiar-cadenas-de-texto-en-utf8/' rel='bookmark' title='funcion en php para limpiar cadenas de texto en utf8'>funcion en php para limpiar cadenas de texto en utf8</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/php-meter-una-sentencia-if-dentro-de-un-echo/' rel='bookmark' title='PHP meter una sentencia if dentro de un echo'>PHP meter una sentencia if dentro de un echo</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/componente-de-autologin-para-cakephp-no-cerrar-sesion-uso-y-manejo-de-cookies/' rel='bookmark' title='Componente de AutoLogin para CakePHP, no cerrar sesión. Uso y manejo de Cookies'>Componente de AutoLogin para CakePHP, no cerrar sesión. Uso y manejo de Cookies</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/expresiones-regulares-php/' rel='bookmark' title='expresiones regulares php'>expresiones regulares php</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/php/funciones-php-para-codificar-textos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Parsear e importar contactos o direcciones de email desde .csv</title>
		<link>http://www.pedroventura.com/blog_programacion/php/parsear-e-importar-contactos-o-direcciones-de-email-desde-csv/</link>
		<comments>http://www.pedroventura.com/blog_programacion/php/parsear-e-importar-contactos-o-direcciones-de-email-desde-csv/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 17:55:01 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[librerias y funciones]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=2160</guid>
		<description><![CDATA[Necesitaba hacer una función para parsear y procesar un .csv pues quería hacer una aplicación que subiendo un .csv exportado de la libreta de direcciones de Outlook o Thunderbird, un usuario pudiera invitar a todos sus contactos de su agenda. Una de las claves de esta función es la función de php fgetcsv(), que es similar a fgets() excepto que fgetcsv() examina la línea que lee para tratar campos en formato CSV y devuelve una matriz que contiene el campo leído. A continuación la función para parsear y procesar archivos .csv exportados desde Outlook o Thunderbird. Nota: la función tan sólo procesa y obtiene todos las direcciones de correo válidas en un array, a partir de aquí que cada uno siga como quiera. Lo normal es presentar al usuario todos los correos obtenidos en un formulario y que pueda elegir a que contactos le llega la invitación, seleccionando o deselecionando sendos checkbox. Esto ya se puede hacer todo lo bonito que se quiera con diseño y jquery (o las librerías de javascript que uno elija). &#60;?php /** * Funcion que se encarga de procesar el contenido de un archivo .csv * Los archivos .csv o comma-separated values, suelen servir para [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/social-media/invitar-a-contactos-de-facebook-desde-una-web-externa-con-la-api-fbml/' rel='bookmark' title='Invitar a contactos de facebook desde una web externa con la API FBML'>Invitar a contactos de facebook desde una web externa con la API FBML</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/expresiones-regulares-para-parsear-un-rss-o-xml/' rel='bookmark' title='expresiones regulares para parsear un RSS o XML'>expresiones regulares para parsear un RSS o XML</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/enviar-un-correo-via-telnet-desde-consola-linux/' rel='bookmark' title='Enviar un correo via telnet desde consola linux'>Enviar un correo via telnet desde consola linux</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/copiar-archivos-desde-un-servidor-remoto/' rel='bookmark' title='copiar archivos desde un servidor remoto'>copiar archivos desde un servidor remoto</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/una-aplicacion-multiples-bases-datos-cakephp/' rel='bookmark' title='Una aplicación, multiples bases de datos CakePHP'>Una aplicación, multiples bases de datos CakePHP</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Necesitaba hacer una función para parsear y procesar un .csv pues quería hacer una aplicación que subiendo un .csv exportado de la libreta de direcciones de Outlook o Thunderbird, un usuario pudiera invitar a todos sus contactos de su agenda.<br />
Una de las claves de esta función es la función de php fgetcsv(), que es similar a fgets() excepto que fgetcsv() examina la línea que lee para tratar campos en formato CSV y devuelve una matriz que contiene el campo leído.</p>
<p>A continuación la función para parsear y procesar archivos .csv exportados desde Outlook o Thunderbird.<br />
Nota: la función tan sólo procesa y obtiene todos las direcciones de correo válidas en un array, a partir de aquí que cada uno siga como quiera. Lo normal es presentar al usuario todos los correos obtenidos en un formulario y que pueda elegir a que contactos le llega la invitación, seleccionando o deselecionando sendos checkbox. Esto ya se puede hacer todo lo bonito que se quiera con diseño y jquery (o las librerías de javascript que uno elija).</p>
<pre class="brush: php; title: ;">
&lt;?php
/**
* Funcion que se encarga de procesar el contenido de un archivo .csv
* Los archivos .csv o comma-separated values, suelen servir para exportar la libreta de direcciones de gestores de correo como Outlook o Thunderbird
* En la siguiente funcion, se procesa el contenido de un .csv para recoger todos los emails que contenga.
* Se realiza previamente una serie de comprobacaciones de seguridad.
* Así como el filtrado con una expresion regular para tan sólo obtener las direcciones de email, pues un csv contiene tantos datos como tengamos en nuestra libreta de direcciones
* El resto de la lógica queda abierta a las necesidades de cada uno.
* Nota: este ejemplo esta realizado sobre el framework CakePHP
* @author Pedro Ventura www.pedroventura.com
* @version 1.0
*
*
*/
function procesar_contactos_csv()
{
    $aFormatos_fichero_validos = array('text/csv');
    if(!empty($this-&gt;data)) // $this-&gt;data en el framework CakePHP es el equivalente a $_POST
    {
        if(isset($this-&gt;data['Usuario']['name1']['name'])&amp;&amp; (!empty($this-&gt;data['Usuario']['name1']['name'])))
        {
            $array_emails = array();
            if(in_array($this-&gt;data['Usuario']['name1']['type'],$aFormatos_fichero_validos))
            {
                $punteroFichero = fopen($this-&gt;data['Usuario']['name1']['tmp_name'], &quot;r&quot;);
                if($punteroFichero)
                {
                    while (($aDatos = fgetcsv($punteroFichero, 1000, &quot;,&quot;)) !== FALSE)
                    {
                        foreach($aDatos as $registro)
                        {
                            # solo tomo los emails, pues $registro puede tener el nombre, apellidos, etc..
                            if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$registro))
                            {
                                # verifico que no este ya en el array de emails finales, para no repetirlo
                                if(!in_array($registro,$array_emails))
                                {
                                    $array_emails[] = $registro;
                                }
                            }
                        }
                    }
                    fclose($punteroFichero);
                }
            }
            else
            {
                $this-&gt;Session-&gt;setFlash('Formato de archivo incorrecto, tienes que subir un archivo .csv');
            }
            # seteamos el array obtenido para seguir procesando o realizar la logica que cada uno desee
            $this-&gt;set('aEmailsContactos',$array_emails);
        }
        else
        {
            $this-&gt;Session-&gt;setFlash('Primero debes seleccionar un archivo .csv para poder procesarlo!');
        }
    }
}//fin funcion
?&gt;
</pre>
<p>No me voy a parar a explicar mucho el HTML para generar el formulario de subida, esta parte es relativamente sencilla, pero vendría a ser algo así</p>
<pre class="brush: xml; title: ;">
&lt;form action=&quot;#&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;
&lt;input type=&quot;file&quot; name=&quot;data[Usuario][name1]&quot; /&gt;
&lt;input type=&quot;submit&quot; value=&quot;Procesar contactos&quot;&gt;
&lt;/form&gt;
</pre>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> cómo dividir un archivo de mailing y csv, exportar contactos con direcciones de correo, importar contactos csv android, importar direcciones wab con thunderbird, importar wab thunderbird, pasar contactos csv a android</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/social-media/invitar-a-contactos-de-facebook-desde-una-web-externa-con-la-api-fbml/' rel='bookmark' title='Invitar a contactos de facebook desde una web externa con la API FBML'>Invitar a contactos de facebook desde una web externa con la API FBML</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/expresiones-regulares-para-parsear-un-rss-o-xml/' rel='bookmark' title='expresiones regulares para parsear un RSS o XML'>expresiones regulares para parsear un RSS o XML</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/enviar-un-correo-via-telnet-desde-consola-linux/' rel='bookmark' title='Enviar un correo via telnet desde consola linux'>Enviar un correo via telnet desde consola linux</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/copiar-archivos-desde-un-servidor-remoto/' rel='bookmark' title='copiar archivos desde un servidor remoto'>copiar archivos desde un servidor remoto</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/una-aplicacion-multiples-bases-datos-cakephp/' rel='bookmark' title='Una aplicación, multiples bases de datos CakePHP'>Una aplicación, multiples bases de datos CakePHP</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/php/parsear-e-importar-contactos-o-direcciones-de-email-desde-csv/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>sql actualizar todos los passwords de una tabla a md5</title>
		<link>http://www.pedroventura.com/blog_programacion/sql/sql-actualizar-todos-los-passwords-de-una-tabla-a-md5/</link>
		<comments>http://www.pedroventura.com/blog_programacion/sql/sql-actualizar-todos-los-passwords-de-una-tabla-a-md5/#comments</comments>
		<pubDate>Sun, 30 Jan 2011 21:20:49 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[librerias y funciones]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=1811</guid>
		<description><![CDATA[Pues un artículo para recordar la sql que hay que ejecutar para actualizar los password de una tabla y encriptarlos. Se usa la función md5 de mysql que es equivalente a la función con el mismo nombre de php. update nombre_tabla set campo=md5(campo); Puedes usar el siguiente conversor de textos a md5 para realizar cualquier tipo de prueba: conversor a md5 Y algo de teoría&#8230; La función md5 calcula una suma de control MD5 de 128 bits para la cadena. El valor se devuelve como una cadena de 32 dígitos hexadecimales, o NULL si el argumento era NULL. El valor de retorno puede, por ejemplo, ser usado como una clave hash, o lo más usado para los passwords de los usuarios, pues no pueden estar en claro en la base de datos. por ejemplo SELECT MD5 ('prueba'); Esto devolverá la siguiente cadena codificada: &#8216;c893bad68927b457dbed39460e6afd62&#8242; Tags de búsquedas: actualizar md5, campo de tabla mysql en md5, md5 sql, actualizar todos, convertir md5 campo de la base de datos, sql md5, sql tablas wordpress en pagina Related posts:Mostrar todos los post wordpress en una página Comprobar, seleccionar y deseleccionar todos los checkbox de un formulario con jquery contar todos los archivos existente [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/wordpress/mostrar-todos-los-post-wordpress-en-una-pagina/' rel='bookmark' title='Mostrar todos los post wordpress en una página'>Mostrar todos los post wordpress en una página</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/javascript/comprobar-seleccionar-y-deseleccionar-todos-los-checkbox-de-un-formulario-con-jquery/' rel='bookmark' title='Comprobar, seleccionar y deseleccionar todos los checkbox de un formulario con jquery'>Comprobar, seleccionar y deseleccionar todos los checkbox de un formulario con jquery</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/contar-todos-los-archivos-existente-en-un-directorio-en-linux/' rel='bookmark' title='contar todos los archivos existente en un directorio en linux'>contar todos los archivos existente en un directorio en linux</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/killall-term-matar-todos-los-procesos-conociendo-su-nombre/' rel='bookmark' title='killall -TERM. matar todos los procesos en unix conociendo su nombre'>killall -TERM. matar todos los procesos en unix conociendo su nombre</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/una-aplicacion-multiples-bases-datos-cakephp/' rel='bookmark' title='Una aplicación, multiples bases de datos CakePHP'>Una aplicación, multiples bases de datos CakePHP</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Pues un artículo para recordar la sql que hay que ejecutar para actualizar los password de una tabla y encriptarlos. Se usa la función md5 de mysql que es equivalente a la función con el mismo nombre de php.</p>
<pre class="brush: plain; title: ;">
update nombre_tabla set campo=md5(campo);
</pre>
<p>Puedes usar el siguiente conversor de textos a md5 para realizar cualquier tipo de prueba: <a href="http://www.pedroventura.com/blog_programacion/conversor-md5/">conversor a md5</a></p>
<p>Y algo de teoría&#8230;</p>
<p>La función md5 calcula una suma de control MD5 de 128 bits para la cadena. El valor se devuelve como una cadena de 32 dígitos hexadecimales, o NULL si el argumento era NULL. El valor de retorno puede, por ejemplo, ser usado como una clave hash, o lo más usado para los passwords de los usuarios, pues no pueden estar en claro en la base de datos.</p>
<p>por ejemplo</p>
<pre class="brush: plain; title: ;">
SELECT MD5 ('prueba');
</pre>
<p>Esto devolverá la siguiente cadena codificada: &#8216;c893bad68927b457dbed39460e6afd62&#8242;</p>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> actualizar md5, campo de tabla mysql en md5, md5 sql, actualizar todos, convertir md5 campo de la base de datos, sql md5, sql tablas wordpress en pagina</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/wordpress/mostrar-todos-los-post-wordpress-en-una-pagina/' rel='bookmark' title='Mostrar todos los post wordpress en una página'>Mostrar todos los post wordpress en una página</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/javascript/comprobar-seleccionar-y-deseleccionar-todos-los-checkbox-de-un-formulario-con-jquery/' rel='bookmark' title='Comprobar, seleccionar y deseleccionar todos los checkbox de un formulario con jquery'>Comprobar, seleccionar y deseleccionar todos los checkbox de un formulario con jquery</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/contar-todos-los-archivos-existente-en-un-directorio-en-linux/' rel='bookmark' title='contar todos los archivos existente en un directorio en linux'>contar todos los archivos existente en un directorio en linux</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/killall-term-matar-todos-los-procesos-conociendo-su-nombre/' rel='bookmark' title='killall -TERM. matar todos los procesos en unix conociendo su nombre'>killall -TERM. matar todos los procesos en unix conociendo su nombre</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/una-aplicacion-multiples-bases-datos-cakephp/' rel='bookmark' title='Una aplicación, multiples bases de datos CakePHP'>Una aplicación, multiples bases de datos CakePHP</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/sql/sql-actualizar-todos-los-passwords-de-una-tabla-a-md5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo comprobar si existe una función en PHP</title>
		<link>http://www.pedroventura.com/blog_programacion/php/como-comprobar-si-existe-una-funcion-en-php/</link>
		<comments>http://www.pedroventura.com/blog_programacion/php/como-comprobar-si-existe-una-funcion-en-php/#comments</comments>
		<pubDate>Tue, 21 Dec 2010 19:30:06 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[librerias y funciones]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=1923</guid>
		<description><![CDATA[Se puede probar si existe una función en PHP con la function_exists () función, que devuelve true si la función existe y false si no existe. Esto es muy importante para grandes desarrollo o frameworks como cakephp o wordpress, para comprobar si la función existe previamente y no de ningún tipo de incompatibilidad o inestabilidad. Imaginemos que tenemos la siguiente función function foo() { ... } Llamada será la siguiente: function_exists('foo') que devolverá true. En caso contrario si no tuviéramos la función bar() declarada y la comprobamos function_exists('bar') nos devolverá false. De manera que para solventar problemas de doble declaración de funciones podemos usar la siguiente comprobación. if(!function_exists('bar')) { function bar() { ... } } Esté método es muy usado en los plugins y elementos adicionales a wordpress, por lo que is ponéis a investigar los códigos lo veréis mucho. Tags de búsquedas: cakephp verificar si el login funciono, comprobar si existe funcion php, existe funcion php, existe la funcion php, funcion existe en php, php saber si existe post, preguntar si existe una funcion php Related posts:comprobar si existe un fichero con php y linux funcion php generar password funcion en php para limpiar cadenas de texto en utf8 [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/comprobar-si-existe-un-fichero-con-php-y-unix/' rel='bookmark' title='comprobar si existe un fichero con php y linux'>comprobar si existe un fichero con php y linux</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/funcion-php-generar-password/' rel='bookmark' title='funcion php generar password'>funcion php generar password</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/funcion-en-php-para-limpiar-cadenas-de-texto-en-utf8/' rel='bookmark' title='funcion en php para limpiar cadenas de texto en utf8'>funcion en php para limpiar cadenas de texto en utf8</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/cakephp-funcion-para-bloquear-ips-y-evitar-spam/' rel='bookmark' title='cakephp funcion para bloquear ips y evitar spam'>cakephp funcion para bloquear ips y evitar spam</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/php-meter-una-sentencia-if-dentro-de-un-echo/' rel='bookmark' title='PHP meter una sentencia if dentro de un echo'>PHP meter una sentencia if dentro de un echo</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Se puede probar si existe una función en PHP con la function_exists () función, que devuelve true si la función existe y false si no existe. Esto es muy importante para grandes desarrollo o frameworks como cakephp o wordpress, para comprobar si la función existe previamente y no de ningún tipo de incompatibilidad o inestabilidad. </p>
<p>Imaginemos que tenemos la siguiente función</p>
<pre class="brush: php; title: ;">
function foo() {
...
}
</pre>
<p>Llamada será la siguiente:</p>
<pre class="brush: php; title: ;">
function_exists('foo')
</pre>
<p>que devolverá true.</p>
<p>En caso contrario si no tuviéramos la función bar() declarada y la comprobamos </p>
<pre class="brush: php; title: ;">
function_exists('bar')
</pre>
<p>nos devolverá false.</p>
<p>De manera que para solventar problemas de doble declaración de funciones podemos usar la siguiente comprobación.</p>
<pre class="brush: php; title: ;">

if(!function_exists('bar'))
{
     function bar()
     {
          ...
     }

}
</pre>
<p>Esté método es muy usado en los plugins y elementos adicionales a wordpress, por lo que is ponéis a investigar los códigos lo veréis mucho.</p>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> cakephp verificar si el login funciono, comprobar si existe funcion php, existe funcion php, existe la funcion php, funcion existe en php, php saber si existe post, preguntar si existe una funcion php</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/comprobar-si-existe-un-fichero-con-php-y-unix/' rel='bookmark' title='comprobar si existe un fichero con php y linux'>comprobar si existe un fichero con php y linux</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/funcion-php-generar-password/' rel='bookmark' title='funcion php generar password'>funcion php generar password</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/funcion-en-php-para-limpiar-cadenas-de-texto-en-utf8/' rel='bookmark' title='funcion en php para limpiar cadenas de texto en utf8'>funcion en php para limpiar cadenas de texto en utf8</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/cakephp-funcion-para-bloquear-ips-y-evitar-spam/' rel='bookmark' title='cakephp funcion para bloquear ips y evitar spam'>cakephp funcion para bloquear ips y evitar spam</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/php-meter-una-sentencia-if-dentro-de-un-echo/' rel='bookmark' title='PHP meter una sentencia if dentro de un echo'>PHP meter una sentencia if dentro de un echo</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/php/como-comprobar-si-existe-una-funcion-en-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalar phpmyadmin</title>
		<link>http://www.pedroventura.com/blog_programacion/php/instalar-phpmyadmin/</link>
		<comments>http://www.pedroventura.com/blog_programacion/php/instalar-phpmyadmin/#comments</comments>
		<pubDate>Thu, 16 Dec 2010 10:31:12 +0000</pubDate>
		<dc:creator>Pedro Ventura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[base de datos]]></category>
		<category><![CDATA[librerias y funciones]]></category>

		<guid isPermaLink="false">http://www.pedroventura.com/?p=1771</guid>
		<description><![CDATA[phpMyAdmin es una herramienta escrita en PHP con el fin de facilitar la tarea de administración de una base de datos MySQL desde el navegador. Se trata de una herramienta escrita íntegramente en lenguaje PHP, realizada con el fin de facilitar las tareas de administración. Permite administrar en forma completa un servidor MySQL (requiere de una cuenta super usuario) como así también bases de datos simples de un usuario en particular. 1. su - 2. cd /var/www/html 3. wget -c wget http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/2.11.10/languages.zip?use_mirror=switch Si queremos la ultima versión: wget http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/3.3.8/phpMyAdmin-3.3.8-all-languages.zip/download 4. unzip phpMyAdmin-2.11.10-all-languages.zip 5. mv phpMyAdmin-2.11.10-all-languages phpmyadmin 6. cd phpmyadmin 7. cp config.sample.inc.php config.inc.php 8. vi config.inc.php …. $cfg['Servers'][$i]['auth_type'] = ‘http‘; …. 9. /etc/init.d/httpd restart Tras esto lo tendrás accesible desde http://dominio.com/phpmyadmin/ Si no se tiene acceso a la maquina por consola o estais un poco perdidos con estos comandos de linux, se podría hacer subiendo todo el desarrollo por ftp, previa descompresión en vuestro equipo y luego editando el archivo config.inc.php. Pero claro este modo de hacerlo es mucho mas lento pues tarda mas en subirse todo al servidor (siempre y cuando lo queráis instalar en un servidor remoto, en local es todo mas rápido) Si os da el siguiente [...]


Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/instalar-un-captcha-de-seguridad/' rel='bookmark' title='instalar un captcha de seguridad'>instalar un captcha de seguridad</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/php-fatal-error-call-to-undefined-function-json_encode/' rel='bookmark' title='PHP Fatal error: Call to undefined function: json_encode()'>PHP Fatal error: Call to undefined function: json_encode()</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/una-aplicacion-multiples-bases-datos-cakephp/' rel='bookmark' title='Una aplicación, multiples bases de datos CakePHP'>Una aplicación, multiples bases de datos CakePHP</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/instalar-controladora-para-tarjeta-grafica-nvidia-en-fedora/' rel='bookmark' title='Instalar controladora para tarjeta grafica Nvidia en Fedora'>Instalar controladora para tarjeta grafica Nvidia en Fedora</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/software/como-instalar-un-apk-en-android/' rel='bookmark' title='como instalar un apk en android'>como instalar un apk en android</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>phpMyAdmin es una herramienta escrita en PHP con el fin de facilitar la tarea de administración de una base de datos MySQL desde el navegador.</p>
<p>Se trata de una herramienta escrita íntegramente en lenguaje PHP, realizada con el fin de facilitar las tareas de administración. Permite administrar en forma completa un servidor MySQL (requiere de una cuenta super usuario) como así también bases de datos simples de un usuario en particular.</p>
<p>1. su -<br />
2. cd /var/www/html<br />
3. wget -c wget http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/2.11.10/languages.zip?use_mirror=switch</p>
<blockquote><p>Si queremos la ultima versión:<br />
wget http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/3.3.8/phpMyAdmin-3.3.8-all-languages.zip/download</p></blockquote>
<p>4. unzip phpMyAdmin-2.11.10-all-languages.zip<br />
5. mv phpMyAdmin-2.11.10-all-languages phpmyadmin<br />
6. cd phpmyadmin<br />
7. cp config.sample.inc.php config.inc.php<br />
8. vi config.inc.php<br />
….<br />
$cfg['Servers'][$i]['auth_type'] = ‘http‘;<br />
….<br />
9. /etc/init.d/httpd restart</p>
<p>Tras esto lo tendrás accesible desde http://dominio.com/phpmyadmin/</p>
<p>Si no se tiene acceso a la maquina por consola o estais un poco perdidos con estos comandos de linux, se podría hacer subiendo todo el desarrollo por ftp, previa descompresión en vuestro equipo y luego editando el archivo config.inc.php. Pero claro este modo de hacerlo es mucho mas lento pues tarda mas en subirse todo al servidor (siempre y cuando lo queráis instalar en un servidor remoto, en local es todo mas rápido)</p>
<p style="text-align: center;">Si os da el siguiente error ( no se pudo cargar la extension mcrypt, por favor revise su configuración de PHP):<br />
<img class="aligncenter size-medium wp-image-1889" title="phpmyadmin_extension" src="http://blogpv2011.s3.amazonaws.com/wp-content/uploads/2010/11/phpmyadmin_extension-300x242.png" alt="" width="300" height="242" /></p>
<p>Tendremos que instalar el modulo de php php-mcrypt<br />
# yum install php-mcrypt</p>
<p>Lo ideal seria proteger el acceso a nivel de Apache mediante .htaccess y .passwd</p>
<p class="listadoTagRelacionados">Tags de búsquedas:</p><p class="listadoTagRelacionados"> instalar phpmyadmin, instalar phpmyadmin 3 3 8, como instalar php myadmin 2 11, como instalar phpmyadmin, phpmyadmin instalar, problemas con phpmyadmin no se encontró la extensión mcrypt, phpmyadmin no se encontró la extensión mcrypt, phpmyadmin - error no se encontró la extensión mysqli, instalar phpmyadmin servidor remoto, instalar phpmyadmin en servidor remoto</p><!-- SEO SearchTerms Tagging 2 Plugin -->

<p>Related posts:<ol><li><a href='http://www.pedroventura.com/blog_programacion/php/instalar-un-captcha-de-seguridad/' rel='bookmark' title='instalar un captcha de seguridad'>instalar un captcha de seguridad</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/php/php-fatal-error-call-to-undefined-function-json_encode/' rel='bookmark' title='PHP Fatal error: Call to undefined function: json_encode()'>PHP Fatal error: Call to undefined function: json_encode()</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/cakephp/una-aplicacion-multiples-bases-datos-cakephp/' rel='bookmark' title='Una aplicación, multiples bases de datos CakePHP'>Una aplicación, multiples bases de datos CakePHP</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/linux/instalar-controladora-para-tarjeta-grafica-nvidia-en-fedora/' rel='bookmark' title='Instalar controladora para tarjeta grafica Nvidia en Fedora'>Instalar controladora para tarjeta grafica Nvidia en Fedora</a></li>
<li><a href='http://www.pedroventura.com/blog_programacion/software/como-instalar-un-apk-en-android/' rel='bookmark' title='como instalar un apk en android'>como instalar un apk en android</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.pedroventura.com/blog_programacion/php/instalar-phpmyadmin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic (Feed is rejected)
Page Caching using disk: enhanced
Database Caching 73/219 queries in 0.963 seconds using disk: basic
Object Caching 3748/4041 objects using disk: basic
Content Delivery Network via Amazon Web Services: S3: blogpv2011.s3.amazonaws.com

Served from: www.pedroventura.com @ 2012-02-06 21:47:57 -->
