Avatar billede ptj_11 Forsker
06. marts 2017 - 23:00 Der er 7 kommentarer og
2 løsninger

Nok en kontaktform

Først og fremmest en grundlæggende oplysning til jer i denne kategori:
Jeg har med åbne øjne rodet mig ud, hvor jeg ikke kan bunde. Ellers lærer man aldrig noget nyt!

Jeg har fundet mig denne "kodestump".
Jeg kan godt få det til at virke et stykke af vejen. men jeg ønsker at ændre koden, så personen, der afsender kontaktmeddelelsen bliver tvunget til aktivt at vælge, hvilken modtager, meddelelsen skal sendes til ud fra en liste med mailadresser:
Selve koden:
<form method="post" action="sender.php">

<fieldset>
<legend>Husk at udfylde alle felter</legend>

<label for="t1">Navn:</label>
<input id="t1" type="text" name="name" /><br />

<label for="t2">Email:</label>
<input id="t2" type="text" name="email" /><br />

<label for="t3">Emne:</label>
<input id="t3" type="text" name="subject" /><br />

<label for="t4">Besked:</label>
<textarea id="t4" name="message" rows="10" cols="49"></textarea><br />

<label for="t5">Kopi til dig?</label>
<input type="checkbox" id="t5" name="customer_copy" checked="checked" /><br />

<label for="auth">Verifikation:</label>
<span style="float:left;margin-right=10px;">
<input type="password" id="auth" name="auth" />
<br />Indtast kode for<br />at sende mail!
</span>
<img src="verify.php" alt="auth" /><br />

<label for="t6"> </label><input id="t6" type="submit" name="submit" value=" Send mail " />
&nbsp; &nbsp; <input type="reset" value=" Slet alt " />
</fieldset>
</form>

Er der nogen af jeg kodekloge, der kan komme med et bud.
Helst ikke alt for indforstået, da kodning ikke er min stærke side.
/ptj_11
Avatar billede Slater Ekspert
07. marts 2017 - 08:29 #1
Det kan vi ikke se ud fra dette. Lige nu sendes kun afsenderens e-mail med, ikke modtagerens, så vi kan ikke sige om sender.php tillader at modtagerens e-mail også sendes, uden at se sender.php

Hvis den tager det som et parameter, er det ret let at lave med en select menu - men du skal huske, at i så fald står alle modtager-e-mails frit tilgængelig i HTML-koden og kan opfanges af spam robotter. Det ville være bedre at lagre dem server-side, men også en smule mere kompliceret.
Avatar billede olsensweb.dk Ekspert
07. marts 2017 - 15:51 #2
>Det ville være bedre at lagre dem server-side, men også en smule mere kompliceret.
helt klart den bedste løsning, og så bare sende mailaddressens "id" med over i select boxens value.
om du så har et array eller slår det op i en database er ligegyldigt, teksen i din selectbox dannes ud fra sammen array/database

her er lidt du kan kigge på. og arbejde ud fra
<?php
// kunne være database, så bruger info kun står et sted
$users = array(   
    array('id' => 1, 'name' => 'anders and', 'email' => 'anders.and@andeby.com'),
    array('id' => 6, 'name' => 'rip and', 'email' => 'rip.and@andeby.com'),
    array('id' => 3, 'name' => 'rap and', 'email' => 'rap.and@andeby.com'),
    array('id' => 4, 'name' => 'rup and', 'email' => 'rup.and@andeby.com')
);
$errors = array();

