webForumDet fria alternativet

hidden when submit show

22 svar · 814 visningar · startad av Iceyes

IceyesMedlem sedan apr. 2005100 inlägg
#1

Jag byggde ett formulär i det här fallet i conact.php som sedan hämtar hämtar data från sendmail.php när formuläret skickas så från början skulle man hänvisas till i mitt fall result.php där jag skrev ett medelande att forläret blivit sent jag va sedan inne på att försöka lägga in variablen $message
för att kunna skriva ut medelandet personen som skickat foruläret skrivit men eftersom det låg på en annan sida verkade det hela bli komplicerat om man ska behöva lägga in session_ , och för att inte vilseleda besökaren fick jag istället idén att få fram mitt medelande ihop med medelandet besökaren skrev på samma sida under formuläret. Jag insåg att jag på nått sätt måste skriva allt det där "hidden" och när besökaren tryckt på submit åker han ner längre ner på sidan och och ska få fram t.e.x

 <? Vi tackar för ditt medelande echo $realname;
   Följande medelande: echo $message; har leverats ?>

vilket är minst komplicerat och kan man gömma medelandet tills besökaren har tryckt submit?

Andreas123Medlem sedan juli 200439 inlägg
#2

if(isset($_POST['submit'])){
echo "Vi tackar för ditt medelande echo $realname<br />Följande medelande: $message har leverats";
}

?

PeddaMedlem sedan juni 20004 880 inlägg
#3

Men problemet om man inte skickar vidare med header är ju att man kan uppdatera sidan och meddelandet skickas igen, och det kanske inte är det bästa.

aasahMedlem sedan mars 20033 451 inlägg
#4

Pedda skrev:

Men problemet om man inte skickar vidare med header är ju att man kan uppdatera sidan och meddelandet skickas igen, och det kanske inte är det bästa.

Det finns två sätt att komma ifrån det, så vitt jag förstår.

Antingen låter man header skicka till en speciell sida som helt enkelt skriver ut detta meddelande om isset($_POST['submit']). Alternativt att man skickar med meddelandet i en POST/GET-variabel till den nya sidan, så kan man använda den för fler meddelanden.

Eller så kollar sidan när den laddas om submit är satt, i så fall kommer meddelandet, annars formuläret. Då skickas inte meddelandet på nytt.

PeddaMedlem sedan juni 20004 880 inlägg
#5

Det är ju det jag säger.
Om han skickar meddelandet med POST och sen trycker F5 så skickas det ju igen, det är därför han bör använda header location istället efter att meddelandet har skickats. Men då får han ingen utskrift av meddelandet som jag för övrigt inte inser att det är någon mening att ha. Man vet ju redan vad man har skrivit.

Missförstod du mig?

MeleaMedlem sedan juli 20032 667 inlägg
#6

Om man ska vara sån, kan man skapa en session när $_POST skickas vidare, och döda den på samma sida som post skrivs ut.
Då visas meddelandet endast en gång, eftersom sessionen inte finns när du uppdaterar sidan igen.

aasahMedlem sedan mars 20033 451 inlägg
#7

Pedda skrev:

Det är ju det jag säger.
Om han skickar meddelandet med POST och sen trycker F5 så skickas det ju igen, det är därför han bör använda header location istället efter att meddelandet har skickats.

Missförstod du mig?

Det gjorde jag nog. Men följande går att lösa:

Pedda skrev:

Men då får han ingen utskrift av meddelandet som jag för övrigt inte inser att det är någon mening att ha. Man vet ju redan vad man har skrivit.

Låt headern leda till omladdning av samma sida. Det går att lösa så att F5 inte leder till ny ivägskickning genom en koll i PHP-koden som gör att mail, i det här fallet, aldrig utförs om submitt är satt. Min gästbok fungerar så, då gällande att F5 inte ger nytt inlägg, trots återskickning till samma sida.

Alternativt har man en message.php som helt enkelt skriver ut meddelanden från annat håll, och som vidareskickningen går till.

Jag tycker också det är bra att få bekräftelse på att ett mail gått iväg, samt vad det stod i det. Då ser man ju om något blev fel.

PeddaMedlem sedan juni 20004 880 inlägg
#8

I exemplet som Andreas123 skrev så kan man trycka F5 och det skickas igen om man har mail() i den koden.
Tycker att det är självklart att istället skicka vidare med header location till en annan sida eller ladda om samma sida, men då måste man ju spara texten i t.ex en session som Melea skriver och det tycker jag är onödigt, men det är ju upp till Iceyes att avgöra hur han vill göra.

Att man ska få en bekräftelse är ganska självklart, men att se texten man just har skrivit tycker jag är onödigt. Men om han vill se det så får han nog använda session för att lagra texten.

IceyesMedlem sedan apr. 2005100 inlägg
#9

Okej, så som jag har förstått det här så ser det ut som för att slippa spam så får man använda sig av sessions vilket jag är ganska osäker på
låt säga som alla förmodligen vet använder jag mej av den vanliga biten för att skapa den praktiska biten av formuläret

<form method="post" action="/sendmail.php">
<p><b>Subject:</b><br>
<input type=text name="subject" size="45" value="">
<br>
<b> Your name:</b><br>
<input type=text name="realname" size="45" value="">
<br />
<b>Your Email :</b><br>
  <input type=text name="email" size="45" value="">
  <br>
</p>
<p><b>Comment:</b><br>
<textarea name="message" rows="10" cols="60" wrap="virtual"></textarea></p><br>
<p><input type="submit" value="S&auml;nd Email"> 
&nbsp;
<input type="reset" value="Rensa">
</p>
</form>

Bör jag sedan lägg in följade kod över den här ovan, man ska ju inte blanda html och php? eller ska jag lägga den på sendmail.php?

