Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas
Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas

miércoles, 22 de agosto de 2012

Utilidades para Joomla


En este sitio podrán encontrar varias utilidades para su sitio con Joomla...

http://www.theartofjoomla.com/


miércoles, 27 de abril de 2011

Error 1312 (0A000): PROCEDURE can't return a result set in the given context.

Cuando se conecte a mysql y pretenda utilizar un procedimiento almacenado, debe pasar un especial Flag para MySQL a través del comando connect, de lo contrario no obtendrá los resultados devueltos, y dará lugar a este error:
Error 1312 (0A000): PROCEDURE x can't return a result set in the given context.

Para corregir esto, cambie su cadena de conexion, adicionando ",false,131072", o ",false,65536" en los últimos 2 campos en:

$this->con = mysql_connect(host,user,password,false,65536);

según la documentación de mysql, se debe activar CLIENT_MULTI_RESULTS, sin embargo, al activar CLIENT_MULTI_STATEMENTS automáticamente se activa el primero.

ver en php.net o php.net y en dev.mysql.com

jueves, 31 de marzo de 2011

Pasar array de PHP a JavaScript

Bueno primero que todo describiré un poco el entorno para entrar en materia,

Entorno
Entonces tenemos una página en php base.php en la cual mediante javascript, envío parametros por GET para abrir otra pagina resultado.php

El problema
Desde base.php, tengo un select múltiple así:
{script language="java script" src="...reporte.js"}{/script}...

...{span id="selMultiple"}Sitio: {/span}
{select multiple size=2 name="site[]" }
{option value="0"}[Todas]{/option}
{option value=B}B{/option}
{option value=J}J{/option}
{option value=V}V{/option}{/select}


La idea es realizar una selección múltiple desde la página base.php y a partir de ésta generar una consulta SQL que me permíta construir una clausula "IN", entonces tengo la función

{div}{input type="button" onClick="abre('$site');" value="Consultar"}{/div}

que envía los parámetros a...

{function abre(site){
url="resultado.php?site="+site+";
window.open(url,"Reporte","");
}

Aquí el problema, pues la selección múltiple de "selMultiple" crea en php un arreglo con los valores seleccionados, y no es posible pasar este arreglo "directamente" a javascript para enviarlo a resultado.php, entonces...

Mi Solución

Para realizar la consulta desde base.php y que la muestre...
Capturamos la variable con...

$site=$_GET['site'];

Luego creamos un string compatible con la sintaxis de SQL para la clausula "IN" así:

foreach ($site as $data){
$tmp.="'".$data."',";
}
$tmp=substr($tmp, 0, -1);

//resultado de $tmp para la selección de B y J será algo así 'B','J'
$sql="select * from tabla t where t.site in (".$tmp.")";
//resultado para $sql sería: "select * from tabla t where t.site in ('B','J')"

Con ésto queda lista la consulta para ver el reporte en base.php...

pero debo imprimirlo en resultado.php con Excel utilizando las etiquetas

header ("Content-type: application/x-msexcel");
$filename="Reporte.xls";
header("Content-Disposition: filename=\"$filename\";");


Entonces... lo fundamental... pasar la info del arreglo a la función de JavasCript abre()
para esto entonces utilizamos

$tmp=implode(":",$site);
//donde el resultado para $tmp será B:J
{?php
{div}{input type="button" onClick="abre('$tmp');" value="Consultar"}{/div}
?}
//donde el html quedará {div}{input type="button" onClick="abre('B:J');" value="Consultar"}{/div}

De esta forma los valores son pasados a la función... sin ningún problema, y solo restaría añadir en resultado.php

$site=$_GET['site'];
{?php
$site=explode(":",$site);
foreach ($site as $data)
{
$tmp.="'".$data."',";
}
$tmp=substr ($tmp, 0, -1);// quita la última "," para construir la sentencia adecuada
?}


//resultado de $tmp para la selección de B y J será algo así 'B','J'
$sql="select * from tabla t where t.site in (".$tmp.")";
//resultado para $sql sería: "select * from tabla t where t.site in ('B','J')"

jueves, 8 de abril de 2010

Error Warning: move_uploaded_file al subir archivos al servidor localhost+apache+php mediante un formulario

Bueno, el tema es como subir archivos a un servidor, mediante un formulario, sin embargo, luego de hacerlo todo, el servodor me arrojaba lo sigiente aviso:

"Warning: move_uploaded_file(C:/Apache/htdocs/miweb/tmp) [function.move-uploaded-file]: failed to open stream: Permission denied in C:\Apache\htdocs\miweb\formEdit.php on line 49

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\tmp\phpA5B6.tmp' to 'C:/Apache/htdocs/miweb/tmp' in C:\Apache\htdocs\miweb\formEdit.php on line 49"

jejeeje lo peor de todo es que he revisado y en ningun lado aprece nada definitivo para solucionarlo, así que aquí les dejo mi aporte por si les sirve...
antes mi configuración: tengo windows 7, apache, php y mysql y he aquí lo que encontré...

1) no es indispensable pero ayuda, revisar en el php.ini que register_globals = on y no off,
2) sobre los permisos de las carpetas en win.. no son problema.
3) en caso de querer modificar o agregar permisos específicos para carpetas en apache, usar


AllowOverride None
Options None
Order deny,allow
Allow from all


ver mas configuraciones...

aunque este tampoco es el problema.
4) ahora retomo el script original...
< ? $destino = "C:/Apache/htdocs/miweb/tmp";
$origen = $_FILES['imagen']['tmp_name'];
move_uploaded_file( $origen, $destino );
? >

existen 2 problemas, por lo menos en windows, no lo he probado en linux, y es que falta agregar "/" al final de la ruta absoluta $destino = ‘C:/Apache/htdocs/miweb/tmp/’;
y además, falta agregar el nombre al archivo, sin esto simpre apareceran los Warnings pues el script intenta escribir en un archivo sin nombre. La linea pues quedará así:
$name=$_FILES['imagen']['name'];
move_uploaded_file( $origen, $destino.$name );
en total,
< ? $destino = 'C:/Apache/htdocs/miweb/tmp/';
$origen = $_FILES['imagen']['tmp_name'];
$name=$_FILES['imagen']['name'];
move_uploaded_file( $origen, $destino.$name );
? >
... así conservamos el nombre original del archivo... Saludos