Avatar billede bono Nybegynder
30. juli 2004 - 22:22 Der er 10 kommentarer og
1 løsning

Warning: Cannot add header information

Hejsa !

Jeg er igang med at lave et simpelt system til, at sende nyhedsbreve ud med. Er ved delen der skal sende mailen problemet er at jeg får dette svar når jeg trykker på send

Warning: Cannot add header information - headers already sent by (output started at /customers/ribeklatreklub.dk/ribeklatreklub.dk/httpd.www/sendnyhed.php:4) in /customers/ribeklatreklub.dk/ribeklatreklub.dk/httpd.www/sendnyhed.php on line 26

scriptet ser således ud:

<?php /* Created on: 30-07-2004 */ ?>
<html>
<body>
<?php
if ($_POST[op] != "send") {
  print "
  <HTML>
  <HEAD>
  <TITLE>Send Nyhedsbrev</TITLE>
  </HEAD>
  <BODY>
  <h1>Send Nyhedsbrev</h1>
  <form method=\"post\" action=\"$_SERVER[PHP_SELF]\">
  <P><strong>Emne:</strong><br>
  <input type=\"text\" name=\"subject\" size=30></p>
  <P><strong>Mailen:</strong><br>
  <textarea name=\"message\" cols=50 rows=10 wrap=virtual></textarea>
  <input type=\"hidden\" name=\"op\" value=\"send\">
  <p><input type=\"submit\" name=\"submit\" value=\"Send\"></p>
  </FORM>
  </BODY>
  </HTML>";
 
} else if ($_POST[op] == "send") {
    if (($_POST[subject] =="") == ($_POST[message] == "")) {
      header("location: sendnyhed.php");
      exit;
  }
 
  $conn = mysql_connect("xxxxx", "xxxxx", "xxxxxx")
        or die(mysql_error());
  mysql_select_db("xxxxxx",$conn) or die(mysql_error());
 
  $sql = "select email from subscribers";
  $result = mysql_query($sql,$conn) or die(mysql_error());
 
  $headers = "Fra: Ribe Klatreklubs Nyhedsbrev <webmaster@ribeklatreklub.dk>";
 
  while ($row = mysql_fetch_array($result)) {
      set_time_limit(0);
      $email = $row['email'];
      mail("$email", stripslashes($_POST[subject]),
            stripslashes($_POST[message]), $headers);
      print "Nyhedsbrevet er sendt til: $email<br>";
  }
}
?>
</body>
</html>

Hvordan får jeg løst problemet så den sender nyhedsbrevet ?
Avatar billede terrak Nybegynder
30. juli 2004 - 22:32 #1
Normalt må man ikke sende noget til browseren før headers, og i dit script bliver der skrevet <html> og <body> først, uanset hvilke variabler der er sat.
Avatar billede bono Nybegynder
30. juli 2004 - 22:38 #2
Hmmm så må det være en fejl i scriptet i den bog, jeg har hentet det fra..., nogen mulighed for at få det løst ?
Avatar billede terrak Nybegynder
30. juli 2004 - 22:39 #3
Skal du ikke også kun bruge <html> og <body> i linjen
print "Nyhedsbrevet er sendt til: $email<br>";
? For så er det jo bare at smide <html><body> ..kode.. </body></html> ind rund omkring det der står ;)

Sådan som det er nu bliver der skrevet <html></html> og <body></body> 2 gange - og det er vist ikke helt lovligt :)

Et ringe alternativ ville være at erstatte din header kode med echo "<script type='text/javascript'>document.location.href='sendnyhed.php';</script>";
Avatar billede bono Nybegynder
30. juli 2004 - 22:46 #4
Jeg har prøvet og fjerne de ekstra <HTML> + <BODY>, det fjerner fejlen, men der bliver ikke sendt noget - selvom der er adresser at sende til...
Avatar billede bono Nybegynder
30. juli 2004 - 22:49 #5
Jeg ved så ikke om det kan have noget at gøre med at jeg rettede
if (($_POST[subject] =="") == ($_POST[message] == "")) { til if (($_POST[subject] =="") ¦¦ ($_POST[message] == "")) { som det står i bogen.
Jeg rettede ¦¦ til == da jeg ellers fik beskeden Parse error: parse error, unexpected T_STRING in /customers/ribeklatreklub.dk/ribeklatreklub.dk/httpd.www/sendnyhed.php on line 25
Avatar billede bono Nybegynder
30. juli 2004 - 22:49 #6
ups rettelse:
jeg rettede
if (($_POST[subject] =="") ¦¦ ($_POST[message] == "")) { til if (($_POST[subject] =="") == ($_POST[message] == ""))
Avatar billede terrak Nybegynder
30. juli 2004 - 22:52 #7
Jeg tror det du leder efter er || tegn som er et alias for "OR"(Jeg ved ikke hvordan du har båret dig ad med at skille stregen ad ;)).
Avatar billede terrak Nybegynder
30. juli 2004 - 22:55 #8
== er altså ikke den rette løsning.
Avatar billede bono Nybegynder
30. juli 2004 - 22:56 #9
Det var lige det sidste der var problemet - nu virker scriptet ! Tak for det !
Avatar billede bono Nybegynder
30. juli 2004 - 23:03 #10
Hmmm der sagde jeg vist for meget - nu opstår fejlen: Warning: Cannot set time limit in safe mode in /customers/ribeklatreklub.dk/ribeklatreklub.dk/httpd.www/sendnyhed.php on line 40
Avatar billede terrak Nybegynder
30. juli 2004 - 23:19 #11
Jeg har kigget lidt på koden og optimeret den lidt, så den nu skulle virke. Angående fejlmeddelelsen, så er den eneste løsning at fjerne set_time_limit(0); da du ikke kan ændre det i safe mode.

<?php
if (isset($_POST['op']) && $_POST['op'] == "send") {

if (isset($_POST['subject'], $_POST['message']) && ($_POST['subject'] == "" || $_POST['message'] == "")) {
header("location: sendnyhed.php");
exit;
}

$conn = mysql_connect("xxxxxx", "xxxxxx", "xxxxxx") or die(mysql_error());
mysql_select_db("xxxx") or die(mysql_error());

$result = mysql_query("select `email` from `subscribers`") or die(mysql_error());

$headers = "Fra: Ribe Klatreklubs Nyhedsbrev <webmaster@ribeklatreklub.dk>";
$sentto = "";

while ($row = mysql_fetch_array($result)) {
set_time_limit(0);
$email = $row['email'];

if (mail($email, stripslashes($_POST['subject']), stripslashes($_POST['message']), $headers)) {
$sentto .= "Nyhedsbrevet er sendt til: $email<br />";
} else {
$sentto .= "<em>Nyhedsbrevet kunne ikke sendes til: $email</em><br />";
}

}
echo "<html><body>".$sentto."</body</html>";
} else {

  print "
  <HTML>
  <HEAD>
  <TITLE>Send Nyhedsbrev</TITLE>
  </HEAD>
  <BODY>
  <h1>Send Nyhedsbrev</h1>
  <form method=\"post\" action=\"$_SERVER[PHP_SELF]\">
  <P><strong>Emne:</strong><br>
  <input type=\"text\" name=\"subject\" size=30></p>
  <P><strong>Mailen:</strong><br>
  <textarea name=\"message\" cols=50 rows=10 wrap=virtual></textarea>
  <input type=\"hidden\" name=\"op\" value=\"send\">
  <p><input type=\"submit\" name=\"submit\" value=\"Send\"></p>
  </FORM>
  </BODY>
  </HTML>";
 

}
?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester