Problema con funcion dentro de BBCode.

Iniciado por Diabliyo, 7 Diciembre 2009, 21:39 PM

0 Miembros y 1 Visitante están viendo este tema.

Diabliyo

Hola:

Tengo implementado en mi sistema una etiqueta BBCode personal, la cual llamo asi: [PLAY_MP3]ID[/PLAY_MP3], en donde el ID es un identificador en mi base de datos dentro de la tabla de archivos, en donde la idea es consultar dicho ID para posteriormente sacar la direccion completa donde se encuentra el archivo.mp3. Asi mismo, en el BBCode establezco un reproductor para que el archivo.mp3 pueda ser escuchado.

El Problema es que al llamar a la funcion mp3_file( $id ). esta no me regresa el archivo MP3 :(, sino que, solamente me retorna un 0 :(... Ya le estuve buscando y no entiendo porque :(.... Les dejo codigo:

BBcode Funcion
Esta funcion invoca el tag de [PLAY_MP3]ID[/PLAY_MP3] y a su vez llama a la funcion mp3_file( $id ).
Código (php) [Seleccionar]
<?php
function msg2msgtags$mensaje )
{
   
$cad_buscar= array(
   
'/\[play_mp3\](.*?)\[\/play_mp3\]/is'
   
);

$cad_remplazo= array(
'<object id="audioplayer_1" data="admin/addons/player.swf" style="outline-color: -moz-use-text-color; outline-style: none; outline-width: medium; visibility: visible;" name="audioplayer_1" type="application/x-shockwave-flash" height="24" width="450">
<param value="#FFFFFF" name="bgcolor">
<param value="transparent" name="wmode">
<param value="false" name="menu">
<param value="animation=yes&encode=no&initialvolume=60&remaining=yes&noinfo=yes&buffer=5&checkpolicy=no&rtl=no&bg=bbbbbb&text=333333&leftbg=CCCCCC&lefticon=333333&volslider=666666&voltrack=FFFFFF&rightbg=B4B4B4&rightbghover=999999&righticon=333333&righticonhover=FFFFFF&track=FFFFFF&loader=3c78a7&border=CCCCCC&tracker=DDDDDD&skip=666666&soundFile=href="http://www.podtrac.com/pts/redirect.mp3/http://podcast.sie-group.net/upload/noticias/'
mp3_file('$1'). '&playerID=audioplayer_1" name="flashvars">
</object>
<script type="text/&#8237;&#8236;&#8237;&#8236;&#8237;&#8236;&#8237;&#8236;javascript">AudioPlayer.embed("audioplayer_1", {soundFile:"http://www.podtrac.com/pts/redirect.mp3/http://podcast.sie-group.net/upload/noticias/'
mp3_file'$1' ). '"});</script>'
                
);

$mensajehtmlentities($mensajeENT_QUOTES);
$mensajepreg_replace$cad_buscar$cad_remplazo$mensaje );
$mensajehtml_entity_decode($mensajeENT_QUOTES);

return $mensaje;
}
?>


Funcion mp3_file()
Esta funcion recive un ID el cual toma y consulta en la base de datos de ARCHIVOS para obtener el campo de ARCHIVOS_NOMBRE, que tiene el nombre del mp3 a reproducir (retornar).
Código (php) [Seleccionar]
function mp3_file( $id )
{
$mp3= consultar_datos_general("ARCHIVOS", "ID='". $id. "'", "archivos_nombre");
// echo '['. $id. ']';  # la habilito para ver si efectivamente existe un id (o se envia), y pues SI
return $mp3;
}


Funcion consultar_datos_general()
Basicamente es una funcion simple y sencilla para minimizar escribir el codigo mysql_query repetidamente :S...
Código (php) [Seleccionar]
//funcion para consultar datos especificos en la BDD de CUALQUIERA
function consultar_datos_general( $bdt, $bdt_where, $var )
{
$cons= consultar_con( $bdt, $bdt_where ); //funcion que invoca consulta (mysql_query()).
$data= mysql_num_rows($cons);
if( $data )
{
$tmp= mysql_fetch_array($cons);
unset($data);
limpiar($cons);  //funcion que ejecuta mysql_free_result()
return $tmp[strtoupper($var)];
}
unset($data);
limpiar($cons); //funcion que ejecuta mysql_free_result()
return 0;
}

Diabliyo

Mmmmm en vista que nadie contesta y al parecer no tienen mucha idea :(...

La unica solucion (momentanea) que tengo es que, como solamente puedo obtener el ID (ya que lo proporciono dentro del tag BBCode), asi que, pues simplemente cuando voy a insertar nueva cancion a mi programa, creo un enlace simbolico (con php) que apunta al archivo MP3, de modo que cuando el usuario proporciona el ID, simplemente le antepongo .mp3 y ya !...

Pero es un poco complicada, porque al momento de borrar la cancion, tendria que tambien borrar el link simbolico, esto lo veo ineficiente, ya que la idea es que el codigo se aplique para subir cualquier tipo de archivo, y si lo dejo asi, se crearia un link simbolico por cada archivo subido :S...

bye

[u]nsigned

La funcion consultar_datos_general() SIEMPRE devuelve 0, por el 'return 0;'.

Y en la funcion mp3_file() haces:

Código (php) [Seleccionar]
$mp3= consultar_datos_general("ARCHIVOS", "ID='". $id. "'", "archivos_nombre");//Esto seria igual a $mp3 = 0 por lo que ya dije en mi primera oracion...
return $mp3;                                                                   //Asi que esto basicamente es un 'return 0;'


Asi que todo funciona como deberia, creo que deberias cambiar las funciones o el enfoque de las mismas.. :silbar:

SAludos

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

Diabliyo

#3
Cita de: m3g@ h@x0R en 10 Diciembre 2009, 18:55 PM
La funcion consultar_datos_general() SIEMPRE devuelve 0, por el 'return 0;'.

Y en la funcion mp3_file() haces:

Código (php) [Seleccionar]
$mp3= consultar_datos_general("ARCHIVOS", "ID='". $id. "'", "archivos_nombre");//Esto seria igual a $mp3 = 0 por lo que ya dije en mi primera oracion...
return $mp3;                                                                   //Asi que esto basicamente es un 'return 0;'


Asi que todo funciona como deberia, creo que deberias cambiar las funciones o el enfoque de las mismas.. :silbar:

SAludos

Pues estas mal amigo, no has entendido la funcion consultar_datos_general(), esta funcion solo y unicamente retorna 0 cuando el valor a consultar NO existe. Cuando el valor si existe retorna el valor que le diste en el 3er argumento.

Observa bien !!.... Por eso esta la condicion if( $data ).... Te explico mas facil:

Yo invoque esto mp3= consultar_datos_general("ARCHIVOS", "ID='". $id. "'", "archivos_nombre");.

Quiere decir que, como primer arguento envio la TABLA donde se realizara la consulta, como segundo argumento seria donde mysql realizaria un where... En esta parte se realiza la consulta y si existen datos, procedo a retornar la celda del tercer_argumento, que seria: return $tmp[strtoupper($var)];....

El problema aun continua y sigue :(....  Sigo sin entender proque al llamarse a mp3_file() me retorna un 0 :(, yo lo que quiero que me retorne es el nombre del archivo, que seria: archivo_cancion.mp3.... Ya verifique si en realidad la funcion recivia el ID correcto, y SI, si es correcto ...

Sigo con la duda y el problema....