Avatar billede arnbjerg Nybegynder
27. november 2009 - 16:45 Der er 21 kommentarer og
1 løsning

Problemer ned if else og lagring af data

Hej

Jeg har endnu et problem med min mailform (se http://www.eksperten.dk/spm/893760).

Jeg vil gerne sende forskellige mails, afhængig af om checkboxen er afkrydset eller ej, men jeg kan ikke få det til at virke.

Jeg har forsøgt at ændre faerdig.php til:

<?php

mail('my@mail.dk', 'Bestilling', $_POST['oplysninger'], "From: server@mail.dk");
if($_POST['box'] == 'ja') {
  if(mail('some@mail.dk', 'Kontakt', $_POST['aftale'], "From: server@mail.dk"));
  }
if($_POST['box'] == 'ja') {
  if(mail($_POST['mail'], 'Bestilling', $_POST['bruger_m'], "From: server@mail.dk"));
  }
  else {(mail($_POST['mail'], 'Bestilling', $_POST['bruger_u'], "From: server@mail.dk"));
  }
  header("location: tak.php");

?>

Resultatet er, at brugeren ikke modtager noget som helst, men den viser heller ikke fejl. :-(

Er der nogen der kan fortælle mig hvad der er galt?

Jeg kunne også godt tænke mig at lagre 'oplysninger' i en txt fil. Det virker fint, hvis jeg sætter nedenstående ind i bekraeft.php, men jeg kan ikke få det til at virke fra faerdig.php. Hvordan gør jeg?

$File = "Data.txt";
$Handle = fopen($File, 'a');
$Data = "$dato, $klokken, Firma: $firma, Navn: $navn, Adresse: $adresse, $adresse2, Postnummer: $postnr, By: $by, Land: $country, Telefon: $tlf, E-mail adresse: $mail\n";
fwrite($Handle, $Data);
fclose($Handle);
Avatar billede Slettet bruger
27. november 2009 - 17:14 #1
Virker det uden formen? - erstat din-mail-her og kør denne linje for sig selv:

mail('my@mail.dk', 'Bestilling', 'din-mail-her', "From: server@mail.dk");


Til at checke om en box er sat, skal du i stedet bruge isset():

if(isset($_POST['box'])) {
  ...

En checkbox poster ikke noget, hvis den ikke er checked. Hvis den er checked poster den value propertien på checkboxen.

/1
Avatar billede erle Nybegynder
27. november 2009 - 17:14 #2
Hvad bruger du som SMTP server?
Er den tilføjet til dine PHP indstillinger?
Avatar billede Slettet bruger
27. november 2009 - 17:16 #3
Sorry - læste ikke lige parametrene til din mail funktion ordentligt igennem.

Men prøv alligevel først med statisk data og få det til at virke før du smider post data på:

mail('my@mail.dk', 'Bestilling', 'body', "From: server@mail.dk");
Avatar billede arnbjerg Nybegynder
27. november 2009 - 17:21 #4
Det har jeg vist allerede prøvet her (det virker fint):

<?php

mail('my@mail.dk', 'Bestilling', $_POST['oplysninger'], "From: server@mail.dk");
mail($_POST['mail'], 'Bestilling', $_POST['bruger'], "From: server@mail.dk");
if($_POST['box'] == 'ja') {
  if(mail('some@mail.dk', 'Kontakt', $_POST['aftale'], "From: server@mail.dk"));
}
  header("location: tak.php");

?>

Eller hvad mener du?
Avatar billede Slettet bruger
27. november 2009 - 17:37 #5
Hvilke mails bliver ikke sendt?

prøv at udskrive dine postvariable (Se kildekoden for siden efterfølgende, da print_r ikke laver html formatering):
print_r($_POST);
Avatar billede Ewade Nybegynder
27. november 2009 - 17:39 #6
<?php

mail('my@mail.dk', 'Bestilling', $_POST['oplysninger'], "From: server@mail.dk");

if($_POST['box'] == 'checked') {
  if(mail('some@mail.dk', 'Kontakt', $_POST['aftale'], "From: server@mail.dk"));
  }

if($_POST['box'] == 'checked') {
  if(mail($_POST['mail'], 'Bestilling', $_POST['bruger_m'], "From: server@mail.dk"));
  }  else {
  (mail($_POST['mail'], 'Bestilling', $_POST['bruger_u'], "From: server@mail.dk"));
  }
 
  header("location: tak.php");

?>


Prøv med det, mener det er checked og unchecked den sender :). (en isset virker også lige så fint, som foreslået af kvadratrodenaf1
Avatar billede Slettet bruger
27. november 2009 - 17:55 #7
Den sender "checked", hvis ingen default værdi er sat.
Du får ikke nogen fejl/warning, fordi de er disabled i din php-opsætning.
Den korrekte måde at gøre det på, er at bruge isset, fordi du skal checke, om værdien eksisterer (checkboxen er sat). Hvis du ikke checker om værdien eksisterer, vil du få warnings, hvis du kører din kode på en anden php-opsætning.

/1
Avatar billede preppydude Nybegynder
27. november 2009 - 17:58 #8
En checkbox sender enten en tom string hvis ikke den er tjekket, eller dens value hvis den er. Altså, følgende ville sende test, såfremt den var checked:

<input type="check" value="test" name="chkBox" />
<?php
$chkBoxChecked = (isset($_POST['chkBox']) && !empty($_POST['chkBox']));
?>
Avatar billede arnbjerg Nybegynder
27. november 2009 - 18:09 #9
Ewade

Hvis jeg bruger din kode, modtager 'my@mail.dk' dataene fint (dog uden checkboxen), brugeren modtager en tom mail og 'some@mail.dk' modtager ingenting....?
Avatar billede arnbjerg Nybegynder
27. november 2009 - 18:45 #10
Jeg tør næsten ikke sige det, men jeg havde ikke lige fået sendt bruger_u og bruger_m afsted fra bekraeft.php :D

Faktum er, at det fik næsten hele din kode til at virke. Blot virker det ikke hvis checkboxen ikke er afkrydset. 'some@mail.dk' modtager ingenting og informationen om afkrydningen mangler i mailen til 'my@mail.dk'.
Avatar billede Slettet bruger
27. november 2009 - 18:50 #11
post print_r her og beskriv under hvilke forudsætninger, de forskellige mails skal sendes.
Avatar billede Slettet bruger
27. november 2009 - 19:01 #12
#8: "En checkbox sender enten en tom string hvis ikke den er tjekket, eller dens value hvis den er"

Der sendes ikke en tom string - se dokumentation her:
http://www.w3.org/TR/html401/interact/forms.html#checkbox
En checkbox er ikke successful, hvis den ikke er checked, og bliver derfor ikke submitted.
http://www.w3.org/TR/html401/interact/forms.html#successful-controls

Måden at checke om en checkbox er sat er altså med isset(). At teste på en 0-længde string er altså at udnytte PHPs løse error policy.

/1
Avatar billede arnbjerg Nybegynder
27. november 2009 - 19:33 #13
Hele smørren kan ses her: http://www.eksperten.dk/spm/893760.
Blot har jeg ændret færdig.php til:

<?php

mail('my@mail.dk', 'Bestilling', $_POST['oplysninger'], "From: server@mail.dk");

if($_POST['box'] == 'ja') {
  if(mail('some@mail.dk', 'Kontakt', $_POST['aftale'], "From: server@mail.dk"));
  }

if($_POST['box'] == 'ja') {
  if(mail($_POST['mail'], 'Bestilling', $_POST['bruger_m'], "From: server@mail.dk"));
  }  else {
  (mail($_POST['mail'], 'Bestilling', $_POST['bruger_u'], "From: server@mail.dk"));
  }
 
  header("location: tak.php");

?>

og sat

<input type="hidden" name="bruger_m" value="<?php echo $bruger_m ?>" />
<input type="hidden" name="bruger_u" value="<?php echo $bruger_u ?>" />

ind i formen på bekraeft.php og selvfølgelig defineret både bruger_m og bruger_u.

Jeg vil gerne have den til at sende bruger_u hvis checkboxen ikke er afkrydset og bruger_m hvis den er :D
Avatar billede Slettet bruger
27. november 2009 - 19:46 #14
<?php
    mail('my@mail.dk', 'Bestilling', $_POST['oplysninger'], "From: server@mail.dk");
    if(isset($_POST['box'])){
        mail('some@mail.dk', 'Kontakt', $_POST['aftale'], "From: server@mail.dk");
        mail($_POST['mail'], 'Bestilling', $_POST['bruger_m'], "From: server@mail.dk");
    }else{
        mail($_POST['mail'], 'Bestilling', $_POST['bruger_u'], "From: server@mail.dk");
    }
    header("location: tak.php");
?>
Avatar billede arnbjerg Nybegynder
27. november 2009 - 20:25 #15
Jamen så virker det jo :D

Har du også et løsningsforslag på hvordan jeg får gemt data i et txt dokument?

Jeg kan få det til at virke, hvis jeg sætter koden ind på bekræftelses siden, men så poster den jo før brugeren har bekræftet. Jeg kan simpelthen ikke få det til at virke, hvis jeg sætter det ind på "faerdig.php".

$File = "Data.txt";
$Handle = fopen($File, 'a');
$Data = "$dato, $klokken, Firma: $firma, Navn: $navn, Adresse: $adresse, $adresse2, Postnummer: $postnr, By: $by, Land: $country, Telefon: $tlf, E-mail adresse: $mail\n";
fwrite($Handle, $Data);
fclose($Handle);
Avatar billede Slettet bruger
27. november 2009 - 20:39 #16
Du kan jo smide det som et hidden felt i din form.
Avatar billede arnbjerg Nybegynder
27. november 2009 - 20:48 #17
jo, men hvad gør jeg så  i faerdig.php?
Avatar billede Slettet bruger
27. november 2009 - 20:56 #18
Bekraeft.php:

$Data = "$dato, $klokken, Firma: $firma, Navn: $navn, Adresse: $adresse, $adresse2, Postnummer: $postnr, By: $by, Land: $country, Telefon: $tlf, E-mail adresse: $mail\n";
<input type='hidden' name='data' value='" . $Data . "'>

faerdig.php:

$File = "Data.txt";
$Handle = fopen($File, 'a');
fwrite($Handle, $_POST['data']);
fclose($Handle);
Avatar billede arnbjerg Nybegynder
27. november 2009 - 21:15 #19
Så skriver en bare " . $Data . " i Data.txt
Avatar billede Slettet bruger
27. november 2009 - 21:22 #20
Det er fordi det skal være inden for php tags:

<?php
echo "<input type='hidden' name='data' value='" . $Data . "'>";
?>

eller <input type='hidden' name='data' value='<?php echo $Data;?>'>

/1
Avatar billede arnbjerg Nybegynder
27. november 2009 - 21:33 #21
Tusind tak. Er du sød at svare?
Avatar billede Slettet bruger
27. november 2009 - 21:36 #22
Yes, svar.

/1
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