miércoles, 21 de diciembre de 2016

Tildes de PHP a MYSQL



Cuando intentas enviar datos desde un formulario a PHP y luego a MYSQL, puede ocurrir que las tildes aparezcan en la base de datos como símbolos raros.

Para superar eso prueba cambiando la cabecera del HTML del formulario que manda los datos a:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Y luego codifica el HTML del formulario (por ejemplo, en el editor Notepad++) como:
ANSI.

Si no funciona, lee este otro post que puse sobre este tema. Sobre todo revisa los comentarios, dónde agregué varias pruebas que hice.

lunes, 19 de diciembre de 2016

Buscar con PHP fecha en un rango o "between"



Perdí un par de horas en esto :(

Comparar fechas es distinto comparar cadenas de texto.
Es decir no se puede decir:

if ("2016-12-24" == $hoy){echo "La fecha es la misma";)

Se tienen, primero, que convertir las fechas a fechas Unix.
Para eso se usa la función: strtotime

Bueno, alguien amablemente ya hizo una función para eso, que es parecida a between en mysql, y aquí se las pego:

function check_in_range($start_date, $end_date, $date_from_user)
{
  // Convert to timestamp
  $start_ts = strtotime($start_date);
  $end_ts = strtotime($end_date);
  $user_ts = strtotime($date_from_user);

  // Check that user date is between start & end
  return (($user_ts >= $start_ts) && ($user_ts <= $end_ts));
}

Se usa así:

$encontro_la_fecha = check_in_range($fecha_llegada, $fecha_salida, $fechapasando);
if($encontro_la_fecha)
{
echo "Encontró la fecha en el rango buscado";
}
else
{
echo "NO encontró la fecha en el rango buscado";
}

Convertir consulta MYSQL en array PHP (arreglo php)


A veces puedes querer pasar una consulta mysql a un array de PHP (arreglo php), para procesarla luego con php y no volver a hacer consultas a la base de datos.

Esto te puede servir:

### PEDIMOS LOS DATOS VÍA MYSQL
$sql_resultado = mysql_query($sql);


### PASANDO EL RESULTADO A UN ARRAY
while( $fila = mysql_fetch_assoc( $sql_resultado )){
    $nuevo_array[] = $fila;
}

### IMPRIMIENDO EL ARRAY Y TODOS SUS VALORES
echo '<pre>';
print_r($nuevo_array);
echo  '</pre>';

### RECORRIENDO EL ARRAY
foreach($nuevo_array as $fila)
{
echo "Los datos del registro son: ";
foreach($fila as $columna)
{
echo $columna ." ";
}
echo "<br>";
}

### BUSCANDO DENTRO DEL ARRAY
$encontrados = array();
$palabra_a_buscar = "2016-12-28";
foreach($nuevo_array as $clave=>$valor){
$indice = array_search($palabra_a_buscar,$valor);
if($indice){
$encontrados[]=$valor;
}
}

### IMPRIMIENDO LO ENCONTRADO QUE AHORA TAMBIÉN ESTÁ EN UN ARRAY
echo '<pre>';
print_r($encontrados);
echo  '</pre>';

:)


chaveztoro

lunes, 28 de noviembre de 2016

Nos ven correctamente las tildes en AJAX

Este es un pequeño código para llamar a un php vía AJAX y que el contenido muestre correctamente las tildes en la página dónde se cargan los datos.

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>

<!--    JQUERY LLAMADO A PHP    -->
<script>
//Configuramos AJAX para que muestre correctamente las tildes.
$.ajaxSetup({
'beforeSend' : function(xhr) {
try{
xhr.overrideMimeType('text/html; charset=iso-8859-1');
}
catch(e){

}
}});

$(document).ready(function(){
    traerHTML()
    //CARGAMOS EL ARCHIVO
})
function traerHTML(){ //FUNCION PARA MOSTRAR EL CONTENIDO
            $.post("codigo.php",
function(data)
{
            $("#contenido").html(data);
            });
}
</script>

Contenedor dónde se imprimirá:
<article id="contenido"></article>

jueves, 4 de agosto de 2016

Recorrer arreglos (array) en PHP

Con foreach

Si tienes un arreglo de este tipo:
$array = array(1234);

Lo puedes recorrer así:

foreach ($array as $valor) {
   
echo "Valor: $valor<br />\n";
}


Si deseas ver el número de la clave:
foreach ($array as $clave => $valor) {
    echo 
"Clave: $clave; Valor: $valor<br />\n";
}


Con while
Es para cuando sabes el número de veces que quieres recorrer el arreglo:

$i 1;
while ($i <= 10){
    echo 
$i;
    
$i++;
}

Un solo resultado: Con list() y mysql_fetch_row() 

Alguna vez te puede ocurrir que sea una consulta MYSQL con un sólo resultado.
En ese caso puedes usar list() y mysql_fetch_row() para obtener ese único resultado:

$sql = "SELECT email FROM usuarios WHERE id = 10";
$resultado = mysql_query($sql,$link);
$num = mysql_num_rows($resultado);

//Si sólo hay un email
if($num == 1){list($email_de_cliente) = mysql_fetch_row($resultado);}

echo "El email del clientes es: $email_de_cliente";


