Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Diabliyo

#621
PHP / Re: Error al subir un archivo !!
18 Abril 2008, 17:02 PM
He puesto los permisos a: 777 y he podido subir la imagen...

shell# chmod -R 0777 imagenes/

Pero como puedo hacerle para no tener a fuerzas el permiso a: 777 y poder subir la imagen ?? y pues a la ves preservar la seguridad por cualquier File Inclusion :D !!

Que puedo hacer ???
#622
Hola:

Ya estuve intentando con move_uploades_file() y copy() y me sigue dando error, no logro subir la imagen :S !!!..

Primeramente les adelanto que la configuracion del PHP.INI de mi servidor es: register_globals= Off. Por lo tanto para manejar archivo subidos debo usar la variable reservada: $_FILES["var"]... El code que uso es el siguiente !!

<?php
function comprobar_extencion_imagen$extensión )
{
/*
image/jpeg Imagen JPEG, JPG
image/png Imagen PNG
image/gif Imagen GIF
*/

if( !strpos$extensión"jpg" ) && !strpos$extensión"jpeg" ) && !strpos$extensión"png" ) && !strpos$extensión"gif" ) )
{
echo "Tipo de extensión/archivo inaceptable.<br>";
return 0;
}
return 1;
}


//... code y mas code..

//si hacemos un 'getcwd()', nos da la siguiente direccion: '/home/miuser/public_html/modulos/'
//y la carpeta de imagenes esta en: '/home/miuser/public_html/imagenes/noticias/'
$path"../imagenes/noticias/";

if( !
comprobar_extencion_imagen$_FILES["imagen_noticia_01"]["type"] ) || !move_uploaded_file$_FILES["imagen_noticia_01"]["tmp_name"], $path.$_FILES["imagen_noticia_01"]["name"] ) )
echo "Problema para subir imagenes al servidor.";


Como resultado al intento de subir la imagen dice: "Problema para subir imagenes al servidor."
#623
Hola:

Gracias por ayuda Hans el Topo, finalmente he corregido el code y ya quedo...

Para los curiosos, aqui les va la solucion:




El procedimiento de insercion teoricamente es el siguiente:

1- realizar una trama con todas las variables y valores.
2- Enviar la trama a una funcion (insertar_bdd( "NOMBRE_TABLE", $trama )) y que desifre la trama para despues insertar.

El PROCEDIMIENTO ANTIGUO ERA:

Generar una trama utilizando como delimitador el simbolo ':', pero conforme la practica y testeo resulto inutil el delimitador, ya que si el usuario generaba un mensaje o titulo que contenga el simbolo ':', la insercion seria un caos y daria error....

<?php

//La trama sera la variable "$valores".
$valores="";
$valores .= "autor=";
$valores .= "'"$_SESSION["log_usr"]. "'";
$valores .= ":";
$valores .= "titulo=";
$valores .= "'"$_POST["titulo_noticia"]. "'";
$valores .= ":";
$valores .= "mensaje=";
$valores .= "'"htmlentities($msgENT_QUOTES). "'";
$valores .= ":";
$valores .= "fecha=";
$valores .= "'"time(). "'";
$valores .= ":menu=";
$valores .= "'"$buf_menu["NOMBRE"]. "'";
$valores .= ":sección=";
$valores .= "'"$buf_sec["NOMBRE"]. "'";

//la tabla se llama NOTICIAS
if( insertar_bdd"NOTICIAS"$valores )==)
echo "Error en la Insercion de los Datos.";
else
echo "Datos Agregados con Exito.";
?>


La SOLUCION AL PROBLEMA es realizar una trama pero sin delimitador, que la trama sea un array, pero donde la palabra clave de cada miembro del arreglo sera el nombre de la variable y pues el valor, seria el valor para dicha variable.

Ejemplo de array comun:
[0]="carlos"
[1]="arturo"


Ejemplo de array con clave/valor:

