Gå til innhold

Feil på php kontakt system


Anbefalte innlegg

Skrevet

jeg har laget meg et kontakt skjerma på hjemmesidne min. men får det ikke til og fungere.

noen som kan si meg hvorfor?

 

HTML KODEN

 

<form action="script/sendmail.php" method="get">

<fieldset style="border: 0;"><legend></legend>

<label for="avsender">Name:</label>

<input type="text" id="avsender" value="" /><br />

<label for="hjemmeside">Hjemmeside:</label>

<input type="text" id="hjemmeside" value="" /><br />

<label for="email">E-mail:</label>

<input type="text" id="email" value="" /><br />

<label for="melding">Melding:</label>

<textarea rows="5" cols="70" id="melding"></textarea><br />

<input type="submit" name="submitbutton" id="submitbutton" value="send" />

</fieldset>

</form>

 

PHP KODEN

<?

extract($_GET);

$to = '[email protected]';

 

$subject = 'Mail fra din hjemmeside';

$message = 'Navn: ' . $_GET['avsender'] . '\nHjemmeside: ' . $_GET['hjemmeside'] . '\nEmail: '. $_GET['email'] . '\nMelding: ' . $_GET['melding'];

$headers = 'From: ' . $_GET['email'] . "\r\n" . 'Reply-To: ' . $_GET['email'] . "\r\n" . 'X-Mailer: PHP' . phpversion();

 

if(mail($to, $subject, $message, $headers))

{

echo "<body javscript=\"onLoad: setTimeout('window.location='index.php?side=kontakt',4000);\" >Takk for at du sendte mailen, $avsender.";

}

else

{

echo "Fikk ikke sendt mailen. Sorry.";

}

 

 

?>

 

Noen som kan si meg hva som er galt?

 

hvorfor jeg ikke motar mailer.

Videoannonse
Annonse
Skrevet

Vet ikke om det er av stor betydning men \n og slikt fungere ikke i enkelt fnutter ' må så i mellom dobbelt fnutter "

 

Ulovlig: echo 'hei på deg\n';

Lovlig echo "hei på deg\n"; eller echo 'hei på deg'."\n";

Skrevet

1. Short-open-tags er meget fyfy. Bytt ut <? med <?php, så sparer du deg for litt arbeid om hosten din finner ut at de skal slå det av.

 

2. Sende større menger med tekst via GET er ikke særlig elegant. Bruk $_POST.

Bytt ut

<form action="script/sendmail.php" method="get">

med

<form action="script/sendmail.php" method="post">

Samme gjelder med $_GET['blabal'] som må endres til $_POST['blabal'].

Tips: Bruk "Replace" i editoren. $_GET erstattes av $_POST.

 

3. Fjern extract($_GET);. Du benytter deg ikke av "fordelene" den gir deg uansett.

 

4. For å enkelt og elegant bruke array i en streng, kan du bruke { og } rundt.

Eksempel:

PHP
<?php

echo "Navn: {$_POST['navn']}Hjemmeside: {$_POST['hjemmeside']}";

?>

 

5. Du bør sikre brukerdataene dine på en eller annen måte for å fjerne muligheten for header-injection.

http://www.securephpwiki.com/index.php/Ema...ction#solutions

 

Feks.

<?php
foreach( $_POST as $post )
{
 if (eregi("(\r|\n)", $from)) 
 {
    die("Why ?? :(");
  }
}
?>

 

 

Grunnen til at du ikke mottar feilen kan være mange. Bruker du en egen server, eller et webhotell?

Skrevet
...

<?php
foreach( $_POST as $post )
{
 if (eregi("(\r|\n)", $from)) 
 {
    die("Why ?? :(");
  }
}
?>

9426613[/snapback]

Hva hvis noen sender et linjeskift i selve meldingen?

