Foros del Web » Programando para Internet » PHP »

Como vincular un html a una variable php..

Estas en el tema de Como vincular un html a una variable php.. en el foro de PHP en Foros del Web. buenas, sigo con la creación de la newsletter. tengo un codigo que envia un mail a los usuarios registrados de mi web. lo que hago ...
  #1 (permalink)  
Antiguo 22/10/2003, 05:03
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
Como vincular un html a una variable php..

buenas, sigo con la creación de la newsletter. tengo un codigo que envia un mail a los usuarios registrados de mi web. lo que hago ahora, es copiar el codigo html e introducirlo (sin comillas "), en una variable $mensaje..

$mensaje = "codigo <HTML>";

de esta manera, siempre tengo que copiar el codigo a poner, la cual cosa, siempre tendo que ser yo el administrador. podria conseguir que la varible mensaje, cogiera el texto de una manera más automatizada? podria incluir el archivo html a enviar, como hacen algun programas de newsleeter como Group Mail??

Salu2 y gracias
  #2 (permalink)  
Antiguo 22/10/2003, 06:39
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 14 años, 8 meses
Puntos: 1
puedes utilizar las funciones ob_start() y compañia


Código PHP:
ob_start();
include (
"pagina.html");
$html=ob_get_contents();
ob_end_clean(); 
donde la variable $html contiene toda tu pagina html

espero que te sirva

un saludo

Última edición por Jordi1; 22/10/2003 a las 06:44
  #3 (permalink)  
Antiguo 22/10/2003, 08:08
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
Jordi1, eres un crack!! funciona perfectamente. ahora viene rizar el rizo, podria conseguir que este include, es decir, este archivo, pudiera ser seleccionado por el mismo administrador?? es decir, con un "multipart/form-data"??

no se si me explico, ahora hacemos el include de un archivo que conocemos, pero podriamos seleccionar este archivo html desde nuestro ordenador, subir el que se quiera???

Salu2
  #4 (permalink)  
Antiguo 22/10/2003, 08:16
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
he hecho una prueba, pero no me ha salido. he hecho un archivo de prueba, que tiene un campo de archivo, llamado archivo. en la pagina que envio, boletin.php, he modificado lo siguiente:

ob_start();
include ("$archivo");
$mensaje=ob_get_contents();
ob_end_clean();

el mail se envia, pero me aparece el siguiente mensaje:

Warning: Failed opening '' for inclusion (include_path='./:/usr/local/lib/php') in /home2/creasit/creasites-www/mail/boletin1.php on line 14

que es la linea del include.. donde esta el error??

Salu2
  #5 (permalink)  
Antiguo 22/10/2003, 08:16
 
Fecha de Ingreso: noviembre-2002
Mensajes: 190
Antigüedad: 15 años, 1 mes
Puntos: 0
tendrias primero que hacer el upload en ese caso y luegos darle al script en nombre del archivos

enviar.php?send=pepe.htm
  #6 (permalink)  
Antiguo 22/10/2003, 10:38
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 14 años, 8 meses
Puntos: 1
este error Warning: Failed opening '' for inclusion (include_path='./:/usr/local/lib/php') es porque no encuentra el archivo en el servidor, pues parece ser que tu le das una ruta de tu ordenador.

Si el servidor lo tienes en local pues en el inlcude le das la ruta completa al achivo
$archivo="C:/carpeta/directorio/archivo.htm";

include ($archivo);

y si lo tienes en un server pues mas o mnos lo que dice eresma

tienes de hacer un upload, en el foro tienes muchos ejmeplos , mira por el buscador.

Con el upload este archivo lo vas a colocar en alguna parte, de tu servidor, asi pues la variable $archivo que tienes en el inlcude sera la ruta del archivo en tu servidor.

No se si me explico demasiado bien

saludos
  #7 (permalink)  
Antiguo 22/10/2003, 11:02
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
Buenas, he conseguido solucionar el problema. he subido el archivo al servidor, y me sale todo perfectamente. en el include, le pongo el valor de la variable

//inicio del codigo html del mensaje
ob_start();
include ("$archivo");
$mensaje=ob_get_contents();
ob_end_clean();

ese archivo, es un select que me coge como valor el nombre del html a enviar, que esta subido en el servidor. ahora viene el gran problema...

si tengo este script que me envia el archivo html a todos los mails de una base de datos... como puedo hacer que el html llegue personalizado a cada miembro de la base de datos??

la funcion mail(), tiene limite de envios? como se puede saber las direcciones a las que puedo enviar??


Salu2, gracias!
  #8 (permalink)  
Antiguo 22/10/2003, 11:25
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 14 años, 8 meses
Puntos: 1
me parece que para personalizar los mails ya te comentamos algunos usuarios del foro como podias hacerlo, es solo intentarlo veras que no es complicado.

En cuanto a la funcion mail, pues no se cuantos puede enviar, pero tb, te comentamos que es mejor usar la clase phpmailler, precisamente tienes algo en esta primera pagina

aqui tienes un tutorial en español de esta clase

http://www.programacion.com/php/articulo/phpmailer/

un saludo
  #9 (permalink)  
Antiguo 22/10/2003, 11:54
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
Jordi, ya se que el tema de vincular el nombre me lo comentasteis, pero no soy capaz de dar con ello. ya se que soy un poco pesado, y que no tengo ni idea, o poca, de php, pero mi intención es aprender.

el tema de vincular el nombre y mail no consigo, ya que el script que vinculo, se ejecuta antes que el que envia el mail propiamente. en este ultimo es en el cual selecciono los mails, por lo tanto, no puedo hacer que el script que vinculo tenga el nombre del destinatario del mail...

se me entiende? es dificil de explicar

muchas gracias Jordi1 por tu paciencia conmigo... SALU2
  #10 (permalink)  
Antiguo 22/10/2003, 12:33
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 14 años, 8 meses
Puntos: 1
Imagino que los datos los sacas de un BDD, asi pues te paso una funciocilla que te puede ir bien

Código PHP:
function mostrar_html($tema, $variables)
{  
    $cod = implode("", @file($tema));
    ob_start();
    extract($variables);
    eval('?>'.$cod.'<?);
    
$temp=ob_get_contents();
    
ob_end_clean();
    return 
$temp;
}
Bien te la explico un poco a ver si se:

La variable $tema es la ruta de tu archivo html, el este archivo tienes de configunar las variables que quieras que se personalicen , bien pues escribes esto en donde quieras que se escriba en contenido de una variable, el nombre por ejemplo


Código PHP:

//codigo html ....
Estimado Sr <?=$nombre?>  <?=$apellidos?> :
//codigo html
escribir una variable asi en un archivo html es como si hicieras un echo en un archivo php.

Lo que es importante esque el nombre de las variables coincidan con el campo de tu tabla de la base de datos que quieres que salga en tu email.

bien; y la variable $variables seria el array que te sale despues de la consulta por ejemplo
Código PHP:
$tema="ruta_al_archivo/archivo.htm";
$asunto"prueba de boletin";
$remitente="[email protected]";

$result=mysql_query("SELECT * FROM usuarios ") or die (mysql_error());

while (
$query=mysql_fetch_array($result)){
    
    
$html_personalizadomostrar_html($tema$query)
    
    if(!
mail($query['email'], $asunto$html_personalizado,$remitente))
       echo 
"no se ha podido enviar este ".$query['email'];
       else echo 
"correcto se ha enviado este ".$query['email'];
}
//fin while 
No lo he probado quizas haya algun error de sintaxis o algo que me he olvidado pero mas o menos es asi, solo lo tienes de adaptar a tus necesidades..

Por cierto si tienes de enviar muchos mails pon
set_time_limit(0); para que no se corte, aunque si son muchos miles este script es un poco pobre seria mejor como ya te he dicho antes usar una clase SMTP

espero que te sirva

un saludo
  #11 (permalink)  
Antiguo 23/10/2003, 04:59
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
probe con este codigo...

<?
function mostrar_html($tema, $variables)
{
$cod = implode("", @file($tema));
ob_start();
extract($variables);
eval('?>'.$cod.'<?');
$temp=ob_get_contents();
ob_end_clean();
return $temp;
}

$tema="anuncios.html";
$asunto"prueba de boletin"; (LINE 15 ERROR!)
$remitente="[email protected]";

$result=mysql_query("SELECT * FROM usuarios ") or die (mysql_error());

while ($query=mysql_fetch_array($result)){

$html_personalizado= mostrar_html($tema, $query)

if(!mail($query['email'], $asunto, $html_personalizado,$remitente))
echo "no se ha podido enviar este ".$query['email'];
else echo "correcto se ha enviado este ".$query['email'];
}//fin while

?>

el archivo html, solo tiene como codigo:

Sr: <?=$nombre?>

como tu me has dicho. en la bd de datos solo tengo 2 campos, mail y nombre. pero recibo el mail solo con Sr:.. no me sale el nombre...

que hago mal? que me dejo? el error es:

Parse error: parse error in /home2/creasit/creasites-www/mail/boletin2.php on line 15

Salu2
  #12 (permalink)  
Antiguo 23/10/2003, 05:22
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Se te olvido el = entre la variable y el valor.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #13 (permalink)  
Antiguo 23/10/2003, 05:36
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
xacto :) el fallo esta ahi, en $asunto =

Me da que quieres hacer uso de un sistema de plantillas, por que no revisas post anteriores donde no me acuerdo kien ... estaba programando una clase para hacerlo, pude que te ayude mucho y asi no tengas que hacer uso de eval()
__________________
Usuario registrado de Linux #288725
  #14 (permalink)  
Antiguo 23/10/2003, 05:59
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 14 años, 8 meses
Puntos: 1
tambien tienes de poner ";" en

$html_personalizado= mostrar_html($tema, $query)

y claro esta, poner las funciones de conexion y seleccion de base de datos

Y por supuesto mandar cabeceras de contenido html al email, si no te saldra el codigo , por eso te comentaba en otro post, el usar phpmailler en esa url tienes un tutorial con ejemplos,
http://www.programacion.com/php/articulo/phpmailer/

y lo que dice epplestun , tiene razon es mejor usar clases para plantillas pero creo recordar que ya te lo sugerimos en otro post, y comentaste que se te hacia muy lioso,

Enfin si no tienes de mandar miles esto ya te servira o almenos ver mas o menos como funciona

un saludo

Última edición por Jordi1; 23/10/2003 a las 06:12
  #15 (permalink)  
Antiguo 23/10/2003, 12:01
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
muchas gracias a todos!! ya he conseguido mi objetivo. solo me falta una cosa. he puesto en el mail, que va personalizado, la opcion darse de baja. el problema es que no se como enviar la variable id. tengo lo siguiente..:

<a href="bajas.php?id=$id">aqui</a>

he puesto eso, ya que para mostrar el nombre pongo =$nombre, como envio el id a bajas.php, WHERE id='$id'????


salu2!!!
  #16 (permalink)  
Antiguo 23/10/2003, 12:15
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
habitualmente haria esto...

<a href='borrado_usuarios2.php?vivienda=".$row["vivienda"]."'>;

pero no puedo poner el campo de lka base de datos, no Jordi1? segun tu, hay que poner =$id, me equivico?

el codigo del bajas.php es

$sql="DELETE FROM usuarios WHERE id='$id'";

como le paso el valor $id des del html a la pagina de bajas.php¿¿


Salu2, y gracias!
  #17 (permalink)  
Antiguo 23/10/2003, 12:16
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 14 años, 8 meses
Puntos: 1
FerranWEB no ves la logica del script??

Pues para poner la variable en tu archvo html pones lo mismo que para nombre

<a href="bajas.php?id=<?=$id?>">aqui</a>

El $id imagino que lo sacas de la BDD con el nombre de campo id no??

un saludo
  #18 (permalink)  
Antiguo 23/10/2003, 12:23
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
problema solucionado Jordi1!!!! definitiviamente solucionado. he puesto lo siguiente:

baja.php?id=<?=$id?>

y lo borra perfectamente. ahora, una vez borrado, me enviare un mail para tener constancia de quien se de de baja.

Muchas gracias Jordi1, y a todos los que me habeis ayudado!!

Salu2 desde BCN!!!
  #19 (permalink)  
Antiguo 23/10/2003, 12:48
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
por ultimo Jordi1, ahora consigo enviar los mails personalizados, pero no el mail que yo quiero (el include que me dijistes). como quedaria una mezcla de estas dos funciones, pq me dan error cuando las modifico!! quiero una única, que me coja el include y que me vincule los html..


function mostrar_html($tema, $variables)
{
$cod = implode("", @file($tema));
ob_start();
extract($variables);
eval('?>'.$cod.'<?');
$temp=ob_get_contents();
ob_end_clean();
return $temp;
}


ob_start();
include ("$archivo");
$mensaje=ob_get_contents();
ob_end_clean();

como pongo estas dos funciones a la vez??

Salu2
  #20 (permalink)  
Antiguo 23/10/2003, 14:03
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
como combino estos dos codigos?? necesito vincular el html, y poder hacer un include del nombre del archivo que me interese..

Salu2
  #21 (permalink)  
Antiguo 23/10/2003, 14:15
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 14 años, 8 meses
Puntos: 1
no entiendo muy bien lo que me quieres decir

imagino que quieres llamar al archivo html que quieras si es asi, pues lo haces al llamar la funcion

$mensage=mostrar_html($archivo, $query_bdd)

a ver si es eso
  #22 (permalink)  
Antiguo 23/10/2003, 14:16
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
A ver, prueba:
Código PHP:
function mostrar_html($tema$variables)
{
extract($variables);
ob_start();
include (
"$tema");
$temp=ob_get_contents();
ob_end_clean();
return 
$temp;

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 22:50.