[nombre1]="carlos"
[nombre2]="arturo"


Asi que generamos una trama mediante arrays, y pasamos la trama a la funcion insetar_bdd( "NOMBRE_TABLA", $trama ). El code seria:

<?php

//La trama sera la variable "$valores".
$valores= array(
"autor"=>"'"$_SESSION["log_usr"]. "'",
"titulo"=>"'"$_POST["titulo_noticia"]. "'",
"mensaje"=>"'"$msg"'",
"fecha"=>"'"time(). "'",
"menu"=>"'"$buf_menu["NOMBRE"]. "'",
"sección"=>"'"$buf_sec["NOMBRE"]. "'" );

//la tabla se llama NOTICIAS
if( insertar_bdd"NOTICIAS"$valores )==)
echo "Error en la Insercion de los Datos.";
else
echo "Datos Agregados con Exito.";
?>


IMPORTANTE !!!
La funcion insertar_bdd() debe ser modificada y quedaria asi:

<?php
function insertar_bdd$base_t$valores )
{
$linkconectar();

if( count($valores)>//existen valores en el array
{
$i=0;
$vars="";
$datos="";

//recorremos para tener los nombres de variables en una '$vars'
//y los valores de las variables en otra '$datos'
while( list($a$b)=each($valores) )
{
$i++;
$vars .= $a;
$datos .= $b;

if( $i!=count($valores) ) //mientras no lleguemos a la ultima variable
{
$datos .= ", ";
$vars .= ", ";
}
}

if( !($respmysql_query"insert into "$base_t" ( "$vars" ) values( "$datos" );"$link )) )
{
echo "<span id=\"letras_error\">Error 03: Problema para Realizar Movimiento/Consulta.";
echo mysql_error(). "</span>";
}
else
{
unset( $valores );
unset( $a );
unset( $b );
unset( $i );
unset( $var );
unset( $datos );
@mysql_close($link);
return $resp;
}
}
else
echo "<span id=\"letras_error\">Error 04: Problema para descifrar datos.</span>";

@mysql_close($link);
return "ERROR";
}
?>
#624
Hola:

Como primer instancia y evitar generacion de variables de mas (por repeticion del delimitado ':')... Es que, dentro de la funcion insertar_bdd() coloque un condicional en donde tome el numero de CAMPOS de la tabla a donde se desea insertar valores, y que este numero de CAMPOS sea igual o menos al numero de valores obtenidos despues de hacer el corte con la funcion: sizeof(($buf= explode( ":", $valores )))...

