Avatar billede hoeks Nybegynder
23. oktober 2007 - 12:20 Der er 11 kommentarer og
1 løsning

formmail: lille ændring ønskes!

Hey Eksperter!
Jeg har et dumt problem og jeg er dum til PHP. Dette er noget jeg har lovet at lave for min mor, og vil bare have det til at virke. Jeg ved hvad problemet er og jeg ved, at det kun er ganske lidt der skal ændres for at det virker!
Here it goes:


<br />
<?php
require_once('connect.php');

$modtager_email = xxxxx;
$emne          = 'Bestilling af bøger';

if(isset($_POST['order']))
{
    $besked = '';
    $besked .= 'Navn : ' . $_POST['navn'] . "\r\n";
    $besked .= 'skole : ' . $_POST['skole'] . "\r\n";
    $besked .= 'ean : ' . $_POST['ean'] . "\r\n";
    $besked .= 'adresse1 : ' . $_POST['adresse1'] . "\r\n";
    $besked .= 'adresse2 : ' . $_POST['adresse2'] . "\r\n";
    $besked .= 'bynavn : ' . $_POST['bynavn'] . "\r\n";
    $besked .= 'telefon : ' . $_POST['telefon'] . "\r\n";
    if(isset($_POST['klasse17']))
    {
        $besked .= 'Ønsker info om nyheder 1.-7. klasse' . "\r\n";
    }
    if(isset($_POST['klasse810']))
    {
        $besked .= 'Ønsker info om nyheder 8.-10. klasse' . "\r\n";
    }
    $besked .= 'email : ' . $_POST['email'] . "\r\n\r\n";
    $besked .= '--==BESTILLING==--' . "\r\n\r\n";
   
    foreach($antal AS $id => $antal)
    {
        if(isset($id) && is_numeric($id) && isset($antal) && is_numeric($antal))
        {
            $sql_id = intval($id);
            $sql_antal = intval($antal);
            $query = mysql_query("SELECT titel, pris FROM bog WHERE id = '".$sql_id."' LIMIT 1");
            if(mysql_num_rows($query)==1)
            {
                $row = mysql_fetch_assoc($query);
                $besked .= 'Bog: ' . html_entity_decode($row['titel']) . "\r\n";
                $besked .= 'Pris: ' . $row['pris'] . "\r\n";
                $besked .= 'Antal: ' . $sql_antal . "\r\n\r\n";
            }
            else
            {
                echo 'Der opstod en fejl';
            }
        }
    }
   
    $headers = 'From: xxxxxxxxxxxx. "\r\n" .
    'Reply-To: xxxxxxxx. "\r\n" .
    'X-Mailer: PHP/' . phpversion();

    if(mail($modtager_email, $emne, $besked, $headers))
    {
        echo '<h3>Din bestilling er afsendt</h3>';
    }
    else
    {
        echo '<h5>Email fejlede</h5>';
    }
}

