Comunidad de diseño web y desarrollo en internet online

Problemilla con codigo PHP

Citar            
MensajeEscrito el 01 Ago 2013 04:33 pm
Hola a todos,

pues vereis tengo dos foros, uno donde hago las pruebas de bloques, estilos, modificaciones, etc. etc y otro que es el "oficial" donde las instalo una vez comprobado que todo funciona, el caso es que en el foro de prueba si inserto un bloque PHP con el siguiente codigo:

Código PHP :

<?php

$limit = 5;            //Limite de aportes a mostrar

global $smcFunc, $scripturl;

$posts_result = $smcFunc['db_query']('', '
   SELECT m.id_msg, m.subject, m.body, m.id_topic
   FROM {db_prefix}topics AS t
   LEFT JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_topic)
   ORDER BY t.id_topic DESC  LIMIT '. $limit .'',
$posts = array()
);
while ($row_posts = $smcFunc['db_fetch_assoc']($posts_result))
{
    $posts[] = array(
              'titulo' => $row_posts['subject'],
              'mensaje' => $row_posts['id_topic'],
              'body' => $row_posts['body']
   );
}
$smcFunc['db_free_result']($posts_result);

echo '<div style="text-align:center"><marquee height="200px" onmouseout="this.start()" onmouseover="this.stop()" truespeed="true" scrollamount="3" direction="left" behavior="scroll">';

foreach ($posts as $post) {

$content1 = str_replace("[", "<", $post['body']);
$content2 = str_replace("]", ">", $content1); 
$caratula = strip_tags($content2);
$caratula1 = substr ($caratula,0,100);
$mensa = $post['mensaje'];
$tit = $post['titulo'];

echo '
<a href="' . $scripturl . '?topic=' . $mensa . '"><img src="' . $caratula1 .'" title="'. $tit .'" width="100px" height="150px" />';
   
}
echo '</marquee></div>';
?>


funciona de maravilla y hace lo que tiene que hacer, es decir mostrarte los ultimos aportes en movimiento, ahora bien, cuando hago lo mismo en el foro "oficial" el bloque no muestra nada de nada, lo he intentado llamar desde fuera creando un archivo php con el mismo codigo y cuando lo ejecuto me da el siguiente error:

Fatal error: Function name must be a string in /home/xxxxxxxxx/xxxxx/prueba.php on line 7.

Por supuesto que en los dos foros las bases de datos se llaman igual y los datos tambien, la unica diferencia que hay es que en una base hay mas datos y en la otra no.
¿Habra por aqui algun fenomeno de la programacion que me pueda ayudar a resolver el problema?

Gracias por adelantado.

Por rober1

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Ago 2013 08:00 pm
Probablemente se deba a que en el sitio "oficial" el array $smcFunc no se carga con los mismos valores que en el sitio "de pruebas".

Haz un var_dump() de $smcFunc para ver qué diferencias hay entre uno y otro lugar.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 01 Ago 2013 11:51 pm
Pues esto es lo que me devuelve, no soy ningun experto pero no le veo diferencias entre uno y otro.

Sitio Oficial
array(32) { ["db_query"]=> string(12) "smf_db_query" ["db_quote"]=> string(12) "smf_db_quote" ["db_fetch_assoc"]=> string(17) "mysql_fetch_assoc" ["db_fetch_row"]=> string(15) "mysql_fetch_row" ["db_free_result"]=> string(17) "mysql_free_result" ["db_insert"]=> string(13) "smf_db_insert" ["db_insert_id"]=> string(16) "smf_db_insert_id" ["db_num_rows"]=> string(14) "mysql_num_rows" ["db_data_seek"]=> string(15) "mysql_data_seek" ["db_num_fields"]=> string(16) "mysql_num_fields" ["db_escape_string"]=> string(10) "addslashes" ["db_unescape_string"]=> string(12) "stripslashes" ["db_server_info"]=> string(21) "mysql_get_server_info" ["db_affected_rows"]=> string(20) "smf_db_affected_rows" ["db_transaction"]=> string(18) "smf_db_transaction" ["db_error"]=> string(11) "mysql_error" ["db_select_db"]=> string(15) "mysql_select_db" ["db_title"]=> string(5) "MySQL" ["db_sybase"]=> bool(false) ["db_case_sensitive"]=> bool(false) ["db_escape_wildcard_string"]=> string(29) "smf_db_escape_wildcard_string" ["entity_fix"]=> string(9) "lambda_1" ["htmlspecialchars"]=> string(9) "lambda_2" ["htmltrim"]=> string(9) "lambda_3" ["strlen"]=> string(9) "lambda_4" ["strpos"]=> string(9) "lambda_5" ["substr"]=> string(9) "lambda_6" ["strtolower"]=> string(9) "lambda_7" ["strtoupper"]=> string(9) "lambda_8" ["truncate"]=> string(9) "lambda_9" ["ucfirst"]=> string(10) "lambda_10" ["ucwords"]=> string(10) "lambda_11" }

Sitio de pruebas
array(32) { ["db_query"]=> string(12) "smf_db_query" ["db_quote"]=> string(12) "smf_db_quote" ["db_fetch_assoc"]=> string(17) "mysql_fetch_assoc" ["db_fetch_row"]=> string(15) "mysql_fetch_row" ["db_free_result"]=> string(17) "mysql_free_result" ["db_insert"]=> string(13) "smf_db_insert" ["db_insert_id"]=> string(16) "smf_db_insert_id" ["db_num_rows"]=> string(14) "mysql_num_rows" ["db_data_seek"]=> string(15) "mysql_data_seek" ["db_num_fields"]=> string(16) "mysql_num_fields" ["db_escape_string"]=> string(10) "addslashes" ["db_unescape_string"]=> string(12) "stripslashes" ["db_server_info"]=> string(21) "mysql_get_server_info" ["db_affected_rows"]=> string(20) "smf_db_affected_rows" ["db_transaction"]=> string(18) "smf_db_transaction" ["db_error"]=> string(11) "mysql_error" ["db_select_db"]=> string(15) "mysql_select_db" ["db_title"]=> string(5) "MySQL" ["db_sybase"]=> bool(false) ["db_case_sensitive"]=> bool(false) ["db_escape_wildcard_string"]=> string(29) "smf_db_escape_wildcard_string" ["entity_fix"]=> string(11) "lambda_390" ["htmlspecialchars"]=> string(11) "lambda_391" ["htmltrim"]=> string(11) "lambda_392" ["strlen"]=> string(11) "lambda_393" ["strpos"]=> string(11) "lambda_394" ["substr"]=> string(11) "lambda_395" ["strtolower"]=> string(11) "lambda_396" ["strtoupper"]=> string(11) "lambda_397" ["truncate"]=> string(11) "lambda_398" ["ucfirst"]=> string(11) "lambda_399" ["ucwords"]=> string(11) "lambda_400"}

Por rober1

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Ago 2013 12:16 pm
Sí, hay diferencias pero no parece que sean relevantes al problema.

¿Podrías decirme exactamente cuál es la línea 7 que dice el mensaje de error?.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 02 Ago 2013 01:04 pm

DriverOp escribió:

Sí, hay diferencias pero no parece que sean relevantes al problema.

¿Podrías decirme exactamente cuál es la línea 7 que dice el mensaje de error?.


Pues la linea 7 segun el mensaje de error es esta:

$posts_result = $smcFunc['db_query']('', '

Por rober1

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Ago 2013 01:13 pm
He conseguido que me muestre algun dato haciendo los siguientes cambios:

ORIGINAL:
$posts_result = $smcFunc['db_query']('', '
SELECT m.id_msg, m.subject, m.body, m.id_topic
FROM {db_prefix}topics AS t
LEFT JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_topic)
ORDER BY t.id_topic DESC LIMIT '. $limit .'',
$posts = array()
);

CAMBIADO:
$posts_result = $smcFunc['db_query']('', '
SELECT id_topic, subject, body, id_board
FROM {db_prefix}messages
ORDER BY id_topic DESC LIMIT '.$limit.'',
$posts = array()
);

El problema es que en vez de mostrarme el ultimo post me muestra la ultima respuesta dada a ese post...

:shock: ¡¡me estoy volviendo loco !!

Por rober1

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Ago 2013 04:10 pm
Ah pues sospecho entonces que el problema puede ser un error de sintaxis o de base de datos en la sentencia SELECT.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 02 Ago 2013 10:00 pm
Bueno pues al final lo he conseguido, solamente tenia que añadir los foros de donde tenia que leer los post y despues decirle que omitiera los post que empiezan por "Re:%"


Código :

Añadir
$foros = array (1,2,3,4,5);        //Foros de donde leer las noticas



Código :

Buscar esto:

$posts_result = $smcFunc['db_query']('', '
   SELECT m.id_msg, m.subject, m.body, m.id_topic
   FROM {db_prefix}topics AS t
   LEFT JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_topic)
   ORDER BY t.id_topic DESC  LIMIT '. $limit .'',
$posts = array()
);


Código :

Reemplazar con esto:
$posts_result = $smcFunc['db_query']('', '
   SELECT m.id_board, m.id_topic, m.subject, m.body
   FROM {db_prefix}messages AS m
   WHERE m.id_board IN ('.implode(',',$foros).') AND m.subject NOT LIKE "Re:%"
   ORDER BY m.id_topic DESC LIMIT '.$limit.'',
$posts = array()
);


Gracias DriverOp por tu tiempo

Por rober1

5 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.