Pero, no se me ocurre como poder seguir utilizando como delimitador ':' y que el usuario pueda usar este mismo simbolo en sus noticias :( !!

bye bye
#625
Cita de: Hans el Topo en 16 Abril 2008, 00:24 AM
no es problema de la consulta, es problema de lo que haces para enviar la consulta

si no me equivoco separas los campos por el carácter :

y como eso lleva : pués al dividir los trozos de los campos, supongo que creará más valores que campos

el problema radica en esa función  insertar_bdd( "NOTICIAS", $valores )

que no has puesto xD

la solución sería enviarle un array con los valores de los campos en vez de eso separado por caracteres

Asi es mi estimado... creo que para ese rato me cicle demasiado pensando tanto :S !!..

Pero ahora que estoy con mas calma asimilo todo jejeje... Ciertamente el simblo ':' es el que utilizo como delimitador para determinar el numero de valores enviados, despues el simbolo '=' lo utilizo como delimitador para obtener la variable y el valor y asi realizar la insercion en la base de datos...

Aqui te dejo el code de la funcion insertar_bdd(), para ver si puede haber una forma de solucionar el probema sin necesidad de pasar la trama en formato de array y conservar los delimitadores... Porque estamos hablando de un buen de lineas a modificar si es que es necesario pasar la trama en forma de array :(.

function insertar_bdd( $base_t, $valores )
{
$link= conectar();

if( strchr( $valores, ":" ) ) //si existe el  :  tons ahi mas de 1 valor
{
//$valores= str_replace( ":", ",", $valores ); //cambiamos el :  por  ,
$vars="";
$datos="";

$buf= explode( ":", $valores );

//recorremos para tener los nombres de variables en una '$variable'
//y los valores de las variables en otra '$variable'
for( $i=0; $i<sizeof($buf); $i++ )
{
$buf2= explode( "=", $buf[$i] );
$vars .= $buf2[0];
$datos .= $buf2[1];

if( ($i+1)!=sizeof($buf) )
{
$datos .= ", ";
$vars .= ", ";
}
unset($buf2);
}

if( !($resp= mysql_query( "insert into ". $base_t. " ( ". $vars. " ) values( ". $datos. " );", $link )) )
{
echo "<span id=\"letras_error\">Error 03: Problema para Realizar Movimiento/Consulta.";
echo mysql_error(). "</span>";
}
else
{
unset( $valores );
unset( $buf );
unset( $var );
unset( $datos );
@mysql_close($link);
return $resp;
}
}
else if( strchr( $valores, "=" ) ) //entonces solo se desea insertar 1 valor
{
$buf2= explode( "=", $valores[$i] );
$vars .= $buf2[0];
$datos .= $buf2[1];

if( ($i+1)!=sizeof($valores) )
{
$datos .= ", ";
$vars .= ", ";
}

if( !($resp= mysql_query( "insert into ". $base_t. " ( ". $vars. " ) values( ". $datos. " );", $link )) )
{
echo "<span id=\"letras_error\">Error 03: Problema para Realizar Movimiento/Consulta.";
echo mysql_error(). "</span>";
}
else
{
unset( $valores );
unset( $buf2 );
unset( $var );
unset( $datos );
@mysql_close($link);
return $resp;
}
}
else
echo "<span id=\"letras_error\">Error 04: Problema para descifrar Datos para Realizar Consulta.</span>";

@mysql_close($link);
return "ERROR";
}
#626
Hola:

Tengo problemas en cierta parte de mi codigo, en el cual no logro insertar un campo tipo TEXT (mensaje), el resultado al intento de insercion me retorna un error de sintaxis un poco rara :S !!... Ahi les va mas informacion:

Tabla NOTICIAS
//esta es la TABLA
ID bigint(20)
AUTOR varchar(30)
TITULO varchar(30)
MENSAJE text
FECHA bigint(20)
FECHA_MOD bigint(20)
AUTOR_MOD varchar(30)
MENU varchar(40)
sección varchar(40)


Por lo tanto, intento insertar el contenido, asumiendo que el formulario es este:
echo "<form action=\"index.php?id=noticias&mov=agregar_noticia&id_src=". $ctl. "\" method=\"POST\">";
echo "</span></td><tr>";
echo "<td>Titulo: <input type=\"text\" name=\"titulo_noticia\" class=\"estilo_01\"></td><tr>";
echo "<td>Contenido:</td><tr>";
echo "<td><textarea name=\"mensaje_noticia\" class=\"estilo_02\">";
echo "</textarea></td><tr>";
echo "<td align=\"center\"><input type=\"submit\" class=\"boton_01\" value=\"Publicar Noticia\"></td>";
echo "</form>";


Y el texto puesto como ejemplo en el formulario es este:
Titulo: Bienvenido al Sitio !!
Contenido:
Que tal, buen dia !!

Esta es la primer noticia que colgamos debido a la inaguracion del sitio y estreno de nuestra herramienta de softwrae libre.

Espero que la comunidad internauta pueda colaborar con nuestros proyectos de software libre.

..:: SIE-Group.net ::..
Grupo de Soluciones Inteligentes para tu Empresa.

Ing. Angel Haniel Cantu Jauregui <angel.cantu@sie-group.net>


Y el codigo de formacion de trama e insercion es el siguiente:
<?php
#Algunas variables como 'buf_sec', 'buf_menu', etc... se omiten,
#porque son tratadas mas arriba para consultar datos !!

$msgmsg2caritas$_POST["mensaje_noticia"] ); //de CODIGO a CARITAS
$msgmsg2msgtags$msg ); //de BBCode a HTML Tags

