Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, beleza total :D?
Bom, queria saber uma coisa.. Estou com um formulario que, ao dar Enviar, passa por um JS e depois, vai para o PHP. Se o php der algum erro, o JS faz um update na div do formulario falando dos erros.
Bom, tudo funciona certinho e maravilhoso. POREM, qualquer coisa escrita no textarea vira uma linha unica, ou seja, os 'enters' / quebra de linha que alguem escreveu nao sao detectados...
EXEMPLO:
"Oi
Meu nome é joao
gostei do seu site
Abs"
Vem assim pra mim
"OiMeu nome é joaogostei do seu siteAbs"
Como faco uma verificacao se existe ou nao quebras, tipo, substitui-las por \n ou <br /> pra nao vir no meu email tudo grudado?
Abaixo, os codigos, caso precisem: (OS $texto['qualquer coisa'] sao as minhas variaveis do sistema multilingua.
FORM
CODE
<div id="contactarea"><form name="contactform" id="contactform" action="">
<table width="100%" border="0" cellspacing="5" cellpadding="5">
<tr>
<td width="50%" align="right" valign="top"><?php echo $texto['contact_name']; ?>:</td>
<td width="50%" align="left" valign="middle"><input type="text" name="name" id="inputbox"></td>
</tr>
<tr>
<td align="right" valign="top">E-mail:<br /><span style="font: 9px Verdana, Arial;color:#FF0000"><?php echo $texto['contact_email_info']; ?></span></td>
<td align="left" valign="middle"><input type="text" name="email" id="inputbox"></td>
</tr>
<tr>
<td align="right" valign="top"><?php echo $texto['contact_sub']; ?>:</td>
<td align="left" valign="middle"><input type="text" name="subject" id="inputbox"></td>
</tr>
<tr>
<td align="right" valign="top"><?php echo $texto['contact_msg']; ?>:</td>
<td align="left" valign="middle"><textarea name="msg" rows="10" id="textarea"></textarea></td>
</tr>
<tr>
<td align="right" valign="top"> </td>
<td align="left" valign="middle">
<input type="button" value="<?php echo $texto['contact_send']; ?>" name="send" id="submitbutton" onclick='sendemail();'></td>
</tr>
</table>
</form>
</div>
JS/AJAX
CODE
function createRequestObject() { var ro;
var browser = navigator.appName;
if(browser == "Microsoft Internet Explorer"){
ro = new ActiveXObject("Microsoft.XMLHTTP");
}else{
ro = new XMLHttpRequest();
}
return ro;
}
var http = createRequestObject();
function sendemail() {
var msg = document.contactform.msg.value;
var name = document.contactform.name.value;
var email = document.contactform.email.value;
var subject = document.contactform.subject.value;
document.contactform.send.disabled=true;
document.contactform.send.value='Enviando|Sending';
http.open('get', 'contact/contact.php?msg='+msg+'&name='+name+'&subject='+subject+'&email='+email+'&action=send');
http.onreadystatechange = handleResponse;
http.send(null);
}
function handleResponse() {
if(http.readyState == 4){
var response = http.responseText;
var update = new Array();
if(response.indexOf('|' != -1)) {
update = response.split('|');
document.getElementById(update[0]).innerHTML = update[1];
}
}
}
PHP QUE ENVIA TUDO (email pra mim com dados + email confirmacao pro contactante)
CODE
<?php
include "../languages/setidioma.php";
if(!isset($_GET['action']))
{
die("You must not access this page directly!"); //Just to stop people from visiting contact.php normally
}
/ Now lets trim up the input before sending it /
$name = trim($_GET['name']); //The senders name
$email = trim($_GET['email']); //The senders email address
$subject = trim($_GET['subject']); //The senders subject
$message = trim($_GET['msg']); //The senders message
if ($name=="" || $email=="" || $subject=="" || $message=="" )
{
echo "contactarea|". $texto['contact_error']."<br /><a href=\"java script:window.location.reload( false );\">".$texto['back']."<a/>";
}
else {
//do email format validation
if(!eregi('^([._a-z0-9-]+[._a-z0-9-])@(([a-z0-9-]+\.)([a-z0-9-]+)(\.[a-z]{2,3})?)$', $email)) {
echo "contactarea|".$texto['invalid_email']."<br /><a href=\"java script:window.location.reload( false );\">".$texto['back']."<a/>";;
exit;
}
$to = "ddl@raphaelddl.com"; //This is the email address you want to send the email to
$noreply = "noreply@raphaelddl.com";
$headers = "From: RaphaelDDL.com <$noreply>\n";
$subjects = "WebSite Contact".$subject;
// Assunto do e-mail auto resposta que o visitante receberá!
$assunto_r = $name.",".$texto['email_resposta_assunto'];
$url_site = "http://raphaelddl.com";
$nome_ass = "Raphael DDL";
// Mensagem que será enviada no e-mail auto resposta!
$resposta =
$name.",".$texto['email_resposta_tex']."\n\n".$nome_ass."\n".$url_site;
$ip = $_SERVER['REMOTE_ADDR']; // Envia o IP do visitante para o seu e-mail!
// (Código 02) Enviar os dados capturados pelo formulário para seu e-mail!
$messages .= "RaphaelDDL.com Contact\n--------------------------\n\n";// Frase que aparecerá no topo da mensagem!
$messages .= "IP registrado: $ip\n\n";
$messages .= "Nome: $name\n";
$messages .= "E-mail: $email\n\n";
$messages .= "Assunto: $subject\n\n";
$messages .= "Mensagem: $message";
//----------------------------------------------------------------------------------------------------------------------//
// Responsável pelo envio do e-mail!
mail($to, $subjects, $messages, $headers);
// Responsável pelo envio da auto resposta!
mail($email, $assunto_r, $resposta, "From: $noreply");
echo "contactarea|<center><img src=\"../images/contact/mail.png\" style=\"width:384px;height:384px;\"><br />".$texto['contact_thx']."</center>";
}
//now lets update the "contactarea" div on the contact.html page. The contactarea| tell's the javascript which div to update.
?>
Já tentei mexer no PHP usando isso:
>
Isso te ajuda ?
http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://br.php.net/manual/pt_BR/function.nl2br.php
Eu coloquei o nl2br no ultimo $messages...
Assim
CODE
$messages .= "Assunto: $subject\n\n";
$messages .= "Mensagem:" nl2br($message);
Nem funciona mais o contact com isso...
Olhei qual o output do JS para o php.. Olha aqui.. Escrevi uns dados quaisquer
no MSG já vem sem quebra de linha... acho que tem que mudar entao é no JS e nao no PHP.............
Alguem me ajuda a remontar o meu JS? http://forum.imasters.com.br/public/style_emoticons/default/clap.gif
>
Isso te ajuda ?
http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://br.php.net/manual/pt_BR/function.nl2br.php
Que legal. Ainda nom sou f*** em PHP, nunca tinha visto isso..
Mas assim,
Exemplo #1 usando nl2br()
<?php
echo nl2br("foo isn't\n bar");
?>
O exemplo acima irá imprimir:
foo isn't<br />
bar
Eu vo ter que falar pra galera escrever o linebreak de php (\n) no formulario ?? SHauSah
Eu coloquei o nl2br no ultimo $messages...
Assim
CODE
$messages .= "Assunto: $subject\n\n";
$messages .= "Mensagem:" nl2br($message);
Nem funciona mais o contact com isso...
Olhei qual o output do JS para o php.. Olha aqui.. Escrevi uns dados quaisquer
no MSG já vem sem quebra de linha... acho que tem que mudar entao é no JS e nao no php, né?
se for, alguem poderia mover o tópico para o JavaScript? Se for no php mesmo, ai dxa aqui xD
Amigo, em seu textarea que você acusa não funcionar a quebra de linha, você coloca apenas isso:
nl2br($var);
>
Amigo, em seu textarea que você acusa não funcionar a quebra de linha, você coloca apenas isso:
nl2br($var);
foi oq eu fiz
Mas ai quando cliquei no enviar, ficou "enviando" forever and ever :blink: :blink: :blink: :blink:
entao troquei.
Coloquei no
$message = trim($_GET['msg']); //The senders message
ficou
$message = trim(nl2br($_GET['msg'])); //The senders message
e ficou mesma coisa....
achu que tinha que ser algo no java, pq o java nao passa pro php as line break, soh passa texto plano
Pede um auxílio na área do java então mano...
Pede um auxílio na área do java então mano...
É.
Peço a qualquer moderador que ler, favor mover este tópico para a seção JavaScript, POR FAVOR.
http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Obrigado Alaerte :D
Antes de mover, observe os seguintes:
1) caso a página pra onde é feita a requisição não imprima nada, não haverá um response, e o script ficara "carregando", como você disse que está. Experimente colocar um texto fora do PHP, e comentar todo o código, só pra ter certeza de que o problema não está no script PHP. Por exemplo, seu arquivo poderia ser isso:
<?php
/**
tudo comentado
*/
?>
texto2) Você não acharia melhor formular um novo tópico lá? digo isto porque este está cheio de respostas, e quanto maior um tópico, menos as pessoas se interessam em participar dele, a não aquele que já estão dentro da discussão.
Mas se mesmo assim você achar por bem mover, tudo bem, eu movo pra lá.
>
Antes de mover, observe os seguintes:
1) caso a página pra onde é feita a requisição não imprima nada, não haverá um response, e o script ficara "carregando", como você disse que está. Experimente colocar um texto fora do PHP, e comentar todo o código, só pra ter certeza de que o problema não está no script PHP. Por exemplo, seu arquivo poderia ser isso:
<?php
/**
tudo comentado
*/
?>
texto2) Você não acharia melhor formular um novo tópico lá? digo isto porque este está cheio de respostas, e quanto maior um tópico, menos as pessoas se interessam em participar dele, a não aquele que já estão dentro da discussão.
Mas se mesmo assim você achar por bem mover, tudo bem, eu movo pra lá.
1>
bom, se acessado diretamente, ele imprime a mensagem lah e dá um die.
se com os parametros todos, ele usa 2 mails e imprime um 'update' na div. O.o~
2> apaga os posts entao e deixa soh o primeiro post meu, pode ser :P?
pq senao vai ser ctrl+c ctrl+v ai o povo vai me xingar pq postei em 2 luar diferente a mesma coisa.
neah
e ja editei o 1o post pra ser o 'post de JS'
DarkDragonLord, o problema se dá antes do PHP receber os dados. O problema é no javascript mesmo. Por exemplo, digite assim: tudo&name=bem
Poderá ser retornado um erro, isso pq, será considerado que você passou 2 vezes a variável name na url. Por isso, ao passar parâmetros para o ajax, deve-se usar uma função para Codificar os valores obtidos em códigos, evitando conflitos com os códigos javascript. Sua função então deveria ficar assim:
function sendemail() {
var msg = escape(document.contactform.msg.value);
var name = escape(document.contactform.name.value);
var email = escape(document.contactform.email.value);
var subject = escape(document.contactform.subject.value);
document.contactform.send.disabled=true;
document.contactform.send.value='Enviando|Sending';
http.open('get', 'contact/contact.php?msg='+msg+'&name='+name+'&subject='+subject+'&email='+email+'&action=send');
http.onreadystatechange = handleResponse;
http.send(null);
}>
DarkDragonLord, o problema se dá antes do PHP receber os dados. O problema é no javascript mesmo. Por exemplo, digite assim: tudo&name=bem
Poderá ser retornado um erro, isso pq, será considerado que você passou 2 vezes a variável name na url. Por isso, ao passar parâmetros para o ajax, deve-se usar uma função para Codificar os valores obtidos em códigos, evitando conflitos com os códigos javascript. Sua função então deveria ficar assim:
function sendemail() {
var msg = escape(document.contactform.msg.value);
var name = escape(document.contactform.name.value);
var email = escape(document.contactform.email.value);
var subject = escape(document.contactform.subject.value);
document.contactform.send.disabled=true;
document.contactform.send.value='Enviando|Sending';
http.open('get', 'contact/contact.php?msg='+msg+'&name='+name+'&subject='+subject+'&email='+email+'&action=send');
http.onreadystatechange = handleResponse;
http.send(null);
}
ALOC!!!!
num sabia dessa ;P
testei aqui e na verdade enviou.. mas por exemplo, testei o nome ser tudo&name=bem... no email que recebi so veio o bem, o JS ignorou o primeiro parametro tudo.
coloquei do jeito que tu falou, agora apareceu tudo&name=bem como nome haushauashsauhashu q f*** http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif
e a mensagem, agora tem quebra de página!!!!! Tu é rox cara http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Aparece assim no meu email:
Nome: tudo&name=bem
E-mail: xxxx@hotmail.com
Assunto: teste2
Mensagem: sasaHushsa<br />
aasdsad<br />
sda<br />
quebra<br />
quebra<br />
tentei uma function de php pra mudar os <br /> pra \n mas sem sucesso
tu sabe se dá pra fazer isso no proprio JS?
EDIT:
Ignore minha lezera.. Eu tinha esquecido de tirar o nl2br da string message XD
agora tá perfeito
TU É 10 MARCOS! MUITO OBRIGADO!
Isso te ajuda ?
http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://br.php.net/manual/pt_BR/function.nl2br.php