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

#381
PHP / Re: Ocultar celdas de tablas con PHP
14 Enero 2011, 18:45 PM
Cita de: WHK en 14 Enero 2011, 18:40 PM
Código (php) [Seleccionar]
<?php
if(!$consmysql_query('haces la consulta mysql'$link ))
 echo 
'Error';
else{
 echo 
'resultados....';
}
?>



Jejejeje yo no acostumbro por el { delante y despues abajo el cierre }, me gusta dejar el espacio para poder dicernir en codigos extensos, ya es costumbre.

Ya lo de hacer el mysql_query() dentro del IF, ya es personal, en mi caso lo hago distinto al ejemplo que di, acostumbro tener mi propio framework de mysql, para no hacer mysql_query(), sino algo asi: consultar( $b, $datos); y tengo mas funciones para diversas cosas: consulta indexada, consulta por limites, etc, etc...

Pero la idea es clara...
#382
Buenas.

Tengo problemas para mostrar unos caracteres que tienen acento, me sale impreso un rombo negro con un símbolo de pregunta al centro.

Dichos caracteres acentuados los tome de un archivo de texto que previamente con mi sistema cargue e inserte en mi base de datos, el proceso fue el siguiente:

Código (php) [Seleccionar]
<?php
# script mundo.php
# sube las ciudades a la BDD cuando inicializas el sitio

$file'ciudades.csv';
$buf=''# datos 
$fpfopen($file"r" ); # abrimos stream
$i=0;
$c=0;
$linkconectar();
while(!
feof($fp) )
{
$buffgets($fp2048); # leemos
$xexplode(","$buf);

$existe'select * from MUNDO_CIUDAD where ID=\''$i'\' && CIUDAD=\''proteger_cadena(substr($x[3], 1, -1)). '\'';
if( !mysql_num_rowsmysql_query($existe) ) ) # si no existe, insertamos 
{
$cons1'select * from MUNDO_ESTADO where NUMERO=\''substr$x[2], 1, -1). '\' && ID_PAIS=\''substr$x[1], 1, -1). '\';';
$data1mysql_fetch_array(mysql_query($cons1$link)); # obtenemos datos del Estado de la Ciudad del buffer: $buf
$cons2'insert into MUNDO_CIUDAD( ID, ID_ESTADO, ID_PAIS, CIUDAD ) values( \''$i'\', \''$data1["ID"]. '\', \''$data1["ID_PAIS"]. '\', \''proteger_cadena(substr$x[3], 1, -)). '\' );';
mysql_query$cons2$link );
$c++;
}
$i++;
}
echo 
'Insertadas <b>'$c'</b> ciudades de <b>'$i'</b> recorridos.';
mysql_close($link);
fclose($fp); # cerramos stream 

unset(
$buf);
?>


El archivo ciudades.csv contiene algo como esto:

numero,codigociudad, altitud, latitud, numerociudad, codigoestado, nombreciudad

Existen mas de 100,000 resgistros en ese archivo, asi que con el code que les puse, lo cargue en el sistema y lo inserte.

Por mencionar tambien, yo utilizo una funcion llamada proteger_cadena(), que es mas que esto:

Código (php) [Seleccionar]
<?php
function proteger_cadena$cadena )
{
return htmlentities($cadenaENT_QUOTES);
}
?>


EL PROBLEMA ya es en la practica, cuando dentro de un SELECT despliego los nombres de las ciudades consultadas, me salen con el simbolo que les mencione.... Para ello, cuando se invoca el SELECT mando imprimir con una funcion llamada: desproteger_candea(), implementada asi:

Código (php) [Seleccionar]
<?php
function desproteger_cadena$cadena )
{
$out=$cadena;
$outhtml_entity_decode$outENT_QUOTES );

if( strchr$out"<" ) )
$outstr_replace"<"htmlentities("<"ENT_QUOTES), $out );
if( strchr$out">" ) )
$outstr_replace">"htmlentities(">"ENT_QUOTES), $out );

if( strchr$out"\n" ) )
$outstr_replace"\n""<br>"$out );
if( strchr$out"\t" ) )
$outstr_replace"\t""&nbsp;&nbsp;&nbsp;"$out );

return $out;
}