Con varios registros en el resultado:
while($row = mysql_fetch_array($resultado )){
echo $row['email'];
}

Contando repeticiones en un array:
Si tienes un arreglo como este: $array = array("ACCESOPERU.COM", "ACTIVATUHOSTING.COM",
"AREADESOPORTE.COM", "ACTIVATUHOSTING.COM",
"ACTIVATUHOSTING.COM", "AREADESOPORTE.COM"); Puedes usar la función array_count_values para contar los valores repetidos. Ejemplo:
echo "<pre>"; print_r(array_count_values($array)); echo "</pre>";

El resultado será:
Array ( [ACCESOPERU.COM] => 1 [ACTIVATUHOSTING.COM] => 3 [AREADESOPORTE.COM] => 2 )

Reordenar aleatoriamente un array:
Para eso puedes usar shuffle(). Y para obtener el primer elemento ordenado aleatoriamente current():
shuffle($array);
$primer_elemento_aleatorio = current($array);

Más sobre current() click aquí.
Dividir un array en subarrays:
Para eso puedes usar array_chunk:
$array_en_pares = array_chunk($array, 2); En este caso el 2 indica que se dividirá el array en sub arrays de 2 elementos.
Borrar un elemento de un array:
Para eso puedes usar unset:
unset($array[2]); En este caso borra el tercer elemento del array.


Borrar ÚLTIMO elemento de un array:
Para eso puedes usar array_pop:
$ultimo_elemento = array_pop($array); En este caso el array pierde el último elemento y ese elemento es asignado a $ultimo_elemento.

domingo, 31 de julio de 2016

Manipulando cadenas de texto y HTML en PHP

Una cosa que siempre hago es traer texto desde algún sitio web y luego extraer algún fragmento del mismo.

Y siempre me olvido de qué funciones PHP se usan. Así que se las dejo aquí.

Para traer el HTML de una página web

$url = "http://accesoperu.com";
$contenido = file_get_contents($url);
echo $contenido;

En la variable $contenido estará el HTML.


Para codificar como cadena URL al pasarla por GET

Como dice el manual de PHP: "Devuelve una cadena en la que todos los caracteres no-alfanuméricos excepto -_. han sido reemplazados con un signo de porcentaje (%) seguido por dos dígitos hexadecimales y los espacios son codificados como signos de suma (+)".

$url = urlencode($url );

Para cortar el texto por alguna palabra o etiqueta

$divisor = "<title>";
list($elemento1, $elemento2) = explode($divisor, $contenido);

La función explode retorna un arreglo (array). Así, usará <title> para dividir el texto. En este caso, dado que <title> sólo parece una vez en el HTML, creará dos fragmentos. El primero: $elemento1, contiene la parte anterior a <title> primera parte del HTML (en este caso) y $elemento2 el resto de la página, o lo que había después de <title>.

Algo importante.
Si usas un divisor que aparece varias veces en el texto o HTML (en este caso), explode usa el divisor para partir el texto en tantos fragmentos como veces el divisor aparezca.

Por ejemplo, en este caso, corta cada párrafo usando la etiqueta HTML de párrafo:
$divisor = "<p>";
$fragmentos = explode($divisor, $contenido);

En el caso que esta página web tuviera 5 párrafos y quisiera ver el tercero, bastaría con escribir:
echo $fragmentos[2];

Recuerda que  $fragmentos[0], sería el primer fragmento.


Quitar todas las etiquetas HTML menos...

Para eso usaremos strip_tags. La que aparecen entre las comillas simples, son la que dejarán.
En este caso se dejarán las etiquetas HTML de párrafo, encabezados (1,2 y 3) negritas, iframes e imágenes.

$contenido_limpio = strip_tags($contenido, '<p><b><h1><h2><h3><strong><iframe><img>');


Buscando una palabra en el texto

Para eso usamos la función stripos o strpos para php 4
Por ejemplo:

if($posicion = stripos("ACCESOPERU.COM. Diseño web y hosting corporativo", "Corporativo") !== FALSE) {
  echo "Palabra encontrada en la posición $posicion";
}

Tomando un fragmento

Para eso se usa substr.

Ejemplo, para obtener los primeros 10 caracteres:

$frase = "ACCESOPERU.COM";
$resultado = substr($frase, 0, 10);
echo $resultado;

Imprimirá: ACCESOPERU

Encontrar y cambiar

Para eso se usa str_replace.
Por ejemplo, quitarle los espacios en banco a una frase:

$frase_sin_espacios = str_replace(' ', '', $frase);

Por ejemplo, con un array:

$fragmento  = "ACCESOPERU.COM: Diseño web y Hosting corporativo";
$buscada = array("Diseño web", "Hosting corporativo");
$reemplazo   = array("Capacitación para webmasters", "Desarrollo de software ONLINE");

$resultado = str_replace($buscada, $reemplazo, $fragmento);
echo $resultado;

Imprimirá: ACCESOPERU.COM: Capacitación para webmasters y Desarrollo de software ONLINE


Texto en varia líneas desde MySQL

Para eso se usa explode y el separador PHP_EOL.

$todas_las_lineas = explode( PHP_EOL , $texto_de_DB);
foreach($todas_las_lineas as $linea) {
echo "$linea<br>";
}



Espero que te sea de utilidad.