//generamos trama de insercion mysql
$valores="";
$valores .= "autor=";
$valores .= "'"$_SESSION["log_usr"]. "'";
$valores .= ":";
$valores .= "titulo=";
$valores .= "'"$_POST["titulo_noticia"]. "'";
$valores .= ":";
$valores .= "mensaje=";
$valores .= "'"htmlentities($msgENT_QUOTES). "'";
$valores .= ":";
$valores .= "fecha=";
$valores .= "'"time(). "'";
$valores .= ":menu=";
$valores .= "'"$buf_menu["NOMBRE"]. "'";
$valores .= ":sección=";
$valores .= "'"$buf_sec["NOMBRE"]. "'";

if( 
insertar_bdd"NOTICIAS"$valores )==)
echo "Error en la Insercion de los Datos.";
else
echo "Datos Agregados con Exito.";
?>


El error que muestra es el siguiente:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
for the right syntax to use near ' SIE-Group.net , , .. <br>Grupo de Soluciones Inteligentes para
tu Empres' at line 1Error en la Insercion de los Datos.



Los datos como es ovio, no se insertan :( y el problema persiste :S !!....

Pero es importante mencionar, que si en el formulario omito este pedazo de texto:

..:: SIE-Group.net ::..

El mensjae se inserta con exito... :D

Que puedo hacer ??
#627
Cita de: Arwing en 15 Abril 2008, 01:39 AM
Tengo una duda en cuanto a lo que se refiere a cómo lograr que un script se ejecute de manera indefinida sin que lo corte el tiempo límite de ejecución impuesto por el servidor HTTP, digamos Apache. Lograr lo que sería análogo a crear un demonio en Linux o un servicio en Windows, un proceso que siempre esté corriendo. ¿Cómo se puede hacer para PHP? ¿Qué alternativas tengo?

He estado pensado en que el script se llamara a si mismo cuando esté a punto de terminar su ejecución, pero no sé qué tan eficiente sea esto, si no se debe hacer, si hay otra forma, etc.

Saludos
Arwing

Si estas en PHP para web podrias utilizar AJAX y asi su script se ejecutaria a todo rato !!...

bye bye
#628
PHP / como Invocar funcion de un PHP incluido !!
7 Febrero 2008, 23:19 PM
Hola:

Espero poder explciarme bien, debido a que el sistema que estoy programando en PHP es demasiado automatizado...En fin, aqui voy jejeje

Deseo invocar una funcion de un archivo includio (include()), el problema es que este archivo es tomado de una carpeta llamada modulos, en donde se encuentran varios archivos importante del sistema, por ejemplo:

modulos/noticias.php
modulos/usuarios.php

Cada uno de estos archivo *.php son invocados desde la LECTURA DEL DIRECTORIO, de modo que cada archivo PHP tiene un boton unico y pues cada boton es generado desde la LECTURA DEL DIRECTORIO, de este modo se puede ENRIQUECER el sistema agregando MODULOS que se puedan AUTO-Instalar !! (esa es la idea)..... Deseo invocar la funcion noticias(); del archivo modulos/noticias.php...

El problema es que NO LOGRO invocar el nombre de la funcion de algun archivo.php dentro de la carpeta "modulos/" debido a que no se como invocarla desde variables :(...

Aqui les djeo un poco de codigo...

<?php

//esta funcion genera los botones automaticamente realizando la lectura del directorio "modulos/", su logica 
//es muy simple, solamente toma el archivo *.php, le quita la extensión ".php" y deja el puro nombre, 
//despues solo modifica la letra incial por MAYUSCULA y finalmente lo convierto en link <a></a>...

echo "<td vlign=\"top\">";
echo "<table cellspacing=\"5\" cellpadding=\"0\" align=\"center\" id=\"tabla_areabotones\">";
echo "<td>Inicio</td>"; //establecido
echo "<td><a href=\"index.php?id=modulos\">Modulos</a></td>"; //establecido

chdir"modulos/" ); //nos movemos

$fpopendirgetcwd() ); //abrimos directorio

