Avatar billede musiki Nybegynder
26. januar 2009 - 16:52 Der er 16 kommentarer og
1 løsning

Ikke-udfyldte bokse påvirker mailopsætning

Hej eksperter,
jeg har lavet et PHP script der egentligt fungerer udemærket, problemet er dog at mailen den sender ud er mere omfattende end den behøver at være.

Klikker man eksempelvis service 1, 4 og 5 af - viser min mail følgende:

Service: 1; ; ;4 og 5

Jeg vil gerne have mail-formen til at vælge de produkter der hakket af således:

Service 1; 4 og 5

Så de ikke-valgte produkter ikke påvirker mailen. Her er en stærkt reduceret udgave af min mail-funktion:


$message = "Nedenstående er blevet bestilt af:

$yourname
$add1
$add2 $add3
$email3
$telefon

Kontaktperson:
$kyourname
$ktelefon


Bestilling:
Produkt: $produkt1 ;  $produkt2 ;  $produkt3 ;  $produkt4 og $produkt5

Accepterer handelsbetingelserne: $handel

Evt. bemærkning:
$comments

";

mail($myemail, Bestilling, $message);




Kan jeg ved at rette i den opnå det jeg vil, eller kan det evt. laves via en ekstra funktion der arbejder udfra $produkt#-værdierne?

På forhånd tak for hjælpen; det er rart at have et sted hvor man kan blive klogere.
Avatar billede tmi Nybegynder
26. januar 2009 - 17:15 #1
<label><input type='checkbox' name='produkt[]' value='1' /> Bestil produkt 1</label>
<label><input type='checkbox' name='produkt[]' value='2' /> Bestil produkt 2</label>
<label><input type='checkbox' name='produkt[]' value='3' /> Bestil produkt 3</label>
<label><input type='checkbox' name='produkt[]' value='4' /> Bestil produkt 4</label>
<label><input type='checkbox' name='produkt[]' value='5' /> Bestil produkt 5</label>

Bestilling:
Produkt: ".(($last = $_POST['produkt']) && count($_POST['produkt']) ? implode(", ",$_POST['produkt'])." og ".$_POST['produkt'] : $_POST['produkt']).".

Bla bla..

Er det sådan du mener?
Avatar billede tmi Nybegynder
26. januar 2009 - 17:17 #2
Der skulle stå:

Bestilling:
Produkt: ".(($last = array_pop($_POST['produkt'])) && count($_POST['produkt']) ? implode(", ",$_POST['produkt'])." og ".$last : $last.".

Bla bla..
Avatar billede musiki Nybegynder
26. januar 2009 - 18:18 #3
Hej TMI, jeg værdsætter din hjælp.

Når jeg bare kopierer det du har foreslået ind får jeg fejlmeddelsen:
Parse error: syntax error, unexpected '<' på første linie du har skrevet.

Værdierne har jeg forresten defineret i begyndelsen af scriptet - og i html arket scriptet arbejder ud fra.

Script:

$produkt1  = check_input($_POST['produkt1']);
$produkt2  = check_input($_POST['produkt2']);
$produkt3  = check_input($_POST['produkt3']);
$produkt4  = check_input($_POST['produkt4']);
$produkt5  = check_input($_POST['produkt5']);


HTML:
<p><strong>Produktliste:</strong><br />
  <input type="checkbox" name="produkt1" value="Bestil produkt 1" />
  Bestil produkt 1
  <br />
    <input type="checkbox" name="produkt2" value="Bestil produkt 2" />
  Bestil produkt 2
  <br />
    <input type="checkbox" name="produkt3" value="Bestil produkt 3" />
  Bestil produkt 3
  <br />
    <input type="checkbox" name="produkt4" value="Bestil produkt 4" />
  Bestil produkt 4
  <br />
    <input type="checkbox" name="produkt5" value="Bestil produkt 5" />
  Bestil produkt 5
Avatar billede tmi Nybegynder
26. januar 2009 - 18:31 #4
Jeg mente du skulle gøre sådan her:

HTML:
<p><strong>Produktliste:</strong><br />
  <input type="checkbox" name="produkt[]" value="Produkt 1" />
  Bestil produkt 1
  <br />
    <input type="checkbox" name="produkt[]" value="Produkt 2" />
  Bestil produkt 2
  <br />
    <input type="checkbox" name="produkt[]" value="Produkt 3" />
  Bestil produkt 3
  <br />
    <input type="checkbox" name="produkt[]" value="Produkt 4" />
  Bestil produkt 4
  <br />
    <input type="checkbox" name="produkt[]" value="Produkt 5" />
  Bestil produkt 5

PHP:

$products = $_POST['produkt'];

$message = "Nedenstående er blevet bestilt af:

$yourname
$add1
$add2 $add3
$email3
$telefon

Kontaktperson:
$kyourname
$ktelefon


Bestilling:
Produkt: ".(($last = array_pop($products)) && count($products) ? implode(", ",$products)." og ".$last : $last).".

Accepterer handelsbetingelserne: $handel

Evt. bemærkning:
$comments

";
Avatar billede musiki Nybegynder
27. januar 2009 - 00:46 #5
Det er simpelthen perfekt! Mange tak for hjælpen; hvis du smider et svar skal du få nogle velfortjente point
Avatar billede tmi Nybegynder
27. januar 2009 - 01:03 #6
Selv tak =)
Avatar billede musiki Nybegynder
27. januar 2009 - 22:02 #7
Hej TMI, det kan være du også kan hjælpe mig her.