strspn(http://no2.php.net/strspn) er mye bedre egnet her enn regexp.

die er en veldig dårlig måte å behandle feil på.

Skrevet

jeg bruker en aphace server webhotel.

 

hvis jeg gjør de endringer du fåreslår så skal det fungere da?

 

noen sa til meg at det var noe i html som gjore utslaget en gang se.

Skrevet

HTML KODE

 

<form action="script/sendmail.php" method="post">

<fieldset style="border: 0;">

 

<label for="avsender">Name:</label>

<input type="text" id="avsender" value="" /><br />

 

<label for="hjemmeside">Hjemmeside:</label>

<input type="text" id="hjemmeside" value="" /><br />

 

<label for="email">E-mail:</label>

<input type="text" id="email" value="" /><br />

 

<label for="melding">Melding:</label>

<textarea rows="5" cols="70" id="melding"></textarea><br />

 

<input type="submit" name="submitbutton" id="submitbutton" valu$="send" />

 

</fieldset>

</form>

 

 

PHP KODE

 

<?php

extract($_POST);

$to = '[email protected]';

$subject = 'Mail fra din hjemmeside';

$message = "Navn: $avsender \nHjemmeside: $hjemmeside \nEmail: $email \nMelding$

$headers = "From: $email \r\n Reply-To: $email \r\n";

 

if(mail($to, $subject, $message, $headers)) {

echo 'Mailen er sendt, <a href="index.php?side=kontakt">gå tilbake til $

} else {

echo "Fikk ikke sendt mailen. Sorry.";

}

?>

Skrevet

om du kjører en print $message like før if-setningen din i php-filen, hva får du ut da?

Og hva fikk du ut i den opprinnelige koden om du hadde gjort det samme?

Skrevet (endret)

Jeg ser ingen bruk av sessions, så session_start() er totalt unødvendig.

 

Jeg kan heller ikke se at du brydde deg så veldig mye om sikkerhetstipsene jeg ga deg (tenker da spesialt på header-injection).

Nå som jeg vet koden din "kan" jeg få den til å sende ut et par hundre tusen spam eposter.

 

Fjern også extract() og bruk $_POST['navn']. Evt:

<?php

$navn = clean_string( $_POST['navn'] );
$hjemmeside = clean_string( $_POST['hjemmeside'] );
//osv osv

/* Utestet funksjon */
function clean_string( $str )
{
 $str = preg_replace( "( \r|\n )", '', $str );
 return $str;
}

?>

Kan også være kjekt å se om avsendereposten i det hele tatt eksisterer (og at det er en ekte epostadresse(regex for å sjekke det finner du enkelt ved å søke på forumet)) før du prøver å sende den.

 

 

EDIT: Linebreak (\r & \n) funka dårlig i php-tag.

Endret av M4rTiN
Skrevet
Jeg ser ingen bruk av sessions, så session_start() er totalt unødvendig.

 

Jeg kan heller ikke se at du brydde deg så veldig mye om sikkerhetstipsene jeg ga deg (tenker da spesialt på header-injection).

Nå som jeg vet koden din "kan" jeg få den til å sende ut et par hundre tusen spam eposter.

 

Fjern også extract() og bruk $_POST['navn']. Evt:

<?php

$navn = clean_string( $_POST['navn'] );
$hjemmeside = clean_string( $_POST['hjemmeside'] );
//osv osv

/* Utestet funksjon */
function clean_string( $str )
{
 $str = preg_replace( "( \r|\n )", '', $str );
 return $str;
}

?>

Kan også være kjekt å se om avsendereposten i det hele tatt eksisterer (og at det er en ekte epostadresse(regex for å sjekke det finner du enkelt ved å søke på forumet)) før du prøver å sende den.

 

 

EDIT: Linebreak (\r & \n) funka dårlig i php-tag.

9464421[/snapback]

 

skal se på sikkerheten så fort jeg har fått til å sende mail.

 

men jeg ble litt usikker på hva jeg skal beholde i koden min og fjerne av konden min?

 

hadde du gidda og posta komplett kode? pga den siste koden jeg fikk postet mangler det Epost Adresse osv. så ble litt usikker hva jeg skulle beholde av den gammle koden.

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...