<?php
session_start ();

och sedan nått i den här stilen i själva sidan man vidarebefodras till när man tryckt submit?

<?php 
session_start ();
Vi tackar för ditt medelande echo $realname<br />
Följande medelande: $message har leverats";
?>
MeleaMedlem sedan juli 20032 667 inlägg
#10

Du kan inte skriva ut text i klartext inom php-taggar, utan du måste använda echo runt hela texten.
Antingen skriver du som Andreas123 visar ovan, eller så skriver du

<?
if(isset($_POST['submit'])) {
    echo 'Vi tackar för ditt meddelande '.$realname.'<br />
    Följande meddelande: '.$message.' har leverats';
}
?>
IceyesMedlem sedan apr. 2005100 inlägg
#11

Melea skrev:

Du kan inte skriva ut text i klartext inom php-taggar, utan du måste använda echo runt hela texten.
Antingen skriver du som Andreas123 visar ovan, eller så skriver du

<?
if(isset($_POST['submit'])) {
    echo 'Vi tackar för ditt meddelande '.$realname.'<br />
    Följande meddelande: '.$message.' har leverats';
}
?>

Okej, jag är forfarande nybörjare inom php det är därför jag sitter här och ställer frågor som ni kanske tycker verkar helt idiotiska :D

men sedan själva sessions_start biten ska ju som jag fattat det skrivas på sidan där variblerna $message och $realname skapades i det här fallet contact.php där jag skrev en viss del av koden till formuläret i html i föregående inlägg.
sen ska den här koden du nu skrev placeras i sidan man vidarebefodras till efter att ha tryckt submit, och ska man skriva session_start där med innan din kod, och var bör man placera den i contact.php? högst upp?

filipbhMedlem sedan juli 2002402 inlägg
#12

session_start() skall läggas högst upp och i samtliga filer som använder sessioner.

IceyesMedlem sedan apr. 2005100 inlägg
#13

filipbh skrev:

session_start() skall läggas högst upp och i samtliga filer som använder sessioner.

jag la följade kod på sidan man vidarebefodras till

<?php session_start();

if(isset($_POST['submit'])) { 
    echo 'Vi tackar för ditt meddelande '.$realname.'<br /> 
    Följande meddelande: '.$message.' har leverats'; 
} 
?>

och även session_start på själva sidan där man skriver i formuläret.
Det enda som syns är en vit sida när man skickat ett formulär:/

MeleaMedlem sedan juli 20032 667 inlägg
#14

Byt ut

<input type="submit" value="S&auml;nd Email">

mot

<input type="submit" name="submit" value="S&auml;nd Email">
IceyesMedlem sedan apr. 2005100 inlägg
#15

Okej, jo det testade jag utan framgång :/
precis samma som innan

MeleaMedlem sedan juli 20032 667 inlägg
#16

Kan man få kolla på sendmail.php?

IceyesMedlem sedan apr. 2005100 inlägg
#17

finns det nån möjlighet att få delen email att bli som avsändare istället för som i det här fallet den hamnar i ärende?
nu får jag ut nån form av email inom mitt webhotell

<?php 
session_start () ; 
  $email = $_POST['email'] ; 
  $message = $_POST['message'] ; 

  mail( "iceyes87@gmail.com", "[Msg from form]", 
  $message, "Realname: $realname From: $email" ); 

  $_SESSION['message'] = $message; 
  $_SESSION['realname'] = $realname; 

  header("Location: /formresult.php?done=1"); 
?>

sedan om det finns möjlighet att ändra teckenstorlek och centrera texten i och med att den ligger inom php kod?

PHP-kod:
if(isset($_GET['done'])) { 

    echo 'Vi tackar för ditt meddelande '.$_SESSION['realname'].'<br /> 
    Följande meddelande: '.$_SESSION['message'].' har leverats'; 

    unset($_SESSION['realname'], $_SESSION['message']); 

}
PeddaMedlem sedan juni 20004 880 inlägg
#18

Blir inte avsändaren rätt som du har det nu?
Testa annars med detta:

<?php
session_start () ;
  $email = $_POST['email'] ;
  $message = $_POST['message'] ;

  mail( "iceyes87@gmail.com", "[Msg from form]",
  $message, "From: {$realname}\r\n" .
     "Reply-To: {$email}\r\n" .
     "X-Mailer: PHP/" . phpversion());

  $_SESSION['message'] = $message;
  $_SESSION['realname'] = $realname;

  header("Location: /formresult.php?done=1");
?>

och

if(isset($_GET['done'])) {

    echo '<center>Vi tackar för ditt meddelande '.$_SESSION['realname'].'<br />
    Följande meddelande: '.$_SESSION['message'].' har leverats</center>';

    unset($_SESSION['realname'], $_SESSION['message']);

}

Som du ser så kan du skriva html (som jag gjort med <center></center> här) i phpkoden. Det du måste tänka på är om du har " så måste du sätta en backslash före.

IceyesMedlem sedan apr. 2005100 inlägg
#19

verkar funka att centrera texten men nu istället blir enda skillnaden att jag får det här först i mailet

X-Mailer: PHP/4.4.0
Message-Id: <20051109203355.E4AC94F8A3D@ws14.surf-town.net>
Date: Wed,  9 Nov 2005 21:33:55 +0100 (CET)

efter ha lagt in den där koden du gav mej

PeddaMedlem sedan juni 20004 880 inlägg
#20

Ta bort det onödiga.

mail( "iceyes87@gmail.com", "[Msg from form]", $message, "From: {$realname}\r\n" . "Reply-To: {$email}\r\n");
Genererad på 393 ms · cache AV · v20260730165559-full.f96bc7eb