Jeg har forsøgt at inkludere en dropdown-menu, og det fungerer også fint når den er i brug.

  <select name="produkt[]">
      <option value=""> -- Nej tak -- </option>
      <option>Bestil produkt 6A</option>
      <option>Bestil produkt 6B</option>
      <option>Bestil produkt 6C</option>
      <option>Bestil produkt 6D</option>
    </select>


Men når man bare lader den stå på 'Nej tak' - så kommer ingen af de produkter valgt i checkboxene med.

Lyder det ikke underligt?
Avatar billede tmi Nybegynder
27. januar 2009 - 23:44 #8
Jo, det kan ikke passe. Måske kommer du til at ændre værdierne i din PHP kode.
Avatar billede musiki Nybegynder
28. januar 2009 - 00:08 #9
Det er rigtigt nok at jeg har ændret lidt i PHP koden - men jeg er ret sikker på det kun er af designmæssig betydning.

HTML koden ser sådan her ud nu:
<form action="kontakt.php" method="post">
<p><strong>Produktliste:</strong><br />
  <input type="checkbox" name="produkt[]" value="Produkt 1" />
  Bestil produkt 1
  <br />
    <input type="checkbox" name="produkt[]" value="Produkt 2" />
  Bestil produkt 2
  <br />
    <input type="checkbox" name="produkt[]" value="Produkt 3" />
  Bestil produkt 3
  <br />
    <input type="checkbox" name="produkt[]" value="Produkt 4" />
  Bestil produkt 4
  <br />
    <input type="checkbox" name="produkt[]" value="Produkt 5" />
  Bestil produkt 5</p>
 
  <select name="produkt[]">
      <option value=""> -- Nej tak -- </option>
      <option>Bestil produkt 6A</option>
      <option>Bestil produkt 6B</option>
      <option>Bestil produkt 6C</option>
      <option>Bestil produkt 6D</option>
    </select>
   
<p><input type="submit" value="Bestil"></p>

</form>



PHP koden således:

$comments = check_input($_POST['comments']);

$products = $_POST['produkt'];

$message = "Nedenstående er blevet bestilt af:

Bestilling:
Produkt: ".(($last = array_pop($products)) && count($products) ? implode("
",$products)."
og ".$last : $last).".

Evt. bemærkning:
$comments

";

mail($myemail, Bestilling, $message);




Sådan ser mailen ud når jeg bestiller produkt 2,4 og 5 + 6c:

Nedenstående er blevet bestilt af:

Bestilling:
Produkt: Produkt 2
Produkt 4
Produkt 5
og Bestil produkt 6C.

Evt. bemærkning:


Men når jeg vælger samme produkter - men ikke vælger noget fra dropdown menuen:
Nedenstående er blevet bestilt af:

Bestilling:
Produkt: .

Evt. bemærkning:





TMI, det er fedt at du gider at hjælpe !
Avatar billede musiki Nybegynder
28. januar 2009 - 12:03 #10
Det var underligt: Når jeg sætter et mellemrum ind i option value sker der ingen fejl, godt nok er der et halvirriterende mellemrum i emailen - men det overlever folk nok.

    <option value=" "> -- Nej tak -- </option>

Eller kan det løses på en anden måde?
Avatar billede tmi Nybegynder
28. januar 2009 - 19:57 #11
Ah, det er pga.: $last = ($last = array_pop($products))
der skal rettes til: (($last = array_pop($products)) !== NULL)

Men så vil den bare skrive " og " efterfulgt af ingenting. I stedet skal du gøre sådan her:

$products = $_POST['produkt'];
foreach ($products as $k => $v) if (!$v) unset($products[$k]);
Avatar billede musiki Nybegynder
28. januar 2009 - 21:44 #12
nårjeg bare erstatter

$products = $_POST['produkt'];

med

$products = $_POST['produkt'];
foreach ($products as $k => $v) if (!$v) unset($products[$k]);

i to linier, så sker der ingenting. Heller ikke når jeg oveni det indsætter:

Bestilling:
".((($last = array_pop($products)) !== NULL) && count($products) ? implode("
",$products)."
".$last : $last).".
Avatar billede tmi Nybegynder
28. januar 2009 - 22:01 #13
Hvad skriver den her?

$products = $_POST['produkt'];
foreach ($products as $k => $v) if (!$v) unset($products[$k]);
die(print_r($products, true));
Avatar billede musiki Nybegynder
29. januar 2009 - 00:54 #14
Nu printer den samtlige produkter, og tæller dem, jeg har valgt på en website der ender med /kode.php

Sådan her:

Array ( [0] => Produkt 1 [1] => Produkt 2.....)
Avatar billede musiki Nybegynder
29. januar 2009 - 00:57 #15
Har lige tænkt mig om, det er nok det her du ville undersøge:

Array ( [0] => Produkt 1 [1] => Produkt 2 [2] => [3] => [4] => Produkt 6C...)
Avatar billede tmi Nybegynder
29. januar 2009 - 12:53 #16
Ja, pointen er at du skal fjerne dem der er tomme først, og det ser ud til at nr. 2 og nr. 3 er tomme. Hvorfor den ikke har fjernet dem ved jeg ikke, prøv det her i stedet:

$products = $_POST['produkt'];
foreach ($products as $k => $v) if (!trim($v)) unset($products[$k]);
Avatar billede musiki Nybegynder
29. januar 2009 - 21:28 #17
Nu virker det! Behøver vist ikke fortælle dig at du er genial: Endnu engang tak for hjælpen
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