$consmysql_query();
if( !
mysql_num_rows($cons) )
echo 'No hay ciudades...';
else
{
while($buf=mysql_fetch_array($cons))
{
echo '<select name="variable">
<option value="'
$buf["ID"]. '" />'$buf["NOMBRE"];
</select>';
}
}
?>


Saludos !
#383
PHP / Re: Ocultar celdas de tablas con PHP
14 Enero 2011, 18:12 PM
RedZer no es que se te insulte o menos aprecie tu intencion, pero vale mas un consejo bien dado que un consejo mal dado.

En tu caso le estas ense~ando a los usuarios una mala forma de programar y a eso yo le llamo: contaminar, ya que creas un vicio, como el usuario lo recvie mal, lo ense~a a otras personas mal.

Lo aconsejable es como lo menciona WHK y los demas, o bien como mi opinion, que primero resuelvo los errores y al final el exito, asi:

Código (php) [Seleccionar]
<?php
$consulta
'haces la consulta mysql';
$consmysql_query$consulta$link ); # metemos los datos a una variable
if( !mysql_num_rows($cons) ) # si esta vacio (sin datos)
    
echo 'Error';
else 
# existen datos, exito
    
{
    echo 
'resultados....';
    
# ... el demas code...
    
}
?>


En lo personal creo que es mucho mejor primero comprobar errores y despues poner el ELSE del exito, ya que si tenemos un formulario tipico de registro de usuario se nos generaria un engendro gigantes de if, else if, else if, else... que a fin de cuentas, los errores (mensajes) quedarian al final y al inicio lo exitos, pero mi consejo es que al principio los erroes y al final el exito, asi podras en un futuro modificar el codigo para mejorarlo o corregirlo sin tanto problema y perderte entre tanto { }.

Ejemplo:

Código (php) [Seleccionar]
<?php
if( !strcmp($_POST["form_email"], "") )
     echo 
'Error: inserta un mail.';
else if( !
validar_mail($_POST["form_email"]) )
     echo 
'Error Mail invalido.';
else if( 
otras variables )
     echo 
'Otros errores';
else
     echo 
'Exito';
?>
#384
PHP / Re: Ayuda con preg_replace() !!
14 Enero 2011, 18:05 PM
El problema aun continua, no logro dar con el clavo para poder usar bien preg_replace() y funcione sustituyendo DATE(FECHA M) por date( "M", $db["FECHA"]).

Saludos !
#385
Ya pude subir mis actualizaciones :D, pero.... no se va al branch master.

Quizas el problema es que el branch master no tiene permisos para que los remotos lo actualicen...

Pero mi solucion de momento fue entrar al servidor dedicado, crear un branch X y dejarlo existente para que cuando un Remoto suba actualizaciones, utilice ese branch, el unico [/b]problema[/b] con esta modalidad, es que el master nunca se actualiza, es necesario entrar al Servidor Dedicado (por SSH) y actaulizarlo (git merge X).

El proceso fue:

Servidor Dedicado
shell# cd /home/git/
shell# mkdir proyecto  // creamos proyecto
shell# git init  //inicializamos SIN utilizar "--bare"
shell# git branch  // vemos los branch, solo tenemos a master
* master

// creamos el branch "dev" que usare para actualizar
shell# git branch dev
shell# git branch
* master
dev


En el Servidor Local (mi equipo)
shell# /home/miusuario/codigos/
shell# mkdir proyecto
shell# cd proyecto
shell# git init
shell# echo "prueba de texto" > hola.txt
shell# git add .
shell# git commit -am "estoy en Srv Local"

// subiendo al repositorio Servidor Dedicado
shell# git push diabliyo@git.miservidor.com:/home/git/proyecto dev


Ahora ya tenemos todo UP en el Servidor Dedicado, el problema es que solo se refleja cuando entras al branch dev, y para que master lo refleje, es necesario entrar y emerger.

// estoy en servidor Dedicado
shell# cd /home/git/proyecto
shell# git branch
* master
dev

// estoy hara que el branch "dev" actualize al branch "master"
shell# git merge dev


Y listo....

Agradeceria quien me dijera como hacerle para poder subir las cosas directo al branch master, porque si lo intento, me dice este error:

Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 479 bytes, done.
Total 5 (delta 0), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To diabliyo@git.miservidor.com:/home/git/data
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'diabliyo@git.miservidor.com:/home/git/data'
#386
Ya vi el tuto y sigo sin conseguirlo, ademas ese tuto no menciona nada interesante mas que laparte de hacer este config:

git config branch.master.remote origin && git config branch.master.merge refs/heads/master

Pero el config que no le veo razon es este: git config branch.master.remote origin, ya que estaria casando el branch.master.remote con el "origin", y en lo particular, no pienso trabajar con un solo repo, tengo varios proyectos ya finalizados y que hago updates esporadicamente, asi que yo declararia un git add remote NOMBREPROYECTO http://git.miservidor.com:/home/git/NOMBREPROYECTO.

Bueno, el problema continua, y por cierto, si en el Servidor Dedicado hago: git --bare init, no me crea el directorio .git/, me pone todo en el directorio raiz (donde teclee el comando), y despues cuando en el Servidor Local hago: git push diabliyo@git.miservidor.com:/home/git/PROYECTO, me dice:

fatal: Couldn't find remote ref HEAD
fatal: The remote end hung up unexpectedly
#387
PHP / Re: Ayuda con preg_replace() !!
13 Enero 2011, 00:52 AM
Cita de: ~ Yoya ~ en 13 Enero 2011, 00:42 AM
Quizas no captures nada... Debes estar seguro de la regexp porque pueda que no funcione correctamente y nose si funciona bien o mal porque nose que datos puede contener la variable $box.

[Wed Jan 12 17:32:28 2011] [error] [client ::1] PHP Notice:  Undefined index: $1 in /home/diabliyo/public_html/moneybox
/modulos/ioscripts.php on line 276, referer: http://localhost/diabliyo/moneybox/?id=facturas&c=list

Se debe a esto:
Código (php) [Seleccionar]
date("'${2}'", $db['$1'])
Debería ir así:
Código (php) [Seleccionar]
date("'${2}'", $db['${1}'])

Quizas esa sea la solucion, de todo modos pueda que no la sea porque nose que tipo de datos contiene $db.

He probado ambas y no imprimde datos :(...

date("'$2'", $db['$1']) --> Imprime: 'M'
date("'${2}'", $db['$1']) --> Imprime: ''
date("'$2'", $db['${1}']) --> Imprime: 'M'
date("'${2}'", $db['${1}']) --> Imprime: ''

La variable $box contiene DATE(FECHA M) unicamente..

De echo invoco echo $'['. $box. ']';  para verificar y estar serciorado que se le esta pasando el comando, y si, me imprme DATE(FECHA M). Despues cuando sale de la funcion, vuelvo a hacerle echo '['. $box. ']'; y ahora imprme el parentesis cuadrado sin informacion :(.

Tienes MSN o Skype si tienes tiempo y puedes, hablamos, sino, seguimos por este medio.

Saludos !
#388
PHP / Re: Ayuda con preg_replace() !!
13 Enero 2011, 00:32 AM
Cita de: ~ Yoya ~ en 12 Enero 2011, 23:50 PM
Pusiste ese código, pero no lo podre usar, porque tendría que hacer una conexión MYSQL y una consulta y nose que otra cosa para poder darle un valor a la variable $buf que no se que tipo de datos pueda contener ni como seria el formato.

La conexión a la Base de Datos y consulta ya la hice en otra parte del código, a esta función le envío la variable $buf, a la cual ya previamente se le paso la conexion y se le metieron los datos ($buf=mysql_fetch_array($cons)).

Por cierto, modifique el code así:

Código (php) [Seleccionar]
<?php
$cad_buscar= array( 
'/DATE\((.*?) (.*?)\)/is'
);
$cad_remplazo= array( 
date("${2}"$db['$1'])
);
    
$boxhtmlentities($boxENT_QUOTES);
$boxpreg_replace$cad_buscar$cad_remplazo$box );
?>


Y sigue fallando :(, ahora no imprime nada.... Creo que el problema va por la $1 ?, no ?

El error log mando:
Código (bash) [Seleccionar]
[Wed Jan 12 17:32:28 2011] [error] [client ::1] PHP Notice:  Undefined index: $1 in /home/diabliyo/public_html/moneybox
/modulos/ioscripts.php on line 276, referer: http://localhost/diabliyo/moneybox/?id=facturas&c=list


Si pongo date("'${2}'", $db['$1']), me imprime simplemente '' (dos comilla simple)...

Y sinceramente no tengo ni idea de que intentas decir con maquetear :S, vaya, la funcion preg_replace(), la manejo con dos arrays porque no pienso incluir solamente un valor, sino que la idea es tener un conjunto de comandos a disposicion del usuario, en este caso el comando es DATE(FECHA M), donde DATE() es el primer indicado para mi de que quiere imprimir una fecha, FECHA sera el nombre del elemento dentro de la tabla (FECHA VARCHAR(100) not NULL, previamente existente claro), M el primer argumento que recive la funcion en php date( arg1, time() );.

#389
PHP / Re: Ayuda con preg_replace() !!
12 Enero 2011, 23:36 PM
Buenas...

He realizado el cambio pero en vez de imprimirme la fecha, me imprime 'M', vaya, las comillas y dentro la letra M (tal cual todo).

Mi codigo:
Código (php) [Seleccionar]
<?php
$cad_buscar= array( 
'/DATE\((.*?) (.*?)\)/is'
);
$cad_remplazo= array( 
date("'$2'"$db['$1'])
);
    
$boxhtmlentities($boxENT_QUOTES);
$boxpreg_replace$cad_buscar$cad_remplazo$box );
?>


Se supone que debe imprimir la fecha, vaya en este caso como el comando es: DATE(FECHA M), deberia imprimirse: Jan (Enero en ingles), pero se imprime la letra M.

Y el log error de apache dice:
Código (bash) [Seleccionar]
[Wed Jan 12 16:36:58 2011] [error] [client ::1] PHP Notice:  Undefined index: $1 in /home/diabliyo/public_html/moneybox
/modulos/ioscripts.php on line 276, referer: http://localhost/diabliyo/moneybox/?id=facturas&c=list


Se supone que $db['$1'] seria como hacer: $db["FECHA"], ya que $db es un array obtenido mediante la funcion mysql_fetch_array();, y como el usuario invoco el comando DATE(FECHA M), el valor de FECHA es el que pongo, pero algo sale mal.

Alguna idea ?
#390
PHP / Re: Ayuda con preg_replace() !!
12 Enero 2011, 22:19 PM
Cita de: ~ Yoya ~ en 12 Enero 2011, 22:10 PM
Puedes poner uno o dos ejemplos de los datos que recibes y poner como quieres que te queden los datos. En este tipo de problema, siempre es mejor maquetear tu problema.

Ejemplo:
Código (php) [Seleccionar]
<?php

$datos 
'hola mundo';//Datos que recivo| Dato original, sin modificaciones

//Reemplazo la palabra mundo por yoya

echo preg_replace('/mundo/''Yoya'$datos);

?>


Así es mas fácil de entender, y no poner de donde puede provenir el valor de la variable $datos. Solo indico la cadena original y como deseo que quede...

Tu ejemplo le entiendo, por es sencillo y simple, pero en mi caso digamos que estamos asi:

Código (php) [Seleccionar]
<?php
$buf
mysql_fetch_array($cons);
$datos 'DATE(FECHA M)'# ojo DATE() en mayusculas no se interpreta como funcion

//Reemplazo la palabra mundo por yoya
echo preg_replace('/DATE\((.*?) (.*?)\)/is'date("'$2'"$buf['$1']), $datos);
?>


Eso es correcto ?, creo que NO, porque no me imprime la fecha :(
El log error de apache dice:

Código (bash) [Seleccionar]

[Wed Jan 12 15:22:36 2011] [error] [client ::1] PHP Notice:  Undefined index: $1 in /home/diabliyo/public_html/moneybox
/modulos/ioscripts.php on line 276, referer: http://localhost/diabliyo/moneybox/?id=facturas&c=list

[Wed Jan 12 15:22:36 2011] [error] [client ::1] PHP Warning:  preg_replace(): Compilation failed: nothing to repeat at offset
13 in /home/diabliyo/public_html/moneybox
/modulos/ioscripts.php on line 280, referer: http://localhost/diabliyo/moneybox/?id=facturas&c=list



Las lineas del error son aqui:

Código (php) [Seleccionar]
<?php
272
   $cad_buscar= array( 
273    '/DATE\((.*?) (*?)\)/is'
274    );
275 $cad_remplazo= array( 
276 date"'$2'"$db['$1'] )
277                 );
278
279
   $boxhtmlentities($boxENT_QUOTES);
280 $boxpreg_replace$cad_buscar$cad_remplazo$box );
?>