//print_r($users);
if (isset($_POST['to_user'])) {
    // hentning og validering af data fra formen
    $to_user_id = $_POST['to_user'];
    if ($to_user_id > 0) {
        // henter brugerens info
        // bør være et database opslag
        foreach ($users as $key => $value) {
            if ($value['id'] == $to_user_id) {
                $user = $value;
            }
        }
        $to_user = $user['name'] . " <" . $user['email'] . ">";
        // her skal mailen sendes
        print_r($to_user);
    } else {
        $errors[] = "der mangler valg af bruger";
    }
}
?>
<!DOCTYPE html>
<html lang="da">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
        <title>demo</title>
        <style type="text/css">
        </style>
    </head>
    <body>
        <?php
        if (count($errors) > 0) {
            print_r($errors);
        }
        ?>
        <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
            <fieldset>
                <legend>Husk at udfylde alle felter</legend>

                <select name ="to_user">
                    <option value="0">vælg bruger</option>
                    <?php
                        $str = "";
                        for ($i = 0, $lng = count($users); $i < $lng; $i++) {
                            $str .= '<option value="' . $users[$i]['id'] . '">' . $users[$i]['name'] . '</option>';
                        }
                        echo $str;
                    ?>
                </select><br >

                <label for="t1">Navn:</label>
                <input id="t1" type="text" name="name" ><br >

                <label for="t2">Email:</label>
                <input id="t2" type="text" name="email" ><br >

                <label for="t3">Emne:</label>
                <input id="t3" type="text" name="subject" ><br >

                <label for="t4">Besked:</label>
                <textarea id="t4" name="message" rows="10" cols="49"></textarea><br >

                <label for="t5">Kopi til dig?</label>
                <input type="checkbox" id="t5" name="customer_copy" checked="checked" ><br >

                <label for="auth">Verifikation:</label>
                <span style="float:left;margin-right=10px;">
                    <input type="password" id="auth" name="auth" >
                    <br >Indtast kode for<br >at sende mail!
                </span>               
                <img src="verify.php" alt="auth" ><br >               
                <label for="t6"> </label><input id="t6" type="submit" name="submit" value=" Send mail " >
                &nbsp; &nbsp; <input type="reset" value=" Slet alt " >
            </fieldset>
        </form>
    </body>
</html>
Avatar billede ptj_11 Forsker
07. marts 2017 - 16:48 #3
# 2+3>"Det ville være bedre at lagre dem server-side, men også en smule mere kompliceret" Jeg har tre mailadresser- Bestyrelse@xxx.dk, Redaktion@xxx.dk og Webmaster@xxx.dk. Vil det sige, at jeg bare skal oprette disse tre som brugere i sidens database?
#2> Jeg har prøvet at sætte din kode ind, men får som resultat, at al kode tilføjet over den oprindelige vises i ren tekst på siden. Jeg ved godt, at koden skal rettes til med de korrekte oplysninger, men bare et forsøg, for at se, hvordan det ville se ud.
Hvad gør jeg galt
/ptj_11
Avatar billede ptj_11 Forsker
07. marts 2017 - 17:07 #4
For fuldstændighedens skyld:
Hjemmesiden er hosted hos One.com, og den er forfattet i det tilknyttede hjemmesideprogram.
/ptj_11
Avatar billede olsensweb.dk Ekspert
07. marts 2017 - 18:27 #5
>Vil det sige, at jeg bare skal oprette disse tre som brugere i sidens database?
hvis de ikke er oprettet i forvejen, er det måske lidt overkill, men skal bestyrelsen, webmaster, redaktion ikke kunne logge ind, så de er vel oprettt i forvejen, kunne også være en gruppe de er tilknyttet.


noget ala:

tbl_users
id, name, username, password, email

tbl_groups
id, name, email
her er: bestyrelsen, webmaster, redaktion

tbl_map user_group
user_id, group_id


men start i første omgang med at lave user_arrayet om, så kan du overveje senere om du vil trække info fra databasen.


$users = array(   
    array('id' => 1, 'name' => 'Bestyrelse', 'email' => 'bestyrelse@xxx.dk'),
    array('id' => 6, 'name' => 'Redaktion', 'email' => 'redaktion@xxx.dk'),
    array('id' => 3, 'name' => 'Webmaster', 'email' => 'webmaster@xxx.dk')   
);


>Jeg har prøvet at sætte din kode ind, men får som resultat, at al kode tilføjet over den oprindelige vises i ren tekst på siden.
prøv at uploade det som en hel side via FTP, der er ikke andre ting der er blandet ind i det document.
eneste fejl jeg får er verify.php mangler. (men det er pga jeg ikke har filen)


>Hvad gør jeg galt
jeg tror du selv giver svaret her
>og den er forfattet i det tilknyttede hjemmesideprogram.<
Avatar billede ptj_11 Forsker
09. april 2017 - 20:14 #6
Slater og Olsensweb-
Undskyld mit lange fravær, men andet pressede på, og måtte have højere prioritet.
Hvis I ikke har mistet tålmodigheden endnu, så vil jeg gerne fortsætte nu.
Jeg vælger udgaven med oplysninger hentet fra databasen, og til formålet har jeg oprettet en tabel, med dette script:
CREATE TABLE IF NOT EXISTS oedb_mailarray (
    sendmail_id int(5) NOT NULL AUTO_INCREMENT,
    install_date DATE DEFAULT NULL,
    titel varchar (15) NOT NULL,
        fnavn varchar (15) DEFAULT NULL,
    mnavn varchar (15) DEFAULT NULL,
    enavn varchar (15) DEFAULT NULL,
    email varchar (40) NOT NULL,
    PRIMARY KEY(sendmail_id)
    );