//Vi trækker kategorier ud
$query_kat = mysql_query('SELECT id, kategori FROM bog_kategori ORDER BY id');
if(mysql_num_rows($query_kat)>0)
{
    echo '<form action="bestilling.php" method="post">'."\r\n";
    echo '<table style="width: 420px;">'."\r\n";
    while($row_kat = mysql_fetch_assoc($query_kat))
    {
       
        echo '<tr><td colspan="3"><h3>' . $row_kat['kategori'] . '</h3 ></td></tr>'."\r\n";
        echo '<tr ><td><b>Titel</b></td><td><b>Pris excl. moms</b></td><td><b>Antal</b></td></tr>'."\r\n";
       
        //Vi trækker bøger ud i den pågældende kategori
        $query_bog = mysql_query("SELECT id, titel, pris FROM bog WHERE kategori = '".$row_kat['id']."' ORDER BY titel");
        if(mysql_num_rows($query_bog)>0)
        {
            while($row_bog = mysql_fetch_assoc($query_bog))
            {
                echo '<tr><td>' . $row_bog['titel'] . '</td><td>' . $row_bog['pris'] . '</td><td><input type="text" name="antal[' . $row_bog['id'] . ']" size="4" maxlength="3" /></td></tr>'."\r\n";
            }
        }
        else
        {
            echo '<tr><td colspan="3">Ingen b&oslash;ger i denne kategori!</td></tr>'."\r\n";
        }
    }
    echo '</table>'."\r\n";
    echo '<table style="background: #c7dfe7 ; width: 410px;">'."\r\n";
    echo ''."\r\n";
    echo '<tr><td colspan="3"><h2>Forsendelse</h2></td></tr>'."\r\n";
    echo '<tr><td>Navn:</td><td><input type="text" name="navn" /></td></tr>'."\r\n";
    echo '<tr><td>Skole:</td><td><input type="text" name="skole" /></td></tr>'."\r\n";
    echo '<tr><td>EAN-Lokationsnummer:</td><td><input type="text" name="ean" /></td></tr>'."\r\n";
    echo '<tr><td>Adresse 1:</td><td><input type="text" name="adresse1" /></td></tr>'."\r\n";
    echo '<tr><td>Adresse 2:</td><td><input type="text" name="adresse2" /></td></tr>'."\r\n";
    echo '<tr><td>Postnummer:</td><td><input type="text" name="post" /></td></tr>'."\r\n";
    echo '<tr><td>By:</td><td><input type="text" name="bynavn" /></td></tr>'."\r\n";
    echo '<tr><td>Land:</td><td><input type="text" name="land" /></td></tr>'."\r\n";
    echo '<tr><td>Telefon:</td><td><input type="text" name="telefon" /></td></tr>'."\r\n";
    echo '<tr><td colspan="2">Ønsker info om nyheder 1.-7. klasse <input type="checkbox" name="klasse17" /></td></tr>'."\r\n";
    echo '<tr><td colspan="2">Ønsker info om nyheder 8.-10. klasse <input type="checkbox" name="klasse810" /></td></tr>'."\r\n";
    echo '<tr><td>Email:</td><td><input type="text" name="email" /></td></tr>'."\r\n";
    echo '<tr><td colspan="2"><input type="submit" name="order" value="Send bestilling" /></td></tr>'."\r\n";
    echo '</table>'."\r\n";
    echo '</form>'."\r\n";
}
else
{
    echo 'Fejl i systemet'."\r\n";
}

?>

_________________
Problemet er dette:
Efter jeg har skiftet server når "bestillings-delen" af min formular ikke frem til e-mailen. Løsningen er denne:

<torbenTrold> sagen er den, at denne form virkede før jeg skiftede server
<torbenTrold> jeg har ikke ændret en eneste linje kode, men nu virker den sidste del af formen pludselig ikke
<@KasperTSW> ah :)
<@KasperTSW> det er fordi det ikke er pænt at hive $id ind på den måde, torbenTrold
<@KasperTSW> hvis det kommer fra en POST formular, bør du bruge $_POST['id']
<@KasperTSW> du kan evt. bare lave en $id variabel i toppen af dokumentet og tage den der fra
<@KasperTSW> Grunden til at det pludselig ikke virker er nok at den nye server kører med lidt strengere indstillinger, hvilket er en god ting, da den måde du gør det på med $id KAN være et sikkerhedsmæssigt problem :)

Så altså: Der er en lille ting der skal ændres, men jeg kan ikke finde ud af det. Vil bare have denne her sag ud af verden. Ved godt det ikke er i ekspertens "ånd" at bare få lavet noget for sig, men jeg håber nu alligevel at en vil hjælpe mig! Altså Paste den kode der gør at det virker!
Derfor giver jeg også 200 point for denne forholdsvist lille opgave.

På forhånd tak
Avatar billede dkfire Nybegynder
23. oktober 2007 - 13:21 #1
Der er nu kun en ting som du mangler at ændre:

foreach($antal AS $id => $antal)

til

foreach($_POST['antal'] AS $id => $antal)
Avatar billede hoeks Nybegynder
23. oktober 2007 - 13:30 #2
Nej, det virker ikke!
Avatar billede dkfire Nybegynder
23. oktober 2007 - 13:34 #3
Hvad siger den da af fejl ???
Avatar billede hoeks Nybegynder
23. oktober 2007 - 13:39 #4
siger blot "e-mail fejlede"

Kan du evt overtales til at kigge på det på min server? Hvis du gider, så er jeg på msn: rasmus_hoeks[at]hotmail.com

Står nemlig og skal i skole her om en halv time og det kunne være alt for fedt hvis det kom til at virke inden!
Avatar billede dkfire Nybegynder
23. oktober 2007 - 13:48 #5
Nej det kan jeg desværre ikke, men vi kan da lige prøve lidt mere.


Prøv ved:

if(mail($modtager_email, $emne, $besked, $headers))
    {
        echo '<h3>Din bestilling er afsendt</h3>';
    }
    else
    {
        echo '<h5>Email fejlede</h5>';
        echo 'Modtager email: '.$modtager_email.'<br />';
        echo 'Emne :'.$emne.'<br />';
        echo 'Besked :'.nl2br($besked).'<br /><br />';
        echo 'Header :'.nl2br($headers).'<br />';

    }
Avatar billede dkfire Nybegynder
23. oktober 2007 - 13:48 #6
Prøv at se hvad den så skriver ud.
Avatar billede hoeks Nybegynder
23. oktober 2007 - 13:52 #7
kan se, at den besked den sender er korrekt:

Email fejlede
Modtager email: xxxxxxx
Emne :Bestilling af bøger
Besked :Navn :
skole :
ean :
adresse1 :
adresse2 :
bynavn :
telefon :
email :

--==BESTILLING==--

Bog: Bog 01
Pris: 62,00
Antal: 1

Bog: Bog 04
Pris: 62,00
Antal: 1


DVS. den får det hele med og altså virker korrekt. Men nu når e-mailen bare ikke frem!?
Avatar billede dkfire Nybegynder
23. oktober 2007 - 13:54 #8
Hvordan ser din header ud ??
Avatar billede hoeks Nybegynder
23. oktober 2007 - 13:58 #9
<?php include("inc/data.php");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<!--   
Original Design by PixelCarnage. Completely redesigned and modified by Rasmus
Released under the GNU GPL for free distributation and modification.

-->


<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <title>Forlaget spiren</title>
        <meta name="description" content="" />
        <meta name="keywords" content="" />
        <meta name="author" content="Rowan Lewis" />
        <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=ISO-8859-1" />
        <link rel="stylesheet" title="Normal" type="text/css" media="screen" href="./styles/screen.css" />

   
   
    </head>
   
    <body>
        <div id="main">
           
           
            <div id="header">
                <h1>Forlaget Spiren</h1>
            </div>
<div id="menu">
        <ul>
   
            <li>
<?php
    $res_menu = mysql_query("SELECT * FROM pages WHERE parent = 0 ORDER BY ID ASC");
    while ($row_menu = mysql_fetch_array($res_menu))
    {
        echo "<a href='http://www.forlagetspiren.dk/?menu=". $row_menu['ID'] ."'>". $row_menu['Menu'] ."</a>";   
    }
?></li>   
<li ><a href="bestilling.php">Bestilling</a></li>       
        </ul>
</div>
   
    <div id="content">


<img src="images/udfyld_felter.gif" alt="post_it_udfyld" style="float: right;" />

    <div id="panel">
<h1>Bestilling</h1><br />
Indtast det ønskede antal ud for den ønskede titel. <br />

<br />
Avatar billede dkfire Nybegynder
23. oktober 2007 - 14:05 #10
Nej Nej ikke lige det jeg ville se. Når du prøver at sende en email og den så skriver fejl, så skriver den også header : bla bla.....
Jeg vil også gerne se bla bla.....


evt ændre: 
if(mail($modtager_email, $emne, $besked, $headers))
til:
if(mail($modtager_email, $emne, $besked))
Avatar billede hoeks Nybegynder
23. oktober 2007 - 23:03 #11
Fiflede lidt med det selv og nu virker det lige pludselig.
Men du hjalp mig godt på vej, så smid et svar, så får du point!
Avatar billede dkfire Nybegynder
23. oktober 2007 - 23:18 #12
Vi kan jo dele, men det er helt op til dig :-)
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