while( ($bufreaddir$fp )) !==FALSE //leemos
{
if( strchr$buf".php" ) ) //sercioramos de tener un archivo ".php"
{
if( strcmp$buf"modulos.php" ) && strcmp$buf"base.php" ) ) //excluimos archivos
{
$xexplode".php"$buf ); //partimos

echo "<td><a href=\"index.php?id="$x[0]. "\">"ucfirst($x[0]). "</a></td>"//imprimimos en la pagina

unset( $x );
}
}
}

unset( $buf );
closedir$fp );

echo "</table>";
echo 
"</td><tr>";
?>


</php

//esta funcion es la que MUESTRARA el contenido de cada archivo.php de los modulos, todo dependiendo
//el archivo.php a consultar, posteriormente se debe invocar la funcion principal, el nombre de la funcion
//principal es el nombre del archivo.php mismo...  ejemplo.php, ejemplo()

echo "<td valign=\"top\">";

if( $_GET["id"] ) //verificamos que se invocara la variable para modulos
{
$fp= opendir( getcwd() ); //abrimos directorio

while( ($buf= readdir( $fp )) !== FALSE ) //leemos
{
if( strchr( $buf, ".php" ) ) //comparamos que sea archivo PHP
{
if( strcmp( $buf, "modulos.php" ) && strcmp( $buf, "base.php" ) ) //comparamos que sea distintio
{
include( $buf ); //incluimos archivo PHP
//==COMO INVOCAMOS el nombre ??? === $buf();  ???
}
}
unset( $buf ); //vaciamos buffer
}
closedir( $fp );
}
else
{
echo "<table cellspacing=\"0\" cellpadding=\"0\" align=\"center\" id=\"tabla_areatrabajo\">";
echo "<td>Area de Trabajo</td>";
echo "</table>";
}

echo "</td>";
?>
#629
Hola:

Listo, problema resuelto...

El problema era la posicion en la que me encontraba para despues INCLUIR el archivo config.php, debido a que anteriormente estaba en la direccion raiz del sitio / he incluia directamente el archivo ( include( "admin/config.php" ); ), y posteriormente NO podia LEER las constantes debido a que accedia al directorio admin/ y realizaba erroneamente la inclucion del config.php ( include( "admin/config.php" ); )....

El error lo solucione posicionandome SIEMPRE en el directorio RAIZ del sitio /, debido a como TODOS los archivos importantes y de configuracion son cargados por un modulo UNICO ubicado en: modulos/modulos.php.

Gracias de antemano... Si tengo cualquier otro problemilla, les comento !!

bye bye
#630
Cita de: alone-in-the-chat en  9 Noviembre 2007, 00:19 AM
Me parece que estas colocando las constantes como cadenas

Código (php) [Seleccionar]

if( !($link= mysql_connect( "". SERVER. "", "". BASE_USER. "", "". BASE_PASS. "" )) )



Creo que deberia ser asi

Código (php) [Seleccionar]

if( !($link= mysql_connect( SERVER,  BASE_USER,  BASE_PASS )) )


Je no lo eh probado pero sospecho que seria asi


Saludos

No creo que tenga eso que ver, porke desde que INSTALO la aplicacion, utilizo esa misma funcion de conectar() durante la instalacion y para coprobar los USERNAME al momento de logearme al software.. El problema es en el panel del administrador (admin/index.php), no puede conectarse :S !!....

Seguire buscando, si tengo respuesta pues publicare el resultado !!

Gracias de antemano !!

bye bye