Jeg har valgt DEFULT NULL værdierne på navnefelterne, da udgangspunktet er, at der kun er tale om mailadresser, men bevarer muligheden for at sætte virkelige personer ind som valgbare mailmodtagere.
Jeg har så oprettet alle mailmodtagere i denne tabel. Disse modtagere er blot mailadresser oprettet på domænet, som videresender til de respektives private mail.
Så forestiller jeg mig, at man kan hente disse mailadresser til kontaktformularen fra tabellen.
Vil dette kunne fungere?

Slater> Som det fremgår af ovenstående, så har jeg købt dit forslag om at lagre mailadresserne på serversiden.

Olsensweb>
Jeg har læst lidt her og der i den mellemliggende tid, og jeg mener nu at kunne forstå dit indlæg lidt bedre.
Jeg mener at forstå det sådan her:
Koden til kontaktformularen lægges ind på hjemmesiden med kontakformularen i letter modificeret udgave, så de forskellige modtagere kan vælges fra en liste hentet i dokumentet omtalt i næste afsnit.
PHPkoden gemmes i roden af hjemmesidehierarkiet som f.eks. modtagere.php
Her er "sender.php":
<?php
if (isset($_POST['submit'])) {
  if($_SESSION['verify'] == strtoupper($_POST['auth'])) {
  if (!empty($_POST['name']) && !empty($_POST['subject']) &&
  !empty($_POST['email']) && !empty($_POST['message'])) {
    $headers="From: ".$_POST['name']."<".$_POST['email'].">";
    if (@$_POST['customer_copy']) {
    $headers .= "\r\nBcc: ".$_POST['email'];
    }
    $body .= "Meddelelse den " . date("d/m y") . " kl. " . date("G:i") . " fra " . ($_SERVER['REMOTE_ADDR']) . "\r\n" . "Navn: " . $_POST['name'] . "\r\n" . "Mail: " . $_POST['email'] . "\r\n" . "Emne: " . $_POST['subject'] . "\r\n\r\n" . "Besked: " . "\r\n" . $_POST['message'];
    if(@mail("Webmaster@marstalmarineforening.dk", strip_tags($_POST['subject']),
    stripslashes(strip_tags($body)), $headers)) {
    echo "<p>Tak for din henvendelse. Bestyrelsen svarer dig efter endt behandling af ansøgningen.</p>";
    }
    else {
    echo "<p>E-mailen blev ikke sendt. Der skete en fejl. Prøv igen!</p>";
    }
  }
  else {
    echo "<p>Alle felter skal udfyldes!</p>";
  }
  }
  else {
  echo '<p>Desværre, verifikationskoden kunne ikke godkendes!</p>';
  }
}
?>
Jeg er ikke helt sikker på, at jeg ønsker at anvende verifikation, men det er en biting, det kan jo bare fjernes fra koden.
Hvad siger I til det?
/ptj_11
Avatar billede olsensweb.dk Ekspert
10. april 2017 - 08:28 #7
din code løser ikke det problem som påpegede i #1
citat
står alle modtager-e-mails frit tilgængelig i HTML-koden og kan opfanges af spam robotter.
/citat
løsningen er kun at sende navnet eller id over til serveren, og slå mail addressen op i databasen.
mail addressen må IKKE stå i HTML coden


>Jeg er ikke helt sikker på, at jeg ønsker at anvende verifikation, men det er en biting,
jeg syntes du skal holde fast i en eller anden form for authentication / verifikation, for at undgå botter.


dine indput skal felter skal selvføgelig valideres, mod tomme felter, sql injection, mv, men det er en biting
Avatar billede ptj_11 Forsker
05. maj 2017 - 01:12 #8
Hej begge.
Jeg er ikke i hus med dette endnu, men jeg har ikke haft stunder til at røre ved det længe, så I er begge markerede med løsninger, så der kan lukkes. Når jeg får tid igen, så vender jeg tilbage.
Men jeg kan da notere, at jeg nåede at få lavet et array med modtagere.
/ptj_11
Avatar billede ptj_11 Forsker
29. august 2017 - 12:54 #9
Hej begge.
Så tager jeg fat på denne opgave igen.
Jeg vil høre jer, om en af jer er interesseret i at levere en løsning mod betaling. Jeg har skrevet til jer begge via P.M., men det har I sikkert ikke observeret.
Svar på min personlige mail
/ptj_11
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

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