Foros del Web » Programando para Internet » PHP »

Urgente, Ayuda!

Estas en el tema de Urgente, Ayuda! en el foro de PHP en Foros del Web. A ver si me pueden ayudar con esto, estoy haciendo un formulario tipo el de un foro, y quiero que cuando el usuario escriba un ...
  #1 (permalink)  
Antiguo 22/12/2003, 13:54
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 20 años, 7 meses
Puntos: 1
Urgente, Ayuda!

A ver si me pueden ayudar con esto, estoy haciendo un formulario tipo el de un foro, y quiero que cuando el usuario escriba un texto entre [ CODE ] y [ /CODE ] (que usualmente esto es utilizado para escribir un codigo) ser resalten a color todo lo escrito en php.

se ke esto se puede hacer con highlight_string(); pero no me funciona. yo hice algo asi

Código PHP:
<?
$conexion 
mysql_connect("localhost","root","pass");
mysql_select_db("base",$conexion);
//------------------------------------------------

function bbcodes($comment) {

$comment ereg_replace('\[code\](.*)\[/code\]',"<table width=95% cellspacing=0 cellpadding=0 border=0 bgcolor=e2e2e2 align=center><tr><td>".highlight_string("<? echo date(\"d/m/Y\"); ?>")."</td></tr></table>",$comment);

$comment nl2br($comment);
    
    return 
$comment;
    
// de la function.

//------------------------------------------------
if (isset($go)) {
    
$comentario bbcodes($_POST[comentario]);
    
mysql_query("INSERT INTO comentarios (id_coment, nombre, ip, comentario) values ('1', 'Volrath', '155.155.155.55', '$comentario')");
    
header("Location: comentarios.php");
// del if (go)
?>

<html>
<head>
<title>Agregar Comentarios</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
BODY { color: #777777; font-family: Verdana; font-size: 10px; }
TD { color: #777777; font-family: Verdana; font-size: 10px; }
.titulo { font-weight: bold; font-size: 12px; color: #FFFFFF }
</style>
</head>
<body>
<form action="<?=$PHP_SELF?>" method="post" name="form">
<table width="450" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td height="20" bgcolor="#000099"><div align="center"><span class="titulo">Agregar Comentarios</span></div></td>
  </tr>
  <tr>
    <td><div align="center">
      <textarea name="comentario" cols="70" rows="5"></textarea>
    </div></td>
  </tr>
  <tr>
    <td bgcolor="#CCCCCC"><div align="center"><input type="submit" name="go" value="Enviar!!"></div></td>
  </tr>
</table></form>
</body>
</html>
pero no me funciona , al tratar de introducir el CODE solo me sale un " 1 " en negro, que no se ke significa :S

espero que me puedan ayudar con esto.
salu2x
__________________
In a world without walls, who needs Windows?

Última edición por Volrath; 22/12/2003 a las 18:57
  #2 (permalink)  
Antiguo 22/12/2003, 15:24
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Si revisas el manual de highlight_string() (www.php.net/highlight_string), lo que hace esa funcion es mostrar la cadena, no devolverla. Por decirlo de alguna forma, es como un echo, envia al navegador la cadena coloreada.

A partir de la version 4.2, tiene un segundo parametro, que si le pasas el valor true, devuelve la cadena, que es lo que tu quieres:
Código PHP:
$comment = ereg_replace('[code](.*)[/code]',"<table width=95% cellspacing=0 cellpadding=0 border=0 bgcolor=e2e2e2 align=center><tr><td>".highlight_string("<? echo date("d/m/Y\"); ?>",true)."</td></tr></table>",$comment);
Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 23/12/2003, 02:03
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 20 años, 7 meses
Puntos: 1
Ok, cambie ya el codigo y esta ves si lo ha devuelto, pero lo ha devuelto sin colorear, solo en negro

Código PHP:
<?
$conexion 
mysql_connect("localhost","root","pass");
mysql_select_db("base",$conexion);
//------------------------------------------------

function bbcodes($comment) {

$comment htmlspecialchars($comment);

#######CAMBIO########
$comment ereg_replace('\[code\](.*)\[/code\]',"<table width=95% cellspacing=0 cellpadding=0 border=0 bgcolor=e2e2e2 align=center><tr><td>".highlight_string("\\\\1",true)."</td></tr></table>",$comment);
####################

$comment nl2br($comment);
    
    return 
$comment;
    
// de la function.

//------------------------------------------------
if (isset($go)) {
    
$comentario bbcodes($_POST[comentario]);
    
mysql_query("INSERT INTO comentarios (id_coment, nombre, ip, comentario) values ('1', 'Volrath', '155.155.155.55', '$comentario')");
    
header("Location: comentarios.php");
// del if (go)
?>
si t fijas, esta vez cambie el <? date(); ?> por \\1, para ke se coloree lo ke esta entre [ code ] y [ /code ], supongo ke se hace asi, la verdad es ke no se mucho de expresiones regulares, necesito una mano urgente.
nose porke no lo pinta . ayudenme please
__________________
In a world without walls, who needs Windows?
  #4 (permalink)  
Antiguo 23/12/2003, 02:32
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Es que para que la funcion tome su contenido como PHP y lo coloree, debe contener las etiquetas de comienzo y final de PHP, <?php y ?>. Si no, lo toma como HTML y lo pone en negro.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 23/12/2003, 03:01
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 20 años, 7 meses
Puntos: 1
Ok, entonces creo ke el error esta en el

$comment = htmlspecialchars($comment);

no?

la cuestion es ke trato de hacerlo colocando primero el ereg_replace dell [ code ] [ /code ] es decir, trato de hacerlo asi:

Código PHP:
<?
$conexion 
mysql_connect("localhost","root","pass");
mysql_select_db("base",$conexion);
//------------------------------------------------

function bbcodes($comment) {

$comment ereg_replace('\\[code\\](.*)\\[/code\\]',"<table width=95% cellspacing=0 cellpadding=0 border=0 bgcolor=e2e2e2 align=center><tr><td>".highlight_string("\\\\1",true)."</td></tr></table>",$comment);

$comment htmlspecialchars($comment);

$comment nl2br($comment);
    
    return 
$comment;
    
// de la function.

//------------------------------------------------
if (isset($go)) {
    
$comentario bbcodes($_POST[comentario]);
    
mysql_query("INSERT INTO comentarios (id_coment, nombre, ip, comentario) values ('1', 'Volrath', '155.155.155.55', '$comentario')");
    
header("Location: comentarios.php");
// del if (go)
?>
y me imprime la tabla que se supone ke es el string replacement del ereg_replace :? :

Código PHP:
<table width=95cellspacing=0 cellpadding=0 border=0 bgcolor=e2e2e2 align=center><tr><td>CONTENIDO</td></tr></table
que puedo hacer :S?
__________________
In a world without walls, who needs Windows?
  #6 (permalink)  
Antiguo 23/12/2003, 03:46
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Antes de hacer el ereg_replace() establece una condicion de modo que si en el texto no existen tags PHP de apertura ("<?=" y "<?") y final ("?>") -con stripos()lo haces- al \\1 de highlight_string() se lo concatenas.
highlight_string("<?php\\1?>",true)."</
  #7 (permalink)  
Antiguo 23/12/2003, 12:39
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 20 años, 7 meses
Puntos: 1
Ok,

probe con lo ke me dijiste, y en el formulario no me servia, asi ke cree otro archivo de prueba asi:

Código PHP:
<?
$comment 
"
[ code ]<?
strtoupper('Fire-Project.com');
?>[ /code ]
"
;

$comment htmlspecialchars($comment);
$comment ereg_replace('\[code\](.*)\[/code\]',"<table width=95% cellspacing=0 cellpadding=0 border=0 bgcolor=e2e2e2 align=center><tr><td>".highlight_string("<? \\\\1 ?>",true)."</td></tr></table>",$comment);
$comment nl2br($comment);

echo 
$comment;
?>
y ahora me crea la tabla, pero dentro d la tabla sale este error en azul:

Código PHP:
<? 

Warning
Unexpected character in input' \\ ' (ASCII=92state=1 in c:appservwwwtestprueba.php on line 11

1 ?>
se me ocurre algo, pero no se si se pueda: es posible sacar a " \\1 " y tratarlo como una variable para poder acomodarlo y que no se vea afectado por el htmlspecialchars que esta arriba?
__________________
In a world without walls, who needs Windows?

Última edición por Volrath; 23/12/2003 a las 12:42
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:55.