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

<channel>
	<title>Tursos</title>
	<atom:link href="https://tursos.com/feed/" rel="self" type="application/rss+xml"/>
	<link>https://tursos.com/</link>
	<description>Tutoriales y cursos de desarrollo web en español</description>
	<lastBuildDate>Sun, 14 Aug 2022 23:33:22 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://tursos.com/wp-content/uploads/cropped-favicon-32x32.png</url>
	<title>Tursos</title>
	<link>https://tursos.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">161798790</site>	<xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><item>
		<title>10 Comandos SQL que te pueden ser de utilidad</title>
		<link>https://tursos.com/10-comandos-sql-que-te-pueden-ser-de-utilidad/</link>
					<comments>https://tursos.com/10-comandos-sql-que-te-pueden-ser-de-utilidad/#comments</comments>
		
		<dc:creator><![CDATA[Josue Ochoa]]></dc:creator>
		<pubDate>Wed, 28 Aug 2013 23:07:23 +0000</pubDate>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">https://tursos.com/?p=6688</guid>

					<description><![CDATA[<p>En este artículo mencionaremos 10 comandos SQL que pueden ser de gran ayuda a todo desarrollador web que empieza en el mundo de las bases de datos.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/10-comandos-sql-que-te-pueden-ser-de-utilidad/">10 Comandos SQL que te pueden ser de utilidad</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>En este artículo mencionaremos 10 comandos SQL que pueden ser de gran ayuda a todo desarrollador web que empieza en el mundo de las bases de datos.</p>



<p>Para nuestros ejemplos usaremos las siguientes tablas:</p>



<ul><li>Categoría</li><li>Productos</li></ul>



<figure class="wp-block-image"><img width="560" height="207" src="https://tursos.com/wp-content/uploads/basedatos.jpg" alt="Tablas" class="wp-image-6689" srcset="https://tursos.com/wp-content/uploads/basedatos.jpg 560w, https://tursos.com/wp-content/uploads/basedatos-300x110.jpg 300w" sizes="(max-width: 560px) 100vw, 560px" /></figure>



<h2>1. SELECT</h2>



<p>Este comando nos permite traer todos los registros de una tabla. La estructura de este comando es la siguiente:</p>



<div class="wp-block-codemirror-blocks-code-block code-block language-sql"><pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;className&quot;:&quot;language-sql&quot;,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">SELECT [nombre de los campos separados por comas] FROM [nombre de la tabla]</pre></div>



<p><strong>Ejemplo:</strong></p>



<figure class="wp-block-image"><img width="794" height="569" src="https://tursos.com/wp-content/uploads/selectcampos.jpg" alt="SELECT campos" class="wp-image-6694" srcset="https://tursos.com/wp-content/uploads/selectcampos.jpg 794w, https://tursos.com/wp-content/uploads/selectcampos-300x214.jpg 300w" sizes="(max-width: 794px) 100vw, 794px" /></figure>



<p>En el caso deseemos traer todos los campos:</p>



<div class="wp-block-codemirror-blocks-code-block code-block"><pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">SELECT * FROM [nombre de la tabla]</pre></div>



<p><strong>Ejemplo:</strong></p>



<figure class="wp-block-image"><img width="809" height="547" src="https://tursos.com/wp-content/uploads/all.jpg" alt="SELECT *" class="wp-image-6692" srcset="https://tursos.com/wp-content/uploads/all.jpg 809w, https://tursos.com/wp-content/uploads/all-300x202.jpg 300w" sizes="(max-width: 809px) 100vw, 809px" /></figure>



<p>Existen casos donde queremos mostrar registros que cumplan una condición:</p>



<div class="wp-block-codemirror-blocks-code-block code-block language-sql"><pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;className&quot;:&quot;language-sql&quot;,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">SELECT [nombre de los campos separados por comas] FROM [nombre de la tabla] WHERE [condición]</pre></div>



<p><strong>Ejemplo:</strong></p>



<p>En este caso vamos a mostrar los productos que son de la categoría 2:</p>



<figure class="wp-block-image"><img width="804" height="492" src="https://tursos.com/wp-content/uploads/selectwhere.jpg" alt="SELECT WHERE" class="wp-image-6695" srcset="https://tursos.com/wp-content/uploads/selectwhere.jpg 804w, https://tursos.com/wp-content/uploads/selectwhere-300x183.jpg 300w" sizes="(max-width: 804px) 100vw, 804px" /></figure>



<h2>2. COUNT</h2>



<p>En muchos casos debemos contar registros en nuestras tablas. La estructura del comando es:</p>



<div class="wp-block-codemirror-blocks-code-block code-block language-sql"><pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;className&quot;:&quot;language-sql&quot;,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">SELECT COUNT([campo a contar o *]) FROM TABLA [WHERE -condición]</pre></div>



<p><strong>Ejemplo:</strong></p>



<p>Vamos a contar cuantos productos pertenecen a la categoría 2:</p>



<figure class="wp-block-image"><img width="800" height="470" src="https://tursos.com/wp-content/uploads/count.jpg" alt="count" class="wp-image-6697" srcset="https://tursos.com/wp-content/uploads/count.jpg 800w, https://tursos.com/wp-content/uploads/count-300x176.jpg 300w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<h2>3. ORDER BY</h2>



<p>Este comando nos permite ordenar el resultado de nuestro SELECT por uno o varios campos de la tabla de manera ascendente o descendente.</p>



<div class="wp-block-codemirror-blocks-code-block code-block language-sql"><pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;className&quot;:&quot;language-sql&quot;,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">SELECT [campos] FROM [tablas] [WHERE condición] ORDER BY [campos] [DESC o ASC]</pre></div>



<p>Si deseamos mostrar datos de manera ascendente no es obligatorio poner ASC.</p>



<p><strong>Ejemplo</strong></p>



<p>Vamos a ordenar nuestra tabla productos por el campo nombreProducto de manera descendente:</p>



<figure class="wp-block-image"><img width="812" height="553" src="https://tursos.com/wp-content/uploads/orderby.jpg" alt="ORDER BY" class="wp-image-6698" srcset="https://tursos.com/wp-content/uploads/orderby.jpg 812w, https://tursos.com/wp-content/uploads/orderby-300x204.jpg 300w" sizes="(max-width: 812px) 100vw, 812px" /></figure>



<p>Ahoro vamos a mostrar los productos ordenados de manera ascendente:</p>



<figure class="wp-block-image"><img width="815" height="564" src="https://tursos.com/wp-content/uploads/orderbyasc.jpg" alt="ORDER BY ASC" class="wp-image-6699" srcset="https://tursos.com/wp-content/uploads/orderbyasc.jpg 815w, https://tursos.com/wp-content/uploads/orderbyasc-300x207.jpg 300w" sizes="(max-width: 815px) 100vw, 815px" /></figure>



<h2>4. GROUP BY</h2>



<p>Este comando nos permite agrupar resultados de SELECT por uno o varios campos de una tabla:</p>



<div class="wp-block-codemirror-blocks-code-block code-block language-sql"><pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;className&quot;:&quot;language-sql&quot;,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">SELECT [campos] FROM [tablas] [WHERE condición] GROUP BY [campos]</pre></div>



<p><strong>Ejemplo</strong></p>



<p>Vamos a contar cuantos productos hay por categoría:</p>



<figure class="wp-block-image"><img width="794" height="502" src="https://tursos.com/wp-content/uploads/groupby.jpg" alt="GROUP BY" class="wp-image-6702" srcset="https://tursos.com/wp-content/uploads/groupby.jpg 794w, https://tursos.com/wp-content/uploads/groupby-300x189.jpg 300w" sizes="(max-width: 794px) 100vw, 794px" /></figure>



<h2>5. LIMIT</h2>



<p>Muchas veces nuestras tablas contendrán miles o millones de registros, no siempre vamos a querer mostrarlos todos.</p>



<p>LIMIT permite establecer cuantos registros vamos a traer de nuestra base de datos.</p>



<div class="wp-block-codemirror-blocks-code-block code-block language-sql"><pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;className&quot;:&quot;language-sql&quot;,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">SELECT [campos] FROM [tablas] [WHERE condición] LIMIT [cantidad]</pre></div>



<p><strong>Ejemplo:</strong></p>



<p>Vamos a mostrar solo tres registros de nuestra tabla productos:</p>



<figure class="wp-block-image"><img width="805" height="545" src="https://tursos.com/wp-content/uploads/limit.jpg" alt="LIMIT" class="wp-image-6705" srcset="https://tursos.com/wp-content/uploads/limit.jpg 805w, https://tursos.com/wp-content/uploads/limit-300x203.jpg 300w" sizes="(max-width: 805px) 100vw, 805px" /></figure>



<h2>6. INSERT</h2>



<p>Hasta ahora hemos obtenido datos de tablas pero también podemos agregar nuevos registros.</p>



<div class="wp-block-codemirror-blocks-code-block code-block language-sql"><pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;className&quot;:&quot;language-sql&quot;,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">INSERT INTO [nombre tabla] ([campos de tabla]) VALUES([valores a agregar])</pre></div>



<p><strong>Ejemplo:</strong></p>



<p>Vamos a agregar un nuevo producto:</p>



<figure class="wp-block-image"><img width="729" height="493" src="https://tursos.com/wp-content/uploads/insert.jpg" alt="INSERT" class="wp-image-6709" srcset="https://tursos.com/wp-content/uploads/insert.jpg 729w, https://tursos.com/wp-content/uploads/insert-300x202.jpg 300w" sizes="(max-width: 729px) 100vw, 729px" /></figure>



<h2>7. UPDATE</h2>



<p>Cuando ya hemos insertado un nuevo registro podemos cambiar los valores.</p>



<div class="wp-block-codemirror-blocks-code-block code-block language-sql"><pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;className&quot;:&quot;language-sql&quot;,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">UPDATE [nombre tabla] SET [campo1=valor nuevo] [WHERE condición]</pre></div>



<p><strong>Ejemplo</strong></p>



<p>Vamos a actualizar el nuevo producto que hemos insertado:</p>



<figure class="wp-block-image"><img width="621" height="467" src="https://tursos.com/wp-content/uploads/update.jpg" alt="UPDATE" class="wp-image-6710" srcset="https://tursos.com/wp-content/uploads/update.jpg 621w, https://tursos.com/wp-content/uploads/update-300x225.jpg 300w" sizes="(max-width: 621px) 100vw, 621px" /></figure>



<h2>8. DELETE</h2>



<p>Así como podemos agregar registros también podemos eliminarlos:</p>



<div class="wp-block-codemirror-blocks-code-block code-block language-sql"><pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;className&quot;:&quot;language-sql&quot;,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">DELETE FROM [nombre tabla] [WHERE condición]</pre></div>



<p><strong>Ejemplo</strong></p>



<p>Vamos a eliminar el nuevo registro:</p>



<figure class="wp-block-image"><img width="603" height="463" src="https://tursos.com/wp-content/uploads/delete.jpg" alt="DELETE" class="wp-image-6711" srcset="https://tursos.com/wp-content/uploads/delete.jpg 603w, https://tursos.com/wp-content/uploads/delete-300x230.jpg 300w" sizes="(max-width: 603px) 100vw, 603px" /></figure>



<h2>9. ALTER TABLE</h2>



<p>En el caso se nos haya olvidado agregar una columna al crear la tabla, podemos solucionarlo con el siguiente comando:</p>



<div class="wp-block-codemirror-blocks-code-block code-block language-sql"><pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;className&quot;:&quot;language-sql&quot;,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">ALTER TABLE [nombre tabla] ADD [nombre campo] [tipo de dato];</pre></div>



<p><strong>Ejemplo</strong></p>



<p>Vamos a agregar una columna a nuestra tabla productos llamada descripción:</p>



<figure class="wp-block-image"><img width="576" height="520" src="https://tursos.com/wp-content/uploads/addcolumn.jpg" alt="ADD COLUMN" class="wp-image-6714" srcset="https://tursos.com/wp-content/uploads/addcolumn.jpg 576w, https://tursos.com/wp-content/uploads/addcolumn-300x270.jpg 300w" sizes="(max-width: 576px) 100vw, 576px" /></figure>



<h2>10. DROP TABLE</h2>



<p>En muchos casos tenemos tablas que no son necesarias, entonces decidimos eliminarlas.</p>



<div class="wp-block-codemirror-blocks-code-block code-block language-sql"><pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;className&quot;:&quot;language-sql&quot;,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">DROP TABLE [nombre tabla]</pre></div>



<p><strong>Ejemplo</strong></p>



<p>Vamos a eliminar la tabla productos:</p>



<figure class="wp-block-image"><img width="610" height="479" src="https://tursos.com/wp-content/uploads/droptable.jpg" alt="DROP TABLE" class="wp-image-6715" srcset="https://tursos.com/wp-content/uploads/droptable.jpg 610w, https://tursos.com/wp-content/uploads/droptable-300x235.jpg 300w" sizes="(max-width: 610px) 100vw, 610px" /></figure>



<p>Todos estos comandos te facilitarán dominar el fascinante mundo de las base de datos, en otros post veremos querys más complejos donde se unen dos o más tablas, operadores y condicionales.</p>



<p>¡Que la fuerza os acompañe jóvenes padawans!</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/10-comandos-sql-que-te-pueden-ser-de-utilidad/">10 Comandos SQL que te pueden ser de utilidad</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tursos.com/10-comandos-sql-que-te-pueden-ser-de-utilidad/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6688</post-id>	</item>
		<item>
		<title>Sencha Touch, Instalación y Hello World</title>
		<link>https://tursos.com/sencha-touch-instalacion-y-hello-world/</link>
					<comments>https://tursos.com/sencha-touch-instalacion-y-hello-world/#respond</comments>
		
		<dc:creator><![CDATA[Edwind Pineda]]></dc:creator>
		<pubDate>Tue, 20 Aug 2013 20:34:34 +0000</pubDate>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Sencha]]></category>
		<guid isPermaLink="false">https://tursos.com/?p=6588</guid>

					<description><![CDATA[<p>En este tutorial aprenderemos a instalar Sencha Touch 2.2.1 y hacer nuestra primera aplicación (Hello World).</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/sencha-touch-instalacion-y-hello-world/">Sencha Touch, Instalación y Hello World</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>En este tutorial aprenderemos a instalar Sencha Touch 2.2.1 y hacer nuestra primera aplicación (Hello World).</p>
<p><strong>Requisitos:</strong></p>
<ul>
<li>Tener acceso root o de administrador</li>
<li>Tener Ruby 1.9.3, Windows: <a href="https://rubyinstaller.org/">rubyinstaller.org</a>, Mac: rvm install 1.9.3 &#8211;with-gcc=clang</li>
<li>Tener Java actualizado, <a href="https://www.java.com/en/download/">Java Runtime Environment</a></li>
</ul>
<p><strong>Herramientas a utilizar:</strong></p>
<ul>
<li><a href="https://www.sencha.com/products/extjs/cmd-download/">Sencha CMD 3.1.2</a></li>
<li><a href="https://www.sencha.com/products/touch">Sencha Touch 2.2.1</a></li>
</ul>
<blockquote><p><strong>Nota:</strong> La página de Sencha detecta automáticamente el sistema operativo.</p></blockquote>
<h2>Sencha CMD 3.1.2</h2>
<p>Sencha CMD nos ayudará a generar nuestros nuevos proyectos de forma rápida, tomando los archivos necesarios del Framework Sencha Touch.</p>
<h2>Sencha Touch 2.2.1</h2>
<p>Este archivo es el framework Sencha Touch, el cual esta basado en HTML5, CSS, JavaScript, ademas es de codigo abierto. Es una alternativa muy poderosa a Jquery Mobile, sobre todo para los que les gusta usar mucho Javascript. En este archivo estarán empaquetados todas los ficheros necesarios para poder armar nuestra aplicación Sencha:</p>
<ul>
<li>Descomprimimos nuestro sencha-touch-2.2.1-commercial.zip en nuestro servidor local (XAMPP, MAMP, AppServ).</li>
<li>Para probarlo entramos a «localhost/touch-2.2.1» o con el nombre que tenga la carpeta y se debería mostrar lo siguiente:</li>
</ul>
<figure><img class="alignnone size-full wp-image-6682" src="https://tursos.com/wp-content/uploads/sencha1.jpg" alt="sencha1" width="674" height="452" srcset="https://tursos.com/wp-content/uploads/sencha1.jpg 674w, https://tursos.com/wp-content/uploads/sencha1-300x201.jpg 300w" sizes="(max-width: 674px) 100vw, 674px" /></figure>
<h2>Hello World</h2>
<p>Ahora vamos a crear nuestra primera App llamada «Hello World». Ejecutamos Terminal en Mac o cmd en Windows y nos ubicamos en la carpeta del proyecto, en mi caso <code>/Applications/XAMPP/xamppfiles/htdocs/touch-2.2.1</code>.</p>
<p>Luego escribimos el siguiente comando para crear nuestra nueva aplicación:</p>
<pre><code>sencha generate app HelloWorld ../HelloWorld</code></pre>
<p>La sintaxis de este comando es:</p>
<pre><code>sencha generate app (Nombre de la aplicación) (Ruta de la aplicación)</code></pre>
<p>Y luego si vamos a http://localhost/helloworld nos deberia salir lo siguiente:</p>
<figure><img class="alignnone size-full wp-image-6683" src="https://tursos.com/wp-content/uploads/sencha-final.jpg" alt="sencha-final" width="733" height="537" srcset="https://tursos.com/wp-content/uploads/sencha-final.jpg 733w, https://tursos.com/wp-content/uploads/sencha-final-300x219.jpg 300w" sizes="(max-width: 733px) 100vw, 733px" /></figure>
<p>Espero les halla servido, ya estare subiendo mas tutoriales sobre Sencha Touch, cualquier duda ponedmela en los comentarios</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/sencha-touch-instalacion-y-hello-world/">Sencha Touch, Instalación y Hello World</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tursos.com/sencha-touch-instalacion-y-hello-world/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6588</post-id>	</item>
		<item>
		<title>5 Tipos de Inspiración para el Diseño Web</title>
		<link>https://tursos.com/5-tipos-de-inspiracion-para-el-diseno-web/</link>
		
		<dc:creator><![CDATA[Edwind Pineda]]></dc:creator>
		<pubDate>Mon, 15 Apr 2013 16:04:35 +0000</pubDate>
				<category><![CDATA[Tutoriales]]></category>
		<guid isPermaLink="false">https://tursos.com/?p=6233</guid>

					<description><![CDATA[<p>¿Te quedaste sin ideas para tu próximo proyecto? relajate y repasemos juntos esta lista de fuentes de inspiración que tal vez despierten en ti la creatividad.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/5-tipos-de-inspiracion-para-el-diseno-web/">5 Tipos de Inspiración para el Diseño Web</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>1. La Naturaleza</h2>
<p>El ser humano ha utilizado la naturaleza como fuente de inspiración desde tiempos inmemorables, no es coincidencia que en la era de la informacion tambien sea asi. De las plantas, los animales y los minerales podemos sacar las formas, texturas y colores de estos y añadirle un poco mas de detalle a nuestros diseños.</p>
<h2>2. Arquitectura</h2>
<p>Opuesto pero al mismo tiempo similar a la naturaleza es la arquitectura, los sitios Web inspirados en la arquitectura se conforman principalmente de mucho espacio, acompañado de grandes fotografias como fondos y pasmosas tipografias minimalistas.</p>
<h2>3. Revistas</h2>
<p>Las revistas, pioneras del diseño en base a columnas y grillas, son el origen de la mayoria de tendencias de diseño Web actual. De estas podemos rescatar la tipografía y su jerarquia, la organizacion de la informacion y el posicionamiento de imagenes o figuras para dar una apariencia asimetrica, todo esto para dar una lectura gratificante.</p>
<h2>4. Productos</h2>
<p>La forma sigue a la funcion, es un principio que rige a la mayoria de productos modernos, el cual indica que la funcion del objeto da forma a este, esto es aplicable al diseño Web, y nos puede ayudar a librar nuestras creaciones de elementos innecesarios, volviendolas mas minimalistas, balanceadas y funcionales.</p>
<h2>5. Videojuegos</h2>
<p>Los buenos juegos nunca se olvidan, ¿qué hace que estos sean tan memorables? Uno de los factores; es la experiencia de usuario, la cual es aplicable al diseño Web. La experiencia de usuario en los video juegos esta conformada de muchas cosas, entre ellas estan: las interfaces, los menus contextuales, los iconos, la interactividad, etc.</p>
<p>&nbsp;</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/5-tipos-de-inspiracion-para-el-diseno-web/">5 Tipos de Inspiración para el Diseño Web</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6233</post-id>	</item>
		<item>
		<title>Como Implementar Sidebars Dinámicos (Widgets) en WordPress</title>
		<link>https://tursos.com/como-implementar-sidebars-dinamicos-widgets-en-wordpress/</link>
					<comments>https://tursos.com/como-implementar-sidebars-dinamicos-widgets-en-wordpress/#comments</comments>
		
		<dc:creator><![CDATA[Josue Ochoa]]></dc:creator>
		<pubDate>Sat, 23 Mar 2013 04:50:39 +0000</pubDate>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://tursos.com/?p=6254</guid>

					<description><![CDATA[<p>En este tutorial aprenderas como implementar Sidebars Dinámicos (Widgets) en tu theme de WordPress.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/como-implementar-sidebars-dinamicos-widgets-en-wordpress/">Como Implementar Sidebars Dinámicos (Widgets) en WordPress</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class='infotuto'><a href="/demo/sidebars/codigo.zip" class="button" target="_blank" title="Descargate el codigo del tutorial"><div class="inner">Descargar</div></a></div>



<blockquote class="wp-block-quote">
<p>Los <strong>Widgets</strong> son pedazos de contenido administrables desde el backend (<em>Apariencia &gt; Widgets</em>), estos se almacenan en espacios conocidos como <strong>&#8216;Sidebars Dinámicos&#8217;</strong>.</p>
</blockquote>



<p>En este tutorial aprenderas como implementar Sidebars Dinámicos (Widgets) en tu theme de WordPress.</p>



<h2>Registrando el Sidebar</h2>



<p>El proceso es sencillo, lo unico que tenemos que hacer es colocar la función <strong><a title="register_sidebar Codex" href="https://codex.wordpress.org/Function_Reference/register_sidebar" target="_blank" rel="noopener noreferrer">register_sidebar()</a></strong> en el fichero functions.php de nuestro theme.</p>



<p>Esta función acepta como parametro un Array en el cual se especifican los detalles del Sidebar:</p>



<ul>
<li><strong>name</strong>: El nombre del Sidebar, por defecto es &#8216;Sidebar&#8217;.</li>
<li><strong>id</strong>: El id del sidebar (ej: sidebar-derecha), por defecto es el ID numerico auto-generado.</li>
<li><strong>description</strong>: Texto de descripcion del sidebar a registrar, se muestra en la pagina de Widgets, por defecto esta vacio</li>
<li><strong>class</strong>: Clase CSS a asignar a los widgets de este Sidebar.</li>
<li><strong>before_widget</strong>: Código HTML que ira antes de cada widget, por defecto es &lt;li&gt;</li>
<li><strong>after_widget</strong>: Código HTML que ira después de cada widget, por defecto es &lt;/li&gt;</li>
<li><strong>before_title</strong>: Código HTML que ira antes del título del Widget, por defecto es &lt;h2&gt;</li>
<li><strong>after_title</strong>: Código HTML que ira después del título del Widget, por defecto es &lt;/h2&gt;</li>
</ul>



<p>Sabiendo esto, procedemos a crear un Sidebar de ejemplo:</p>



<div class="wp-block-codemirror-blocks-code-block code-block language-php">
<pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;php&quot;,&quot;mime&quot;:&quot;text/x-php&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;className&quot;:&quot;language-php&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;modeName&quot;:&quot;php&quot;}">&lt;?php
register_sidebar( 
	array(
  		'name' =&gt; 'Zona de Anuncios',
  		'id' =&gt; 'ad-zone',
  		'description' =&gt; 'Aquí irán los anuncios del sitio',
  		'before_widget' =&gt; '&lt;div class="widget ad"&gt;',
  		'after_widget'  =&gt; '&lt;/div&gt;',
  		'before_title' =&gt; '&lt;strong class="adtitle"&gt;',
  		'after_title' =&gt; '&lt;/strong&gt;'
  	)
);</pre>
</div>



<p>Con solo ese código, si vamos a Apariencia &gt; Widgets deberíamos ver nuestro Sidebar, el cual podemos empezar a llenar con Widgets:</p>



<div class="wp-block-image">
<figure class="aligncenter"><img width="650" height="210" class="wp-image-6272" src="https://webtursos.s3.amazonaws.com/web/files/wordpress-sidebars1.jpg" alt="wordpress-sidebars1" srcset="https://tursos.com/wp-content/uploads/wordpress-sidebars1.jpg 650w, https://tursos.com/wp-content/uploads/wordpress-sidebars1-300x96.jpg 300w" sizes="(max-width: 650px) 100vw, 650px" /></figure>
</div>



<h2>Mostrando el Sidebar</h2>



<p>Para mostrar el Sidebar utilizamos la función <a title="dynamic_sidebar Codex" href="https://codex.wordpress.org/Function_Reference/dynamic_sidebar" target="_blank" rel="noopener noreferrer">dynamic_sidebar()</a>, este lleva un solo parametro en donde debemos indicar que Sidebar mostrar, se pone el id (textual o numérico) del sidebar (en nuestro caso: &#8216;ad-zone&#8217;) si se deja vacío mostrará el primer sidebar registrado.</p>



<div class="wp-block-codemirror-blocks-code-block code-block language-php">
<pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;php&quot;,&quot;mime&quot;:&quot;text/x-php&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;className&quot;:&quot;language-php&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;modeName&quot;:&quot;php&quot;}">&lt;?php dynamic_sidebar( 'ad-zone' ); ?&gt;</pre>
</div>



<p>Y esto lo podemos ubicar donde queramos, normalmente se acostumbra a crear un archivo sidebar.php, poner la función allí y luego incluirlo con <a title="get_sidebar Codex" href="https://developer.wordpress.org/reference/functions/get_sidebar/" target="_blank" rel="noopener noreferrer">get_sidebar()</a>.</p>



<p>Sin embargo los Sidebars en WordPress no siempre son usados como sidebars (<em>literal</em>), sino mas como un area dinámica multiproposito que se puede colocar en cualquier parte, por ejemplo en el Footer o en el Header.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/como-implementar-sidebars-dinamicos-widgets-en-wordpress/">Como Implementar Sidebars Dinámicos (Widgets) en WordPress</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tursos.com/como-implementar-sidebars-dinamicos-widgets-en-wordpress/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6254</post-id>	</item>
		<item>
		<title>5 Formas de Promocionar tu Sitio Web</title>
		<link>https://tursos.com/5-formas-de-promocionar-tu-sitio-web/</link>
					<comments>https://tursos.com/5-formas-de-promocionar-tu-sitio-web/#comments</comments>
		
		<dc:creator><![CDATA[Josue Ochoa]]></dc:creator>
		<pubDate>Wed, 20 Feb 2013 07:58:22 +0000</pubDate>
				<category><![CDATA[Tutoriales]]></category>
		<guid isPermaLink="false">https://tursos.com/?p=6102</guid>

					<description><![CDATA[<p>Supongamos que ya tienes tu pagina Web publicada, ahora necesitas hacer que la gente sepa que existes, esta es la parte difícil: promocionarlo. En este articulo veremos 5 estrategias de promoción de sitios web.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/5-formas-de-promocionar-tu-sitio-web/">5 Formas de Promocionar tu Sitio Web</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Supongamos que ya tienes tu pagina Web publicada, ahora necesitas hacer que la gente sepa que existes, esta es la parte difícil: promocionarlo. En este articulo veremos 5 estrategias de promoción de sitios web.</p>
<h2>Optimización de Buscadores</h2>
<p>Cuando buscamos algo en Google muy pocas veces vamos a la segunda o tercera pagina de resultados, lo mismo pasa con tus potenciales clientes, por eso hacer que tu sitio web aparezca en la primera pagina de los resultados de busqueda es de vital importancia y es necesario invertir tiempo y dinero, ya que esta inversion si es bien aplicada sera retornada en visitas y luego en acciones. La optimizacion en buscadores es un tema que se debe tomarse muy en serio. <strong>Tip:</strong> investiga posibles palabras claves con la herramienta de AdWords o desde el mismo auto-completar busqueda de Google.</p>
<h2>Participa en tu Comunidad</h2>
<p>Trata de hacerte conocido en la comunidad de tu nicho, esto puede ser participando en foros, comunidades o asistiendo a eventos del rubro. Recuerda presentarte como un individuo y no como una empresa, eso hace sentir que estan interactuando no con una marca sino con una persona y esto a la larga genera fidelidad. <strong>Tip:</strong> ayuda a la gente a resolver sus problemas/dudas.</p>
<h2>Anuncios</h2>
<p>Contratar anuncios es basicamente comprar tráfico, esto es beneficioso siempre y cuando se tenga una estrategia de contenidos adecuada, ya que de la noche a la mañana podemos tener un gran trafico pero si no ofrecemos un contenido que les haga quedarse no serviria de nada. Hasta hace unos años el monopolio de los anuncios lo tenia AdWords pero hoy dia con Facebook tenemos una una mejor competencia. <strong>Tip:</strong> Puedes <a class="" title="olx" href="https://www.olx.com.ar/" target="_blank" rel="dofollow noopener">publicar avisos gratis</a> en sitios de anuncios sin costo.</p>
<h2>Email Marketing</h2>
<p>Para llevar a cabo esta una campaña de email marketing se necesita tener ya algo de tráfico en tu página Web, luego implementar una caja de suscripciones llamativa en alguna parte de tu página e ir construyendo una lista de correos. Posteriormente enviar de forma periodica y sin caer en la insistencia información relevante acerca de tu sitio Web. <strong>Tip:</strong> un buen horario para enviar boletines es en la mañana.</p>
<h2>Social Media</h2>
<p>El social media es otra forma de acercarte a tus clientes y construir una relación personal con ellos, es importante dar razones competentes que incentiven al visitante a darle «Me gusta» a tu pagina de Facebook o seguirte en Twitter, luego regularmente ir compartiendo mensajes cortos de interes para que se acuerden de regresar a tu página, no en exceso pero de forma consistente. <strong>Tip:</strong> participa del Google Authorship, conecta tu contenido a tu cuenta de Google+.</p>
<hr />
<p>Esas fueron 5 formas de las tantas que hay para promocionar tu sitio Web o blog, recuerda que para que cualquier estrategia de promoción sea efectiva se necesita tener un contenido adecuado que convenza a tus visitantes a quedarse y no cerrar la pagina luego de 5 segundos.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/5-formas-de-promocionar-tu-sitio-web/">5 Formas de Promocionar tu Sitio Web</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tursos.com/5-formas-de-promocionar-tu-sitio-web/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6102</post-id>	</item>
		<item>
		<title>Ejemplos Prácticos de Selectores de Atributos CSS</title>
		<link>https://tursos.com/ejemplos-practicos-de-selectores-de-atributos-css/</link>
					<comments>https://tursos.com/ejemplos-practicos-de-selectores-de-atributos-css/#comments</comments>
		
		<dc:creator><![CDATA[Josue Ochoa]]></dc:creator>
		<pubDate>Sun, 03 Feb 2013 08:28:21 +0000</pubDate>
				<category><![CDATA[Articulos]]></category>
		<category><![CDATA[CSS]]></category>
		<guid isPermaLink="false">https://tursos.com/?p=5990</guid>

					<description><![CDATA[<p>Seguro ya conoces los selectores de atributos de CSS, pero ¿conoces todas las variaciones y que usos prácticos se les puede dar?. En este tutorial veremos todos los tipos de selectores de atributo disponibles y ademas algunos ejemplos aplicables que tal vez te sean de utilidad.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/ejemplos-practicos-de-selectores-de-atributos-css/">Ejemplos Prácticos de Selectores de Atributos CSS</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class='infotuto'><a href="https://codepen.io/collection/VAvmjD" class="button" target="_blank" title="Ver demonstracion del tutorial"><div class="inner">Demo</div></a></div>



<p>Seguro ya conoces los selectores de atributos de CSS, pero ¿conoces todas las variaciones y que usos prácticos se les puede dar?. En este tutorial veremos todos los tipos de selectores de atributo disponibles y ademas algunos ejemplos aplicables que tal vez te sean de utilidad.</p>



<blockquote class="wp-block-quote">
<p><strong>Nota:</strong> En este tutorial voy a utilizar <a href="https://codepen.io/" target="_blank" rel="noreferrer noopener">CodePen</a> para los ejemplos, para un mejor entendimiento recuerda mirar el codigo en el orden: HTML » CSS » Resultado.</p>
</blockquote>



<h2>¿Qué son los selectores de atributos CSS?</h2>



<p>Son selectores que se basan en el atributo del elemento HTML para seleccionarlo, se usan corchetes [].<br /><br />Por ejemplo si tenemos un:</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;htmlmixed&quot;,&quot;mime&quot;:&quot;text/html&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;HTML&quot;,&quot;modeName&quot;:&quot;html&quot;}">&lt;p align="right"&gt;

&lt;/p&gt;</pre>
</div>



<p>Podemos seleccionarlo en CSS con:</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;css&quot;,&quot;mime&quot;:&quot;text/css&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;CSS&quot;,&quot;modeName&quot;:&quot;css&quot;}">p[align="right"]{

}</pre>
</div>



<p>Tambien se puede obviar la declaración del tipo de elemento y seleccionar unicamente con el atributo:</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;css&quot;,&quot;mime&quot;:&quot;text/css&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;CSS&quot;,&quot;modeName&quot;:&quot;css&quot;}">[align="right"]{

}</pre>
</div>



<p>Existen una serie de variaciones en las cuales podemos refinar la selección siendo mas especificos, si tienes conocimiento de <em>expresiones regulares</em>, esto te sera facil ya que los términos son similares.</p>



<h2>Ejemplos</h2>



<h3>1. [attr=valor]</h3>



<p>El uso mas básico, donde se declara exactamente el atributo y el valor indicado que este debe llevar para que sea seleccionado.</p>



<h4>Ejemplo:</h4>



<p>Digamos que tenemos una serie de elementos input y como sabemos, estos tienen que llevar el atributo type en donde se declara que tipo de campo sera, mediante los selectores de atributo podemos estilizar cada uno de los tipos de input individualmente sin declararle clase alguna:</p>


<p class='codepen'  data-height='265' data-theme-id='0' data-slug-hash='bnJaE' data-default-tab='css,result' data-animations='run' data-editable='' data-embed-version='2'>
See the Pen <a href="https://codepen.io/josueochoa/pen/bnJaE/">#1 Selector de Atributo =</a> by josueochoa (<a href="https://codepen.io/josueochoa">@josueochoa</a>) on <a href="https://codepen.io">CodePen</a>.0</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>



<h3>2. [attr^=valor]</h3>



<p>Esta variación seleccionará a los elementos que tengan ese atributo y cuyo valor declarado <strong>comience</strong> con lo que se indica.</p>



<h4>Ejemplo:</h4>



<p>Un uso práctico seria por ejemplo ponerles iconos a una serie de enlaces a redes sociales, donde detectamos a que red social esta enlazando (el enlace debe empezar con http://face&#8230;) y de acuerdo a ello ponemos el icono respectivo:</p>


<p class='codepen'  data-height='265' data-theme-id='0' data-slug-hash='GkxBw' data-default-tab='css,result' data-animations='run' data-editable='' data-embed-version='2'>
See the Pen <a href="https://codepen.io/josueochoa/pen/GkxBw/">#2 Selector de atributo ^=</a> by josueochoa (<a href="https://codepen.io/josueochoa">@josueochoa</a>) on <a href="https://codepen.io">CodePen</a>.0</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>



<h3>3. [attr$=valor]</h3>



<p>Este selector es lo invertido al anterior, seleccionará a los elementos que tengan ese atributo y cuyo valor declarado <strong>termine</strong> con lo que se indica.</p>



<h4>Ejemplo:</h4>



<p>El uso mas común que se le da a este tipo de selector es para estilizar enlaces de descarga de archivos, en el cual la ruta termina en el formato de archivo (http://&#8230;/documento.doc), el cual usamos para hacer una selección individual:</p>


<p class='codepen'  data-height='265' data-theme-id='0' data-slug-hash='emGtn' data-default-tab='css,result' data-animations='run' data-editable='' data-embed-version='2'>
See the Pen <a href="https://codepen.io/josueochoa/pen/emGtn/">#3 Selector de Atributo $=</a> by josueochoa (<a href="https://codepen.io/josueochoa">@josueochoa</a>) on <a href="https://codepen.io">CodePen</a>.0</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>



<h3>4. [attr*=valor]</h3>



<p>Este selector es el que tiene mas alcance, ya que como ven lleva el *, lo que indica que es global, va a seleccionar el elemento que tenga el valor indicado este donde este.</p>



<h4>Ejemplo:</h4>



<p>Un ejemplo práctico es cuando trabajamos con los menús de WordPress y queremos aplicar estilo al elemento activo o current, pero WordPress nos añade un montón de clases y al final no logramos lo cometido o terminamos con un CSS muy desordenado, para estos casos podemos usar el selector de atributo global *=:</p>


<p class='codepen'  data-height='265' data-theme-id='0' data-slug-hash='HafvB' data-default-tab='html,result' data-animations='run' data-editable='' data-embed-version='2'>
See the Pen <a href="https://codepen.io/josueochoa/pen/HafvB/">#4 Selectores de Atributos *=</a> by josueochoa (<a href="https://codepen.io/josueochoa">@josueochoa</a>) on <a href="https://codepen.io">CodePen</a>.0</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>



<h3>5. [attr~=valor]</h3>



<p>Esta variación seleccionará a los elementos que tengan ese atributo y cuyo valor declarado este entre <strong>espacios</strong>.</p>



<h4>Ejemplo:</h4>



<p>Esta tipo de selector se usa casi siempre para seleccionar elementos que tengan atributos con multiples valores, tales como el atributo rel de un a, en este ejemplo tendremos un par de parrafos en los cuales habran varios enlaces a los que les pondremos multiples valores rel, pero colorearemos de verde solo los que sean external:</p>


<p class='codepen'  data-height='265' data-theme-id='0' data-slug-hash='EithJ' data-default-tab='html,result' data-animations='run' data-editable='' data-embed-version='2'>
See the Pen <a href="https://codepen.io/josueochoa/pen/EithJ/">#5 Selector de Atributo ~=</a> by josueochoa (<a href="https://codepen.io/josueochoa">@josueochoa</a>) on <a href="https://codepen.io">CodePen</a>.0</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>



<h3>6. [attr|=valor]</h3>



<p>Esta variación seleccionará a los elementos que tengan ese atributo y cuyo valor declarado este entre <strong>guiones</strong>.</p>



<h4>Ejemplo:</h4>



<p>Para este selector haremos un ejemplo un poco mas complicado: lo usaremos para hacer una pequeña grilla CSS, en la cual las propiedades se aplicaran a las columnas solo por el hecho de que la clase de estas contenga la palabra grid-, seguido ira el numero que indique el ancho de esa columna:</p>


<p class='codepen'  data-height='265' data-theme-id='0' data-slug-hash='bguCF' data-default-tab='css,result' data-animations='run' data-editable='' data-embed-version='2'>
See the Pen <a href="https://codepen.io/josueochoa/pen/kyYdmy">#6 Selector de atributo |=</a> by josueochoa (<a href="https://codepen.io/josueochoa">@josueochoa</a>) on <a href="https://codepen.io">CodePen</a>.0</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>



<h3>Compatibilidad</h3>



<p>Cada uno de estos selectores funciona perfectamente en todos los navegadores modernos. Incluso Internet Explorer lo viene soportando a partir de la version 7.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/ejemplos-practicos-de-selectores-de-atributos-css/">Ejemplos Prácticos de Selectores de Atributos CSS</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tursos.com/ejemplos-practicos-de-selectores-de-atributos-css/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5990</post-id>	</item>
		<item>
		<title>Como hacer un Acordeón (accordion) con jQuery y CSS</title>
		<link>https://tursos.com/como-hacer-un-acordeon-accordion-con-jquery-y-css/</link>
					<comments>https://tursos.com/como-hacer-un-acordeon-accordion-con-jquery-y-css/#comments</comments>
		
		<dc:creator><![CDATA[Josue Ochoa]]></dc:creator>
		<pubDate>Wed, 26 Dec 2012 21:37:43 +0000</pubDate>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[jQuery]]></category>
		<guid isPermaLink="false">https://tursos.com/?p=5930</guid>

					<description><![CDATA[<p>En este tutorial haremos un acordeón vertical usando jQuery con un código bastante minimalista y facil de entender, usaremos CSS para darle decoración y mejorar la experiencia de usuario.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/como-hacer-un-acordeon-accordion-con-jquery-y-css/">Como hacer un Acordeón (accordion) con jQuery y CSS</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span class="screen-reader-text"> </span><del><div class='infotuto'><a href="https://webtursos.s3.amazonaws.com/web/source/acordeon.zip" class="button" target="_blank" title="Descargate el codigo del tutorial"><div class="inner">Descargar</div></a></div></p>



<p>En este tutorial haremos un acordeón vertical usando jQuery con un código bastante minimalista y facil de entender, usaremos CSS para darle decoración y mejorar la experiencia de usuario.</p>



<h2>Estructura HTML</h2>



<p>Usaremos con una lista de definición o definition list (dl) para manejar la estructura de los contenidos, una vez comprendas el funcionamiento del código podrás adaptarlo a cualquier otra estructura:</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;htmlmixed&quot;,&quot;mime&quot;:&quot;text/html&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;HTML&quot;,&quot;modeName&quot;:&quot;html&quot;}">&lt;dl&gt;
    &lt;dt&gt;Titulo 1&lt;/dt&gt;
    &lt;dd&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur maxime cupiditate nesciunt molestias itaque vel reiciendis officiis explicabo cum impedit dolorem quod minus beatae architecto necessitatibus sed exercitationem aliquam omnis!&lt;/dd&gt;

    &lt;dt&gt;Titulo 2&lt;/dt&gt;
    &lt;dd&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptates mollitia quos! Dolor cum vitae aperiam deserunt hic quas quidem qui excepturi minima repudiandae pariatur id sit dignissimos laborum provident velit!&lt;/dd&gt;

    &lt;dt&gt;Titulo 3&lt;/dt&gt;
    &lt;dd&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Optio voluptatum expedita sunt voluptatibus ratione assumenda quo animi numquam blanditiis asperiores illo laudantium et quae itaque reiciendis nam ducimus officiis officia?&lt;/dd&gt;

    &lt;dt&gt;Titulo 4&lt;/dt&gt;
    &lt;dd&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iusto obcaecati numquam nemo quasi omnis accusamus illo distinctio doloribus architecto culpa maiores blanditiis laborum accusantium assumenda vero necessitatibus optio? Ipsa perferendis.&lt;/dd&gt;

    &lt;dt&gt;Titulo 5&lt;/dt&gt;
    &lt;dd&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iusto obcaecati numquam nemo quasi omnis accusamus illo distinctio doloribus architecto culpa maiores blanditiis laborum accusantium assumenda vero necessitatibus optio? Ipsa perferendis.&lt;/dd&gt;
  &lt;/dl&gt;</pre>
</div>



<h2>jQuery</h2>



<p>Luego procedemos a incluir a jQuery y ademas creamos un script en el cual ira nuestro código, si deseas puedes manejarlo en un JS aparte, pero para el ejemplo lo haremos todo junto:</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;javascript&quot;,&quot;mime&quot;:&quot;text/javascript&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;JavaScript&quot;,&quot;modeName&quot;:&quot;js&quot;}">&lt;script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;

&lt;/script&gt;</pre>
</div>



<p>Lo primero que haremos sera ocultar todos los &#8216;dd&#8217;, pero no los dd que esten posteriores a un dt con clase .activo, esto nos va a permitir dejar un item abierto por defecto, luego procedemos a detectar cuando &#8216;dt&#8217; sea presionado:</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;javascript&quot;,&quot;mime&quot;:&quot;text/javascript&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;JavaScript&quot;,&quot;modeName&quot;:&quot;js&quot;}">$('dl dd').not('dt.activo + dd').hide(); 
$('dl dt').click(function(){

});</pre>
</div>



<p>Dentro del evento de click le pondremos una condición:</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;javascript&quot;,&quot;mime&quot;:&quot;text/javascript&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;JavaScript&quot;,&quot;modeName&quot;:&quot;js&quot;}"> $('dl dt').click(function(){
   if ($(this).hasClass('activo')) {
        $(this).removeClass('activo');
        $(this).next().slideUp();
   } else {
        $('dl dt').removeClass('activo');
        $(this).addClass('activo');
        $('dl dd').slideUp();
        $(this).next().slideDown();
   }
});</pre>
</div>



<p>(<strong>Linea 23</strong>) Si es que este &#8216;dt&#8217; que acabamos de cliquear tiene la clase .activo (osea si esta abierto) le quitamos la clase .activo (<strong>linea 24</strong>) y hacemos que el elemento que le sigue, que vendría a ser el &#8216;dd&#8217; adyacente (que esta mostrandose), se oculte (<strong>linea 25</strong>).</p>



<p>En caso contrario (que muy probablemente vendría a ser el estado por defecto) al hacerle clic, lo primero que hará es quitarle .activo a todos los demás &#8216;dt&#8217; (<strong>linea 27</strong>), pero le asignamos .activo al que acabamos de cliquear (<strong>linea 28</strong>), luego ocultamos todos los &#8216;dd&#8217; (<strong>linea 29</strong>) y por ultimo mostramos solo el &#8216;dd&#8217; que le sigue a este &#8216;dt&#8217; (<strong>linea 30</strong>), de esta forma solo se muestra uno a la vez.</p>



<h2>CSS</h2>



<p>Hasta allí lo tendríamos completamente funcional, sin embargo la experiencia no es tan agradable, para mejorar esto usaremos algo de CSS:</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;css&quot;,&quot;mime&quot;:&quot;text/css&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;CSS&quot;,&quot;modeName&quot;:&quot;css&quot;}">*{ font-family: sans-serif; margin: 0;}
dl{ margin: 60px auto; width: 600px; }
dt, dd{ padding: 20px; }
dt{ background: #333333; color: white; border-bottom: 1px solid #141414; border-top: 1px solid #4E4E4E; cursor: pointer; }
dd{ background: #F5F5F5; line-height: 1.6em; }
dt.activo, dt:hover{ background: #424242; }</pre>
</div>



<div class="wp-block-image">
<figure class="aligncenter"><img width="600" height="400" class="wp-image-5952" src="https://webtursos.s3.amazonaws.com/web/files/sinflechs.jpg" alt="" srcset="https://tursos.com/wp-content/uploads/sinflechs.jpg 600w, https://tursos.com/wp-content/uploads/sinflechs-300x200.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /></figure>
</div>



<p>Va quedado mejor, pero podemos hacer mas aun, le vamos a añadir unas flechitas con la ayuda de la pseudo-clase :after.</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;css&quot;,&quot;mime&quot;:&quot;text/css&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;CSS&quot;,&quot;modeName&quot;:&quot;css&quot;}">dt:before{ content: "▸"; margin-right: 10px; }
dt.activo:before{ content: "▾"; }</pre>
</div>



<p>Lo que estamos haciendo aqui es que, por defecto antes de todo dt haya una &#8216;▸&#8217;, pero si este dt esta .activo que esta cambie a &#8216;▾&#8217;.</p>



<div class="wp-block-image">
<figure class="aligncenter"><img width="600" height="400" class="wp-image-5953" src="https://webtursos.s3.amazonaws.com/web/files/conflechas.jpg" alt="" srcset="https://tursos.com/wp-content/uploads/conflechas.jpg 600w, https://tursos.com/wp-content/uploads/conflechas-300x200.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /></figure>
</div>



<h3>Dejar un item activado por defecto</h3>



<p>Si queremos dejar un item abierto por defecto, simplemente le ponemos al dt la clase activo, ya que al cargar la pagina no va a ocultar los dd que esten posteriores a un dt con clase activo:</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;htmlmixed&quot;,&quot;mime&quot;:&quot;text/html&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;HTML&quot;,&quot;modeName&quot;:&quot;html&quot;}">&lt;dt class="activo"&gt;Titulo 3&lt;/dt&gt;
&lt;dd&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Optio voluptatum expedita sunt voluptatibus ratione assumenda quo animi numquam blanditiis asperiores illo laudantium et quae itaque reiciendis nam ducimus officiis officia?&lt;/dd&gt;</pre>
</div>



<h2>Código Final</h2>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror cm-s-xq-light" data-setting="{&quot;mode&quot;:&quot;htmlmixed&quot;,&quot;mime&quot;:&quot;text/html&quot;,&quot;theme&quot;:&quot;xq-light&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;language&quot;:&quot;HTML&quot;,&quot;modeName&quot;:&quot;html&quot;}">&lt;!DOCTYPE HTML&gt;
&lt;html lang="en-US"&gt;
&lt;head&gt;
	&lt;meta charset="UTF-8"&gt;
	&lt;title&gt;&lt;/title&gt;
	&lt;style type="text/css"&gt;
		*{ font-family: sans-serif; margin: 0;}
		dl{ margin: 60px auto; width: 600px; }
		dt, dd{ padding: 20px; }
		dt{ background: #333333; color: white; border-bottom: 1px solid #141414; border-top: 1px solid #4E4E4E; cursor: pointer; }
		dd{ background: #F5F5F5; line-height: 1.6em; }
		dt.activo, dt:hover{ background: #424242; }

		dt:before{ content: "▸"; margin-right: 10px; }
		dt.activo:before{ content: "▾"; }
	&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;dl&gt;
		&lt;dt&gt;Titulo 1&lt;/dt&gt;
		&lt;dd&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur maxime cupiditate nesciunt molestias itaque vel reiciendis officiis explicabo cum impedit dolorem quod minus beatae architecto necessitatibus sed exercitationem aliquam omnis!&lt;/dd&gt;

		&lt;dt&gt;Titulo 2&lt;/dt&gt;
		&lt;dd&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptates mollitia quos! Dolor cum vitae aperiam deserunt hic quas quidem qui excepturi minima repudiandae pariatur id sit dignissimos laborum provident velit!&lt;/dd&gt;

		&lt;dt&gt;Titulo 3&lt;/dt&gt;
		&lt;dd&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Optio voluptatum expedita sunt voluptatibus ratione assumenda quo animi numquam blanditiis asperiores illo laudantium et quae itaque reiciendis nam ducimus officiis officia?&lt;/dd&gt;

		&lt;dt&gt;Titulo 4&lt;/dt&gt;
		&lt;dd&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iusto obcaecati numquam nemo quasi omnis accusamus illo distinctio doloribus architecto culpa maiores blanditiis laborum accusantium assumenda vero necessitatibus optio? Ipsa perferendis.&lt;/dd&gt;

		&lt;dt&gt;Titulo 5&lt;/dt&gt;
		&lt;dd&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iusto obcaecati numquam nemo quasi omnis accusamus illo distinctio doloribus architecto culpa maiores blanditiis laborum accusantium assumenda vero necessitatibus optio? Ipsa perferendis.&lt;/dd&gt;
	&lt;/dl&gt;
	&lt;script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"&gt;&lt;/script&gt;
	&lt;script type="text/javascript"&gt;
	  $('dl dd').not('dt.activo + dd').hide();
       $('dl dt').click(function(){
          if ($(this).hasClass('activo')) {
               $(this).removeClass('activo');
               $(this).next().slideUp();
          } else {
               $('dl dt').removeClass('activo');
               $(this).addClass('activo');
               $('dl dd').slideUp();
               $(this).next().slideDown();
          }
       });
	&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</div>



<p>Si tienes alguna duda ponla en los comentarios, puedes  descargar el código fuente desde <a href="https://webtursos.s3.amazonaws.com/web/source/acordeon.zip">aquí</a>.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/como-hacer-un-acordeon-accordion-con-jquery-y-css/">Como hacer un Acordeón (accordion) con jQuery y CSS</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tursos.com/como-hacer-un-acordeon-accordion-con-jquery-y-css/feed/</wfw:commentRss>
			<slash:comments>23</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5930</post-id>	</item>
		<item>
		<title>Como Hacer un Sistema de Encuestas con PHP y MySQL</title>
		<link>https://tursos.com/como-hacer-un-sistema-de-encuestas-con-php-y-mysql/</link>
					<comments>https://tursos.com/como-hacer-un-sistema-de-encuestas-con-php-y-mysql/#comments</comments>
		
		<dc:creator><![CDATA[Edwind Pineda]]></dc:creator>
		<pubDate>Sat, 22 Dec 2012 00:47:23 +0000</pubDate>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">https://tursos.com/?p=5802</guid>

					<description><![CDATA[<p>Aprende como hacer un sistema de encuestas con PHP y MySQL usando tablas relacionales.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/como-hacer-un-sistema-de-encuestas-con-php-y-mysql/">Como Hacer un Sistema de Encuestas con PHP y MySQL</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class='infotuto'><a href="https://webtursos.s3.amazonaws.com/web/source/como-hacer-un-sistema-de-encuestas-con-php-y-mysql.zip" class="button" target="_blank" title="Descargate el codigo del tutorial"><div class="inner">Descargar</div></a></div>



<p><strong>Actualizado el 25-09-2020: se han cambiado todas las funciones mysql (deprecadas</strong>)<strong> por mysqli, tambien se actualizo un poco el CSS y se arreglo la <a href="https://webtursos.s3.amazonaws.com/web/source/como-hacer-un-sistema-de-encuestas-con-php-y-mysql.zip">URL</a> del .zip al código</strong></p>



<p>En este tutorial aprenderas a hacer un sistema de encuestas funcional, práctico y expandible, usaremos PHP y MySQL con tablas relacionales.</p>



<p>Trabajaremos con 4 ficheros PHP, uno para la conexión a la base de datos (conexion.php), uno para listar las encuestas (index.php), otro para crear nuevas encuestas (agregar.php), el que mostrara los resultados de las encuestas (resultado.php) y por ultimo estilos.css que se encargara de darle algo de estetica pero tambien de una parte muy esencial que es la de mostrar la barra de votaciones.</p>



<p>Si en ciertas partes el código te resulta muy complejo, lee los comentarios.</p>



<h2>0. estilos.css</h2>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;css&quot;,&quot;mime&quot;:&quot;text/css&quot;,&quot;theme&quot;:&quot;twilight&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;languageLabel&quot;:&quot;file&quot;,&quot;fileName&quot;:&quot;estilos.css&quot;,&quot;language&quot;:&quot;CSS&quot;,&quot;modeName&quot;:&quot;css&quot;}">.barra{
    background: #ff3019;
    background: linear-gradient(to bottom, #ff3019 0%,#cf0404 100%);
    clear: both;
    height: 15px;
    color: white;
    font-weight: bold;
    text-align: right;
    padding: 6px;
    border-radius: 4px;
    max-width: 356px;
    min-width: 20px;
}
 
/* A partir de aqui es solo cosmetico, lo puedes borrar */
*{
    margin: 0;
    padding: 0;
    font-family: sans-serif;
    font-size: 14px;
}
body{
    background: #464646;
}
a{
    text-decoration: none;
    color: red;
}
.fr{
    float: right;
}
.fl, .votar{
    float: left;
}
.cf{
    clear: both;
}
.wrap{
    padding: 25px;
    margin: 0 auto;
    width: 385px;
    background: #F3F3F3;
    border-radius: 4px;
    margin-top: 70px;
    border: 1px solid #E0E0E0;
}
h1{
    margin-bottom: 20px;
    font-size: 21px;
    border-bottom: 1px solid #DDD;
    padding-bottom: 15px;
    text-align: center;
}
form &gt; div{
    margin-bottom: 20px;
}
form .titulo{
    margin-right: 20px;
}
form label{
    display: block;
}
form input[type='text'], select{
    border: 1px solid #E0E0E0;
    padding: 6px;
    resize: none;
}
form input[type="submit"]{
    padding: 8px 16px;
    background: gray;
    border: 0;
    display: block;
    font-weight: bold;
    color: white;
    border-radius: 6px;
}
form input[type="submit"]:hover{
    background: #505050;
}
ul.votacion{
    margin-bottom: 25px;
    list-style: none;
}
.votacion li a{
    padding: 8px;
    background: #FCFCFC;
    border-radius: 5px;
    margin-bottom: 5px;
    color: gray;
    font-weight: bold;
    font-size: 16px;
    display: block;
}
.votacion li a:hover{
    color: black;
    background: white;
}
.votacion li span{
    margin-left: 10px;
}
.votacion .fl{
    margin-bottom: 5px;
}
.volver{
    display: block;
    padding-top: 15px;
    clear: both;
}
.votar{
    float: left;
}
.resultado{
    float: left;
    margin-left: 10px;
    margin-top: 7px;
    color: black;
}</pre>
</div>



<h2>1. SQL</h2>



<p>Creamos una tala con el nombre encuestas con los siguientes campos: id, titulo y fecha. Aqui se almacenara los datos las encuestas como el titulo y la fecha que fue creada la encuestas, utilizaremos otra tabla para que almacene las opciones de las encuestas.</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;twilight&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">CREATE TABLE IF NOT EXISTS `encuestas` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`titulo` varchar(50) NOT NULL,
`fecha` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;</pre>
</div>



<p>Ahora insertarmos unos datos de ejemplo en la tabla:</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;twilight&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">INSERT INTO `encuestas` (`id`, `titulo`, `fecha`)
VALUES (NULL ,  'Que os parecen los tutoriales de PHP?',
'2012-12-15');</pre>
</div>



<p>Creamos otra tabla con el nombre opciones con los siguientes campos: id, id_encuesta, nombre y valor.<br />El campo de id_encuesta tendrá relación con el campo id de la tabla encuestas, en nombre ira el nombre y valor guardara el numero de votos que tendra la opcion respectiva.</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;twilight&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">CREATE TABLE IF NOT EXISTS `opciones` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_encuesta` int(11) NOT NULL,
  `nombre` varchar(50) NOT NULL,
  `valor` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;</pre>
</div>



<p>Insertamos datos a la tabla opciones:</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;sql&quot;,&quot;mime&quot;:&quot;text/x-sql&quot;,&quot;theme&quot;:&quot;twilight&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;language&quot;:&quot;SQL&quot;,&quot;modeName&quot;:&quot;sql&quot;}">INSERT INTO  `opciones` (`id` ,`id_encuesta` ,`nombre` ,`valor`)
VALUES (NULL ,  '1',  'Muy Bueno',  '14')
, (NULL ,  '1',  'Bueno',  '6')
, (NULL ,  '1',  'Malo',  '2');</pre>
</div>



<p>Fijaos que he definido id_encuesta con 1 y es porque quiero que estas opciones esten relacionadas con la encuestas que creamos anteriormente que llevaba el id de 1.</p>



<p>Si no entendisteis bien como vamos a trabajar las relaciones de las tablas, esta grafica te aclarará las dudas:</p>



<div class="wp-block-image">
<figure class="aligncenter"><img width="550" height="296" class="wp-image-5883" src="https://webtursos.s3.amazonaws.com/web/files/sql_diagrama_encuesta1.jpg" alt="" srcset="https://tursos.com/wp-content/uploads/sql_diagrama_encuesta1.jpg 550w, https://tursos.com/wp-content/uploads/sql_diagrama_encuesta1-300x161.jpg 300w" sizes="(max-width: 550px) 100vw, 550px" /></figure>
</div>



<h2>02. conexion.php</h2>



<p>El tipico fichero PHP para guardar los datos de la conexión, nada del otro mundo:</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;php&quot;,&quot;mime&quot;:&quot;text/x-php&quot;,&quot;theme&quot;:&quot;twilight&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;languageLabel&quot;:&quot;file&quot;,&quot;fileName&quot;:&quot;conexion.php&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;modeName&quot;:&quot;php&quot;}">&lt;?php // datos para la conexion a mysql
define('DB_SERVER','localhost');
define('DB_NAME','tursos');
define('DB_USER','root');
define('DB_PASS','root');
 
$conex = mysqli_connect(DB_SERVER,DB_USER,DB_PASS);
mysqli_select_db($conex, DB_NAME);</pre>
</div>



<h2>03. index.php</h2>



<p>Lo primero sera incluir al fichero de conexión, luego haremos una consulta a la base datos para que nos muestren los títulos de la tabla &#8216;encuestas&#8217; los mismos que mostraremos como enlaces hacia las encuestas, estos enlaces llevaran el id de la encuestas en cuestión mediante GET (encuestas.php?id=x).</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;php&quot;,&quot;mime&quot;:&quot;text/x-php&quot;,&quot;theme&quot;:&quot;twilight&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;index.php&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;modeName&quot;:&quot;php&quot;}">&lt;?php
require('conexion.php');
$sql = "SELECT * FROM encuestas ORDER BY id DESC";
$req = mysqli_query($conex, $sql);
?&gt;
&lt;!DOCTYPE HTML&gt;
&lt;html lang="en-US"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Sistema de encuestas&lt;/title&gt;
    &lt;link rel="stylesheet" href="estilos.css"&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="wrap"&gt;
        &lt;h1&gt;Encuestas&lt;/h1&gt;
        &lt;ul class="votacion index"&gt;
        &lt;?php
            while($result = mysqli_fetch_object($req)){
                echo '&lt;li&gt;&lt;a href="encuesta.php?id='.$result-&gt;id.'"&gt;'.$result-&gt;titulo.'&lt;/a&gt;&lt;/li&gt;';
            }
        ?&gt;
        &lt;/ul&gt;
        &lt;a href="agregar.php"&gt;+ Agregar nueva encuesta&lt;/a&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</div>



<p>Nos debería ir quedando así:</p>



<div class="wp-block-image">
<figure class="aligncenter"><img width="685" height="450" class="wp-image-5907" src="https://webtursos.s3.amazonaws.com/web/files/encuestas_index.jpg" alt="" srcset="https://tursos.com/wp-content/uploads/encuestas_index.jpg 685w, https://tursos.com/wp-content/uploads/encuestas_index-300x197.jpg 300w" sizes="(max-width: 685px) 100vw, 685px" /></figure>
</div>



<h2>04. encuesta.php</h2>



<p><strong>Linea 04:</strong> Si no existe la variable de URL se regresara a la pagina principal.<br /><strong>Linea 11:</strong> Si le dan a votar (el form de votacion ira abajo) y si han seleccionado una opcion se va a actualizar los datos del campo &#8216;valor&#8217; de la tabla &#8216;opciones&#8217;:</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;php&quot;,&quot;mime&quot;:&quot;text/x-php&quot;,&quot;theme&quot;:&quot;twilight&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;languageLabel&quot;:&quot;file&quot;,&quot;fileName&quot;:&quot;encuesta.php&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;modeName&quot;:&quot;php&quot;}">&lt;?php
require('conexion.php');
    $id = $_GET['id'];
    if(!isset($_GET['id'])){
        header('location: index.php');
    }
 
    if(isset($_POST['votar']))
    {
 
        if(isset($_POST['valor'])){
            $opciones = $_POST['valor'];
            $mod = mysqli_query($conex, "SELECT * FROM opciones WHERE id = ".$opciones);
            while($result = mysqli_fetch_object($mod)){
                $valor = $result-&gt;valor + 1; // obtenemos el valor de 'valor' y le añadimos 1 unidad
                mysqli_query($conex,"UPDATE opciones SET valor =  '".$valor."' WHERE id = ".$opciones); // luego ejecutamos el query SQL
            }
            header('location: resultado.php?id='.$id); // Por ultimo lo redireccionamos a la encuestas mostrando los resultados.
        }
    }
?&gt;</pre>
</div>



<p>Ahora la parte HTML donde ira el form de votacion, aqui vamos a generar una consulta a la base datos para que se muestren los datos de la tabla &#8216;encuestas&#8217; con relación a la tabla &#8216;opciones&#8217; como radiobuttons, partes de un form:</p>



<p><strong>Linea 15: </strong>En esta linea haremos un query con INNER JOIN en el cual trabajaremos con las tablas &#8216;encuestas&#8217; y &#8216;opciones&#8217; donde <strong>a</strong> sera encuestas y <strong>b</strong> es opciones, aqui buscaremos filas donde a.id sea igual a b.encuesta_id, el valor de a.id que se comparara sera definido por $id, este valor lo obtuvimos al principio en el primer pedazo de código mediante GET.</p>



<p><strong>Linea 18 y 27: </strong>Con el resultado del query hacemos un while donde mostraremos el titulo de la encuesta y luego en la linea 48 se muestran cada una de las opciones como input[type=&#8217;radio&#8217;], $aux es una variable auxiliar que nos ayuda a detener el bucle para que ciertos elementos se muestren solo una vez.</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;php&quot;,&quot;mime&quot;:&quot;text/x-php&quot;,&quot;theme&quot;:&quot;twilight&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;languageLabel&quot;:&quot;file&quot;,&quot;fileName&quot;:&quot;encuesta.php&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;modeName&quot;:&quot;php&quot;}">&lt;!DOCTYPE HTML&gt;
&lt;html lang="en-US"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Sistema de encuestas&lt;/title&gt;
    &lt;link rel="stylesheet" href="estilos.css"&gt;
&lt;/head&gt;
&lt;body&gt;
 
&lt;div class="wrap"&gt;
 
&lt;form action="" method="post"&gt;
&lt;?php
$aux = 0;
$sql = "SELECT a.titulo as titulo, a.fecha as fecha, b.id as id, b.nombre as nombre, b.valor as valor FROM encuestas a INNER JOIN opciones b ON a.id = b.id_encuesta WHERE a.id = ".$id;
$req = mysqli_query($conex, $sql);
 
while($result = mysqli_fetch_object($req)){
 
    if($aux == 0){
        echo '&lt;h1&gt;'.$result-&gt;titulo.'&lt;/h1&gt;';
 
        echo '&lt;ul class="votacion"&gt;';
        $aux = 1;
    }
 
    echo '&lt;li&gt;&lt;label&gt;&lt;input name="valor" type="radio" value="'.$result-&gt;id.'"&gt;&lt;span&gt;'.$result-&gt;nombre.'&lt;/span&gt;&lt;/label&gt;&lt;/li&gt;';
 
}
    echo '&lt;/ul&gt;'; 
 
    if(!isset($_POST['valor'])){
        echo "&lt;div class='error'&gt;Selecciona una opcion.&lt;/div&gt;";
    }
 
    echo '&lt;input name="votar" type="submit" value="Votar" class="votar"&gt;';
    echo '&lt;a href="resultado.php?id='.$id.'" class="resultado"&gt;Ver Resultados&lt;/a&gt;';
    echo '&lt;a href="index.php" class="volver"&gt;← Volver&lt;/a&gt;';
 
?&gt;
 
&lt;/form&gt;
&lt;/div&gt;
 
&lt;/body&gt;
&lt;/html&gt;</pre>
</div>



<p>Si todo salió bien, encuesta.php deberia verse asi:</p>



<div class="wp-block-image">
<figure class="aligncenter"><img class="wp-image-5908" src="https://webtursos.s3.amazonaws.com/web/files/encuestas_encuesta.jpg" alt="" /></figure>
</div>



<h2>05. resultado.php</h2>



<p>Esta archivo es mas simple, aqui mostraremos los resultados de las encuestas de acuerdo al id obtenido por GET (resultado.php?id=x):<br /><strong>Linea 11:</strong> Para obtener el valor usamos SUM() para que nos resulte la suma total del valor en un solo numero:</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;php&quot;,&quot;mime&quot;:&quot;text/x-php&quot;,&quot;theme&quot;:&quot;twilight&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;resultado.php&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;modeName&quot;:&quot;php&quot;}">&lt;?php
 
require('conexion.php');
 
if(!isset($_GET['id'])){
    header('location: index.php');
}
 
$suma = 0;
$id = $_GET['id'];
$mod = mysqli_query($conex,"SELECT SUM(valor) as valor FROM opciones WHERE id_encuesta = ".$id);
while($result = mysqli_fetch_object($mod)){
    $suma = $result-&gt;valor;
}
 
?&gt;</pre>
</div>



<p>Luego mostramos los resultados con el mismo query con INNER JOIN que ya hemos usado anteriormente, esto nos mostrara cada opción en forma de div (.barra) al que le definimos el ancho en porcentaje usando una operación matemática:</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;php&quot;,&quot;mime&quot;:&quot;text/x-php&quot;,&quot;theme&quot;:&quot;twilight&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;languageLabel&quot;:&quot;file&quot;,&quot;fileName&quot;:&quot;resultado.php&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;modeName&quot;:&quot;php&quot;}">&lt;!DOCTYPE HTML&gt;
&lt;html lang="en-US"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Sistema de Encuestas&lt;/title&gt;
    &lt;link rel="stylesheet" href="estilos.css"&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class="wrap"&gt;
&lt;form action="" method="post"&gt;
&lt;?php
$aux = 0;
$sql = "SELECT a.titulo as titulo, a.fecha as fecha, b.id as id, b.nombre as nombre, b.valor as valor FROM encuestas a INNER JOIN opciones b ON a.id = b.id_encuesta WHERE a.id = ".$id;
$req = mysqli_query($conex, $sql);
 
while($result = mysqli_fetch_object($req)){
    if($aux == 0){
            echo "&lt;h1&gt;".$result-&gt;titulo."&lt;/h1&gt;";
            echo "&lt;ul class='votacion'&gt;";
        $aux = 1;
    }
    echo '&lt;li&gt;&lt;div class="fl"&gt;'.$result-&gt;nombre.'&lt;/div&gt;&lt;div class="fr"&gt;Votos: '.$result-&gt;valor.'&lt;/div&gt;';
    if($suma == 0){
        echo '&lt;div class="barra cero" style="width:0%;"&gt;&lt;/div&gt;&lt;/li&gt;';
    }else{
        echo '&lt;div class="barra" style="width:'.($result-&gt;valor*100/$suma).'%;"&gt;'.round($result-&gt;valor*100/$suma).'%&lt;/div&gt;&lt;/li&gt;';
    }
 
}
echo '&lt;/ul&gt;'; 
 
if(isset($aux)){
    echo '&lt;span class="fr"&gt;Total: '.$suma.'&lt;/span&gt;';
    echo '&lt;a href="encuesta.php?id='.$id.'"" class="volver"&gt;← Volver&lt;/a&gt;';
}
 
?&gt;
&lt;/ul&gt;
&lt;/form&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</div>



<p>Si llegaste hasta aqui resultado.php debería lucir similar a esto:</p>



<div class="wp-block-image">
<figure class="aligncenter"><img width="686" height="550" class="wp-image-5908" src="https://webtursos.s3.amazonaws.com/web/files/encuestas_resultado.jpg" alt="" srcset="https://tursos.com/wp-content/uploads/encuestas_resultado.jpg 686w, https://tursos.com/wp-content/uploads/encuestas_resultado-300x240.jpg 300w" sizes="(max-width: 686px) 100vw, 686px" /></figure>
</div>



<h2>06. agregar.php</h2>



<p>En este fichero es probablemente el mas complejo de todos, manejaremos el proceso PHP arriba y el formulario abajo, por ello para entender esta parte es necesario ver el código completo (leer comentarios):</p>



<div class="wp-block-codemirror-blocks-code-block code-block">
<pre class="CodeMirror" data-setting="{&quot;mode&quot;:&quot;php&quot;,&quot;mime&quot;:&quot;text/x-php&quot;,&quot;theme&quot;:&quot;twilight&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;agregar.php&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;modeName&quot;:&quot;php&quot;}">&lt;?php require('conexion.php');
$cont = 0;
 
$titulo = ''; if(isset($_POST['titulo'])){ $titulo = trim($_POST['titulo']); } // definimos $titulo para evitar errores, y guardamos su valor por el ingresado.
 
if(isset($_POST['enviar'])){
     if($titulo != ""){
        $num = $_POST['opciones']; // este valor lo vamos a obtener de lo que el usuario ingrese como numero de opciones al crear la encuesta
        $fecha = date('Y-m-d');
 
        $sql= "INSERT INTO `encuestas` (`id` ,`titulo` ,`fecha`) VALUES (NULL ,  '$titulo', '$fecha');"; // si han ingresado si quiera un titulo insertamos esta encuesta en la tabla
        mysqli_query($conex, $sql);
 
        $sql = "SELECT MAX(id) as id FROM encuestas"; // ahora obtenemos el id de la ultima fila,
                                                      // la que acabamos de ingresar,
                                                      // esto lo hacemos para poder asociarle las opciones
        $req =  mysqli_query($conex, $sql);
 
        while($result = mysqli_fetch_object($req)){
            $id_encuesta = $result-&gt;id;  // con el resultado obtenido hacemos un bucle y definimos los resultados como id_encuesta.
        }
 
        $sql = "INSERT INTO  `opciones` (`id` ,`id_encuesta` ,`nombre` ,`valor`) VALUES "; // En esta parte estamos armando un query SQL dinamico el cual sera modificado de acuerdo a lo que el usuario ingrese en el formulario.
        for($i=1;$i&lt;=$num;$i++){
            $opcnativa = trim($_POST['opc'.$i]); // obtenemos el nombre de cada opcion indivudalmente.
            if($opcnativa != ""){
                $sql .= "(NULL ,  '$id_encuesta',  '$opcnativa',  '0')"; // el id de la opcion ira null para que se ponga automaticamente, en id_encuesta pues ira el id de la encuesta que acabamos de crear, en 'nombre' ira el nombre de la opcion y valor ira 0, puesto que es una nueva opcion sin votos, esto se repetira con todas las opciones que el usuario haya definido.
                $cont++;
            }
            if($i == $num){
                $sql .= ";"; // si es que se llega al final, termina la consulta
            }else{
                $sql .= ", "; // sino se pone una , y se continua.
            }
        }
 
        if($cont &lt; 2){ // si el usuario no definio ninguna opcion, se elimina la encuesta recien creada, esto es poco probable que suceda ya que la definicion de opciones la haremos con un select, y aqui se seleccionara el valor de 2 por defecto.
            $sql = "DELETE FROM `encuestas` WHERE id = ".$id_encuesta;
            echo "&lt;div class='error'&gt;Tiene que llevar por lo menos 2 opciones.&lt;/div&gt;";
        }else{
            header('location: index.php'); // por ultimo si todo salio bien, redireccionamos al index para que el usuario vea su encuesta recien creada.
        }
        mysqli_query($conex, $sql); // y ejecutamos el query
    }
}
?&gt;
&lt;!DOCTYPE HTML&gt;
&lt;html lang="en-US"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Sistema de Encuestas&lt;/title&gt;
    &lt;link rel="stylesheet" href="estilos.css"&gt;
&lt;/head&gt;
&lt;body&gt;
 
&lt;div class="wrap"&gt;
    &lt;h1&gt;Agregar Encuesta&lt;/h1&gt;
    &lt;form action="" method="post"&gt;
 
    &lt;div class="fl titulo"&gt;
        &lt;label&gt;Titulo:&lt;/label&gt;
        &lt;input name="titulo" type="text" value="&lt;?php echo $titulo; ?&gt;" size="26"&gt;
    &lt;/div&gt;
    &lt;?php
        // esto es simplemente un formulario, pero aqui hacemos una condicion, identificamos si se ha definido un numero de opciones, si es si hacemos un bucle, si es no mostramos el select para definir un numero de opciones, como es obvio por defecto se mostrara el bucle:
    if(isset($_POST['opc'])){
        $num = $_POST['opciones']; // guardamos el valor del numero de opciones
        for($i=1;$i&lt;=$num;$i++){ // hacemos el bucle mostrando los campos respectivos.
    ?&gt;
    &lt;div class="cf"&gt;
        &lt;label&gt;Opcion &lt;?php echo $i; ?&gt;: &lt;/label&gt;
        &lt;input name="opc&lt;?php echo $i; ?&gt;" type="text" size="43"&gt;
    &lt;/div&gt;
    &lt;?php } // aqui termina el bucle ?&gt;
    &lt;div class="cf"&gt;
        &lt;input name="enviar" type="submit" value="Enviar"&gt;
        &lt;input name="opciones" type="hidden" value="&lt;?php echo $num; // le pasamos el valor de num al proceso del formulario mediante un campo oculto. ?&gt;"&gt;
        &lt;input name="cont" type="hidden" value="&lt;?php echo cont; ?&gt;"&gt;
    &lt;/div&gt;
    &lt;?php }else{ // sino se ha definido nro de opciones: ?&gt;
    &lt;div class="fl"&gt;
        &lt;label&gt;Nº de opciones:&lt;/label&gt;
        &lt;select name="opciones"&gt;
            &lt;?php for($i=2;$i&lt;=20;$i++){ // esto es un loop simple, solo para ahorrarnos trabajo, este select tendra de 2 a 20 opciones, si deseas cambiarlo lo puedes hacer aqui. ?&gt;
            &lt;option value="&lt;?php echo $i; ?&gt;"&gt;&lt;?php echo $i; ?&gt;&lt;/option&gt;
            &lt;?php } ?&gt;
        &lt;/select&gt;
    &lt;/div&gt;
 
    &lt;div class="cf"&gt;
        &lt;input name="opc" type="submit" value="Continuar"&gt;
    &lt;/div&gt;
 
      &lt;?php } // Sino se han definido opciones, que en vez de salir el boton de Enviar, salga uno que sea Continuar. ?&gt;
    &lt;a href="index.php" class="volver"&gt;← Volver&lt;/a&gt;
    &lt;/form&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</div>



<p>Por ultimo, agregar.php en sus dos fases:</p>



<div class="wp-block-image">
<figure class="aligncenter"><img width="686" height="450" class="wp-image-5910" src="https://webtursos.s3.amazonaws.com/web/files/encuestas_agregar1.jpg" alt="" srcset="https://tursos.com/wp-content/uploads/encuestas_agregar1.jpg 686w, https://tursos.com/wp-content/uploads/encuestas_agregar1-300x196.jpg 300w" sizes="(max-width: 686px) 100vw, 686px" /></figure>
</div>



<div class="wp-block-image">
<figure class="aligncenter"><img width="685" height="550" class="wp-image-5911" src="https://webtursos.s3.amazonaws.com/web/files/encuestas_agregar2.jpg" alt="" srcset="https://tursos.com/wp-content/uploads/encuestas_agregar2.jpg 685w, https://tursos.com/wp-content/uploads/encuestas_agregar2-300x240.jpg 300w" sizes="(max-width: 685px) 100vw, 685px" /></figure>
</div>


<hr class="wp-block-separator" />


<h2>Posibles mejoras</h2>



<p>Dentro de las posibles mejoras que se le podemos hacer al sistema, esta la creación de nuevas encuestas (agregar.php) detrás de un login, otra adición seria la de impedir votaciones consecutivas bloqueando la IP o por cookies.</p>



<p>Si no entendiste alguna parte o te sale algún error, házmela saber en los comentarios y recuerda que puedes bajarte el código fuente desde este <a href="https://webtursos.s3.amazonaws.com/web/source/como-hacer-un-sistema-de-encuestas-con-php-y-mysql.zip">enlace</a>.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/como-hacer-un-sistema-de-encuestas-con-php-y-mysql/">Como Hacer un Sistema de Encuestas con PHP y MySQL</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tursos.com/como-hacer-un-sistema-de-encuestas-con-php-y-mysql/feed/</wfw:commentRss>
			<slash:comments>101</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5802</post-id>	</item>
		<item>
		<title>Traducir la Función date() de PHP al Español</title>
		<link>https://tursos.com/traducir-la-funcion-date-de-php-al-espanol/</link>
					<comments>https://tursos.com/traducir-la-funcion-date-de-php-al-espanol/#comments</comments>
		
		<dc:creator><![CDATA[Josue Ochoa]]></dc:creator>
		<pubDate>Sat, 10 Nov 2012 08:28:43 +0000</pubDate>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">https://tursos.com/?p=5680</guid>

					<description><![CDATA[<p>En este tutorial veremos como traducir y formatear de forma practica la fecha que nos proporciona la función date() de PHP.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/traducir-la-funcion-date-de-php-al-espanol/">Traducir la Función date() de PHP al Español</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></description>
										<content:encoded><![CDATA[


<p>En este tutorial veremos como traducir y formatear de forma practica la fecha que nos proporciona la función date() de PHP.</p>



<p>La función <a href="http://php.net/manual/es/function.date.php" target="_blank" rel="noopener noreferrer">date()</a> de PHP nos sirve para mostrar la fecha actual (obtenida del ordenador del cliente), pero el problema es que esta solo se muestra en inglés, esto no es un problema si queremos que el formato de la fecha sea solo en numeros (10-11-2012), sin embargo en ocasiones queremos mostrarla de forma mas elaborada por ej: Sabado, 10 de Noviembre de 2012, es alli donde viene el problema.</p>



<p>Para solucionarlo vamos a usar un método que considero es el mas practico y seguro que funcione, lo que haremos sera guardar los valores en variables, pasarlos por una condición y por ultimo reemplazarlos por su valor traducido.</p>



<p>Dividimos cada elemento de la fecha y lo guardamos en variables:</p>


<div class="wp-block-syntaxhighlighter-code language-php"><pre class="brush: php; title: ; notranslate">
$dia=date(&quot;l&quot;); // Saturday

$mes=date(&quot;F&quot;); // November

$ano=date(&quot;Y&quot;); // 2012
</pre></div>


<p>En los comentarios esta lo que resultaria en cada caso (si no entiendes esos parámetros te recomiendo leas la <a href="http://php.net/manual/es/function.date.php" target="_blank" rel="noopener noreferrer">documentación</a>), ahora lo que haremos sera de acuerdo al resultado que obtengamos mediante una condición reemplazar ese valor de la variable:</p>


<div class="wp-block-syntaxhighlighter-code language-php"><pre class="brush: php; title: ; notranslate">
$dia = date(&quot;l&quot;);

if ($dia == &quot;Monday&quot;) $dia = &quot;Lunes&quot;;
if ($dia == &quot;Tuesday&quot;) $dia = &quot;Martes&quot;;
if ($dia == &quot;Wednesday&quot;) $dia = &quot;Miércoles&quot;;
if ($dia == &quot;Thursday&quot;) $dia = &quot;Jueves&quot;;
if ($dia == &quot;Friday&quot;) $dia = &quot;Viernes&quot;;
if ($dia == &quot;Saturday&quot;) $dia = &quot;Sabado&quot;;
if ($dia == &quot;Sunday&quot;) $dia = &quot;Domingo&quot;;

$mes=date(&quot;F&quot;);

if ($mes == &quot;January&quot;) $mes = &quot;Enero&quot;;
if ($mes == &quot;February&quot;) $mes = &quot;Febrero&quot;;
if ($mes == &quot;March&quot;) $mes = &quot;Marzo&quot;;
if ($mes == &quot;April&quot;) $mes = &quot;Abril&quot;;
if ($mes == &quot;May&quot;) $mes = &quot;Mayo&quot;;
if ($mes == &quot;June&quot;) $mes = &quot;Junio&quot;;
if ($mes == &quot;July&quot;) $mes = &quot;Julio&quot;;
if ($mes == &quot;August&quot;) $mes = &quot;Agosto&quot;;
if ($mes == &quot;September&quot;) $mes = &quot;Setiembre&quot;;
if ($mes == &quot;October&quot;) $mes = &quot;Octubre&quot;;
if ($mes == &quot;November&quot;) $mes = &quot;Noviembre&quot;;
if ($mes == &quot;December&quot;) $mes = &quot;Diciembre&quot;;

$ano = date(&quot;Y&quot;);
</pre></div>


<p>Algo mas que añadir seria una variable mas a la cual llamaremos $dia2 esta almacenara el valor del dia pero en numeros y no sera traducida ya que no es necesario:</p>


<div class="wp-block-syntaxhighlighter-code language-php"><pre class="brush: php; title: ; notranslate">
$dia2 = date(&quot;d&quot;);
</pre></div>


<p>Ya teniendo esto podemos armar nuestra fecha como nos plazca:</p>


<div class="wp-block-syntaxhighlighter-code language-php"><pre class="brush: php; title: ; notranslate">
echo &quot;$dia, $dia2 de $mes de $ano&quot;;
</pre></div>


<p>Lo que resultaria en:</p>



<p><em>Sábado, 10 de Noviembre de 2012</em></p>



<p>El mayor inconveniente que le veo a esta solución es el tamaño del código, por eso te recomendaria cuando lo uses guardarlo en un archivo aparte y llamarlo mediante un include o un require.</p>


<hr class="wp-block-separator" />


<h3>Porque no usar setlocale + strftime</h3>



<p>El problema de usar este metodo es que setlocale utiliza un recurso del sistema operativo, el cual puede variar de acuerdo al OS que este usando el cliente, por consiguiente la funcion podria no funcionar siempre.</p>


<hr class="wp-block-separator" />


<p>Espero te haya servido este pequeño tutorial, puedes bajarte el código fuente desde este <a href="/demo/fechaphp/codigo.zip" target="_blank" rel="noopener noreferrer">enlace</a> y no olvides que si tienes alguna pregunta o duda hazmela saber en los comentarios que con gusto te asistiré en lo que pueda.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/traducir-la-funcion-date-de-php-al-espanol/">Traducir la Función date() de PHP al Español</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tursos.com/traducir-la-funcion-date-de-php-al-espanol/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5680</post-id>	</item>
		<item>
		<title>Como Hacer un Formulario de Contacto IV: Almacenar en Base de Datos MySQL con PHP</title>
		<link>https://tursos.com/como-hacer-un-formulario-de-contacto-iv-almacenar-en-base-de-datos-mysql-con-php/</link>
					<comments>https://tursos.com/como-hacer-un-formulario-de-contacto-iv-almacenar-en-base-de-datos-mysql-con-php/#comments</comments>
		
		<dc:creator><![CDATA[Josue Ochoa]]></dc:creator>
		<pubDate>Tue, 23 Oct 2012 19:24:18 +0000</pubDate>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">https://tursos.com/?p=5649</guid>

					<description><![CDATA[<p>En esta parte veremos como almacenar los valores ingresados por el usuario en nuestro formulario y almacenarlos en una base de datos MySQL usando PHP.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/como-hacer-un-formulario-de-contacto-iv-almacenar-en-base-de-datos-mysql-con-php/">Como Hacer un Formulario de Contacto IV: Almacenar en Base de Datos MySQL con PHP</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class='infotuto'><a href="https://webtursos.s3.amazonaws.com/web/source/cf_db.zip" class="button" target="_blank" title="Descargate el codigo del tutorial"><div class="inner">Descargar</div></a></div>



<div id="serie">
<ul>
<li><a title="Como hacer un formulario de contacto I: HTML y CSS" href="https://tursos.com/tutoriales/html-css/como-hacer-un-formulario-de-contacto-i-html-y-css" target="_blank" rel="alternate noopener noreferrer">Como hacer un formulario de contacto I: HTML y CSS</a></li>
<li><a title="Como hacer un formulario de contacto II: Validar con jQuery" href="https://tursos.com/tutoriales/javascript/como-hacer-un-formulario-de-contacto-ii-validar-con-jquery" target="_blank" rel="alternate noopener noreferrer">Como hacer un formulario de contacto II: Validar con jQuery</a></li>
<li><a title="Como hacer un formulario de contacto III: Validar y enviar con PHP" href="https://tursos.com/tutoriales/php/como-hacer-un-formulario-de-contacto-iii-validar-y-enviar-con-php" target="_blank" rel="alternate noopener noreferrer">Como hacer un formulario de contacto III: Validar y enviar con PHP</a></li>
<li class="current"><a title="Como hacer un formulario de contacto IV: Almacenar en base de datos MySQL con PHP" href="https://tursos.com/tutoriales/php/como-hacer-un-formulario-de-contacto-iv-almacenar-en-base-de-datos-mysql-con-php" target="_blank" rel="alternate noopener noreferrer">Como hacer un formulario de contacto IV: Almacenar en base de datos MySQL con PHP</a></li>
</ul>
</div>



<p>En esta parte veremos como almacenar los valores ingresados por el usuario en nuestro formulario y almacenarlos en una base de datos MySQL usando PHP para ello, vamos a utilizar el mismo codigo del <a href="https://tursos.com/tutoriales/php/como-hacer-un-formulario-de-contacto-iii-validar-y-enviar-con-php" target="_blank" rel="noopener noreferrer">tutorial anterior</a>.</p>



<h2>1. Antes de empezar</h2>



<p><strong>Ya que vamos a trabajar con PHP, es necesario que tengas instalado en tu sistema un servidor local que soporte PHP.</strong></p>



<div class="wp-container-3 wp-block-columns has-2-columns">
<div class="wp-container-1 wp-block-column"><div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
CREATE TABLE `cf` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `asunto` varchar(255) NOT NULL,
  `mensaje` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
</pre></div></div>



<div class="wp-container-2 wp-block-column">
<p>Lo primero que vamos a hacer es crear una tabla con los campos del formulario, si haz modificado el formulario añadiendole o quitandole campos, tendras que hacer lo mismo aqui, el siguiente codigo es un SQL que podemos ejecutar desde phpMyAdmin o ingresarlo manualmente si no disponimos de esa herramienta:</p>



<p>Le vamos a poner &#8216;cf&#8217; (contact form) a la tabla y definimos los campos, primero id que va a ser la llave primaria y con auto_increment y luego los campos del formulaio.</p>
</div>
</div>



<p>Ahora vamos a crear un nuevo archivo donde se van almacenar los datos de conexión a la base de datos, a este le pondremos conexion.php:</p>



<figure class="wp-block-image"><img width="660" height="211" class="wp-image-5652" src="https://webtursos.s3.amazonaws.com/web/files/conexionphp.jpg" alt="" srcset="https://tursos.com/wp-content/uploads/conexionphp.jpg 660w, https://tursos.com/wp-content/uploads/conexionphp-300x95.jpg 300w" sizes="(max-width: 660px) 100vw, 660px" /></figure>



<p>El contenido de este archivo tiene que ser asi:</p>


<div class="wp-block-syntaxhighlighter-code language-php"><pre class="brush: php; title: ; notranslate">
&lt;?php

$host = 'localhost';
$usuario = 'root';
$pass = 'root';

$conn = mysql_connect($host, $usuario, $pass) or die ('Error conectando a la base de datos');

$bdnombre = 'cf';
mysql_select_db($bdnombre);
</pre></div>


<p>Allí definiremos las credenciales de conexión a MySQL, en caso de trabajar en un servidor local casi siempre son esos (localhost, root, root).</p>



<h2>2. index.php</h2>



<p>Abrimos este archivo y modificamos la parte de PHP, lo primero sera incluir a conexion.php, en esta ocasion vamos a usar require, ya que es necesario que ese archivo este presente:</p>


<div class="wp-block-syntaxhighlighter-code language-php line-numbers"><pre class="brush: php; title: ; notranslate">
&lt;?php
        require(&quot;conexion.php&quot;);

        if(isset($_POST&#091;'boton'])){
            if($_POST&#091;'nombre'] == ''){
                $error1 = '&lt;span class=&quot;error&quot;&gt;Ingrese su nombre&lt;/span&gt;';
            }else if($_POST&#091;'email'] == '' or !preg_match(&quot;/^&#091;a-zA-Z0-9_\.\-]+@&#091;a-zA-Z0-9\-]+\.&#091;a-zA-Z0-9\-\.]+$/&quot;,$_POST&#091;'email'])){
                $error2 = '&lt;span class=&quot;error&quot;&gt;Ingrese un email correcto&lt;/span&gt;';
            }else if($_POST&#091;'asunto'] == ''){
                $error3 = '&lt;span class=&quot;error&quot;&gt;Ingrese un asunto&lt;/span&gt;';
            }else if($_POST&#091;'mensaje'] == ''){
                $error4 = '&lt;span class=&quot;error&quot;&gt;Ingrese un mensaje&lt;/span&gt;';
            }else{
                $dest = &quot;tu@email.com&quot;; //Email de destino
                $nombre = $_POST&#091;'nombre'];
                $email = $_POST&#091;'email'];
                $asunto = $_POST&#091;'asunto']; //Asunto
                $cuerpo = $_POST&#091;'mensaje']; //Cuerpo del mensaje
                //Cabeceras del correo
                $headers = &quot;From: $nombre &lt;$email&gt;\r\n&quot;; //Quien envia?
                $headers .= &quot;X-Mailer: PHP5\n&quot;;
                $headers .= 'MIME-Version: 1.0' . &quot;\n&quot;;
                $headers .= 'Content-type: text/html; charset=iso-8859-1' . &quot;\r\n&quot;; //

                if(mail($dest,$asunto,$cuerpo,$headers)){
                    $result = '&lt;div class=&quot;result_ok&quot;&gt;Email enviado correctamente &lt;img src=&quot;https://tursos.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot;&gt; &lt;/div&gt;';
                    // si el envio fue exitoso reseteamos lo que el usuario escribio:
                    $_POST&#091;'nombre'] = '';
                    $_POST&#091;'email'] = '';
                    $_POST&#091;'asunto'] = '';
                    $_POST&#091;'mensaje'] = '';

                }else{
                    $result = '&lt;div class=&quot;result_fail&quot;&gt;Hubo un error al enviar el mensaje &lt;img src=&quot;https://tursos.com/wp-includes/images/smilies/icon_sad.gif&quot; alt=&quot;:(&quot; class=&quot;wp-smiley&quot;&gt; &lt;/div&gt;';

                }
            }
        }
    ?&gt;
</pre></div>


<p>Ahora nos movemos hasta la linea 34 luego de la parte donde se hace la condicional si envio o no el correo, alli añadimos un salto de linea y ponemos dos lineas en una se va a guardar la consulta SQL que se va ejecutar y la otra va a ir la funcion que la ejecute:</p>


<div class="wp-block-syntaxhighlighter-code language-php line-numbers"><pre class="brush: php; title: ; notranslate">
if(mail($dest,$asunto,$cuerpo,$headers)){

$sql = &quot;INSERT INTO `cf` (`nombre`,`email`,`asunto`,`mensaje`) VALUES ('{$_POST&#091;'nombre']}','{$_POST&#091;'email']}','{$_POST&#091;'asunto']}','{$_POST&#091;'mensaje']}')&quot;; 
mysql_query($sql) or die(mysql_error()); 

$result = '&lt;div class=&quot;result_ok&quot;&gt;Email enviado correctamente :)&lt;/div&gt;';    
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST&#091;'nombre'] = '';
$_POST&#091;'email'] = '';
$_POST&#091;'asunto'] = '';
$_POST&#091;'mensaje'] = '';

}else{
    $result = '&lt;div class=&quot;result_fail&quot;&gt;Hubo un error al enviar el mensaje :(&lt;/div&gt;';   
}
</pre></div>


<p>Y con eso ya tendríamos nuestro formulario funcionando, recuerda que si modificaste los campos haz de hacerlo tambien en la consulta, por ejemplo:</p>


<div class="wp-block-syntaxhighlighter-code language-php"><pre class="brush: sql; title: ; notranslate">
$sql = &quot;INSERT INTO `cf` (`nombre`,`email`,`asunto`,`mensaje`,`campo_z`,`campo_x`,`campo_y`) 
VALUES ('{$_POST&#091;'nombre']}','{$_POST&#091;'email']}','{$_POST&#091;'asunto']}','{$_POST&#091;'mensaje']}','{$_POST&#091;'campo_z']}','{$_POST&#091;'campo_x']}','{$_POST&#091;'campo_y']}')&quot;;
</pre></div>


<p>O en caso tengas el los valores guardados/concatenados en variables:</p>


<div class="wp-block-syntaxhighlighter-code language-php"><pre class="brush: sql; title: ; notranslate">
$sql = &quot;INSERT INTO `cf` (`nombre`,`email`,`asunto`,`mensaje`) 
VALUES ('$nombre','$email','$asunto','$mensaje','$body')&quot;;
</pre></div>


<h2>3. Mejoras de seguridad</h2>



<p>Como vamos a trabajar con bases de datos es recomendable asegurarnos que no nos inyecten el formulario, para eso vamos a usar <a href="https://www.php.net/manual/es/function.mysql-real-escape-string.php" target="_blank" rel="noreferrer noopener">mysql_real_escape_string</a> antes de la consulta mediante un foreach, de esta forma lo hara en todas las variables POST que se hayan ingresado:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: php; title: ; notranslate">
if(mail($dest,$asunto,$cuerpo,$headers)){

    foreach($_POST AS $key =&gt; $value) { 
        $_POST&#091;$key] = mysql_real_escape_string($value); 
    } 

    $sql = &quot;INSERT INTO `cf` (`nombre`,`email`,`asunto`,`mensaje`) VALUES ('{$_POST&#091;'nombre']}','{$_POST&#091;'email']}','{$_POST&#091;'asunto']}','{$_POST&#091;'mensaje']}')&quot;; 
    mysql_query($sql) or die(mysql_error()); 

    $result = '&lt;div class=&quot;result_ok&quot;&gt;Email enviado correctamente :)&lt;/div&gt;';    
    // si el envio fue exitoso reseteamos lo que el usuario escribio:
    $_POST&#091;'nombre'] = '';
    $_POST&#091;'email'] = '';
    $_POST&#091;'asunto'] = '';
    $_POST&#091;'mensaje'] = '';

} else {
    $result = '&lt;div class=&quot;result_fail&quot;&gt;Hubo un error al enviar el mensaje :(&lt;/div&gt;';   
}
</pre></div>


<h2>4. Código Final</h2>


<div class="wp-block-syntaxhighlighter-code language-php"><pre class="brush: php; title: ; notranslate">
 &lt;?php
    require('conexion.php'); 

    if(isset($_POST&#091;'boton'])){
        if($_POST&#091;'nombre'] == ''){
            $error1 = '&lt;span class=&quot;error&quot;&gt;Ingrese su nombre&lt;/span&gt;';
        }else if($_POST&#091;'email'] == '' or !preg_match(&quot;/^&#091;a-zA-Z0-9_\.\-]+@&#091;a-zA-Z0-9\-]+\.&#091;a-zA-Z0-9\-\.]+$/&quot;,$_POST&#091;'email'])){
            $error2 = '&lt;span class=&quot;error&quot;&gt;Ingrese un email correcto&lt;/span&gt;';
        }else if($_POST&#091;'asunto'] == ''){
            $error3 = '&lt;span class=&quot;error&quot;&gt;Ingrese un asunto&lt;/span&gt;';
        }else if($_POST&#091;'mensaje'] == ''){
            $error4 = '&lt;span class=&quot;error&quot;&gt;Ingrese un mensaje&lt;/span&gt;';
        }else{
            $dest = &quot;tu@email.com&quot;; //Email de destino
            $nombre = $_POST&#091;'nombre'];
            $email = $_POST&#091;'email'];
            $asunto = $_POST&#091;'asunto']; //Asunto
            $cuerpo = $_POST&#091;'mensaje']; //Cuerpo del mensaje
            //Cabeceras del correo
            $headers = &quot;From: $nombre &lt;$email&gt;\r\n&quot;; //Quien envia?
            $headers .= &quot;X-Mailer: PHP5\n&quot;;
            $headers .= 'MIME-Version: 1.0' . &quot;\n&quot;;
            $headers .= 'Content-type: text/html; charset=iso-8859-1' . &quot;\r\n&quot;; //

            if(mail($dest,$asunto,$cuerpo,$headers)){

                foreach($_POST AS $key =&gt; $value) {
                    $_POST&#091;$key] = mysql_real_escape_string($value);
                } 

                $sql = &quot;INSERT INTO `cf` (`nombre`,`email`,`asunto`,`mensaje`) VALUES ('{$_POST&#091;'nombre']}','{$_POST&#091;'email']}','{$_POST&#091;'asunto']}','{$_POST&#091;'mensaje']}')&quot;;
                mysql_query($sql) or die(mysql_error()); 

                $result = '&lt;div class=&quot;result_ok&quot;&gt;Email enviado correctamente &lt;img src=&quot;https://tursos.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot;&gt; &lt;/div&gt;';
                // si el envio fue exitoso reseteamos lo que el usuario escribio:
                $_POST&#091;'nombre'] = '';
                $_POST&#091;'email'] = '';
                $_POST&#091;'asunto'] = '';
                $_POST&#091;'mensaje'] = '';

            }else{
                $result = '&lt;div class=&quot;result_fail&quot;&gt;Hubo un error al enviar el mensaje &lt;img src=&quot;https://tursos.com/wp-includes/images/smilies/icon_sad.gif&quot; alt=&quot;:(&quot; class=&quot;wp-smiley&quot;&gt; &lt;/div&gt;';
            }
        }
    }
?&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;Contacto&lt;/title&gt;
        &lt;link rel='stylesheet' href='estilos.css'&gt;
        &lt;script src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'&gt;&lt;/script&gt;
        &lt;script src='funciones.js'&gt;&lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;form class='contacto' method='POST' action=''&gt;
            &lt;div&gt;&lt;label&gt;Tu Nombre:&lt;/label&gt;&lt;input type='text' class='nombre' name='nombre' value='&lt;?php echo $_POST&#091;'nombre']; ?&gt;'&gt;&lt;?php echo $error1 ?&gt;&lt;/div&gt;
            &lt;div&gt;&lt;label&gt;Tu Email:&lt;/label&gt;&lt;input type='text' class='email' name='email' value='&lt;?php echo $_POST&#091;'email']; ?&gt;'&gt;&lt;?php echo $error2 ?&gt;&lt;/div&gt;
            &lt;div&gt;&lt;label&gt;Asunto:&lt;/label&gt;&lt;input type='text' class='asunto' name='asunto' value='&lt;?php echo $_POST&#091;'asunto']; ?&gt;'&gt;&lt;?php echo $error3 ?&gt;&lt;/div&gt;
            &lt;div&gt;&lt;label&gt;Mensaje:&lt;/label&gt;&lt;textarea rows='6' class='mensaje' name='mensaje'&gt;&lt;?php echo $_POST&#091;'mensaje']; ?&gt;&lt;/textarea&gt;&lt;?php echo $error4 ?&gt;&lt;/div&gt;
            &lt;div&gt;&lt;input type='submit' value='Envia Mensaje' class='boton' name='boton'&gt;&lt;/div&gt;
            &lt;?php echo $result; ?&gt;
        &lt;/form&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre></div>


<p>Con eso hemos terminado esta ultima parte del formulario (por ahora), recuerda que puedes descargarte el código fuente en este <a href="https://webtursos.s3.amazonaws.com/web/source/cf_db.zip">enlace</a>.</p>



<p>Si no entendiste una parte o tienes alguna duda, házmela saber en los comentarios.</p>
<p>La entrada <a rel="nofollow" href="https://tursos.com/como-hacer-un-formulario-de-contacto-iv-almacenar-en-base-de-datos-mysql-con-php/">Como Hacer un Formulario de Contacto IV: Almacenar en Base de Datos MySQL con PHP</a> se publicó primero en <a rel="nofollow" href="https://tursos.com">Tursos</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tursos.com/como-hacer-un-formulario-de-contacto-iv-almacenar-en-base-de-datos-mysql-con-php/feed/</wfw:commentRss>
			<slash:comments>90</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5649</post-id>	</item>
	</channel>
</rss>