webForumDet fria alternativet

Hämta en variabel från annan php-fil

PHP

22 svar · 1 080 visningar · startad av altruism

Medlem sedan nov. 200664 inlägg
Frågan#1

Det är såhär att jag har ett mejlformulär och jag har nu tagit tag i felhanteringsbiten. Den som ska mejla måste fylla i namn och epost. Jag har gjort det så att om man inte fyllt i det så skickas man till en annan php-sida med samma formulär igen och en liten text där det står att man måste fylla i namn,epost. Men nu till kruxet....det är inte vidare snällt mot användaren att ta bort hela hans meddelande (det försvinner ju när man kommer till den nya sidan) så jag tänkte såhär:

Jag har sparat orginalmeddelandet användaren skriver i en $message-variabel mha. $_POST['message']; den variabeln borde man väl kunna utnyttja för att skriva ut meddelandet igen på den nya sidan. Alltså "importera" $message-variabeln från formulärssidan till felsidan och sen köra echo på den.

Problemet är att jag inte vet hur jag får över variabeln till den andra php-filen, om det ens går....? Tacksam för lite hjälp.

Medlem sedan juli 20023 617 inlägg
#2

Du lägger meddelandet i en sessionvariabel. Jag kan återkomma med lite kod senare om du behöver (och om ingen annan kommer före. ;))

Medlem sedan nov. 200664 inlägg
#3

Ja lite kod skulle inte vara fel pga. mina väldigt begränsade php-kunskaper.... :)

Medlem sedan mars 20021 152 inlägg
#4

Jag är inte heller så bra på php. Men om du inte har satt sessions så kanske ett meddelande om vad som är fel och en tillbakaknapp till den cachade sidan funkar?

Medlem sedan nov. 200664 inlägg
#5

Jo det skulle också fungera kanske, men på den här sidan blir det meddelandet lite svårt att få till på ett snyggt sätt. Så jag skulle föredra "session-lösningen".

Medlem sedan nov. 200664 inlägg
#6

Har fortfarande inte fått det där med sessionsvariabeln att fungera. Någon som kan förklara med lite kod...?

Medlem sedan juli 20023 617 inlägg
#7

Nu är jag tillbaka, men med väldigt lite tid... :(

Kan du inte lägga ut koden här på sidan så jag kan pilla direkt i den?

Medlem sedan nov. 200664 inlägg
#8

En väldigt upptagen herre verkar det som. :) Det är inget konstigt med koden utan ett standard forumlär osv. här är den iaf:

<form id="contactform" method="post" action="contactform.php">
	<p class="formheader">I wish to contact:</p>
	<select name="subject" size="1">
	<option value="Service & Support">Service & Support</option>
	<option value="Purchasing">Purchasing</option>
	</select>
	<p class="formheader">Name:</p>
	<input type="text" class="textarea"name="name" size="30" maxlength="80" />
	<p class="formheader">Company:</p>
	<input type="text" class="textarea"name="company" size="30" maxlength="80" />
	<p class="formheader">Phonenumber:</p>
	<input type="text" class="textarea"name="phonenumber" size="30" maxlength="80" />
	<p class="formheader">E-mail:</p>
	<input type="text" class="textarea"name="email" size="30" maxlength="80" />
	<p class="formheader">Message:</p>
	<textarea name="message" class="textarea" cols="40" rows="10"></textarea>
				
	<br/><br /><input type="submit" name="send" value="Send" />
				
</form>
function sendMail($to)
{

	$senderName = $_POST['name'];
	$senderCompany = $_POST['company'];
	$senderPhone = $_POST['phonenumber'];
	$senderEmail = $_POST['email'];

if(strlen($senderName)>0 && strlen($senderEmail)>0 )
{
	$subject = $_POST['subject'];
	$message = $_POST['message'];
	$_SESSION["message2"] = $_POST['message'];
	$wrapmessage = wordwrap($message, 40, "\n",1);
	$wrapmessage = "Avsändarens namn: $_POST[name]<br> Avsändarens Företag: $_POST[company] <br>Avsändarens telefonnummer: $_POST[phonenumber]<br><br>" . $message;
	
//När alla formulär fyllt i korrekt skickas mejlet
	$headers = "MIME-Version: 1.0\r\n"; 
	$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
	$headers .= "From: $senderEmail\r\n"; 
	mail($to, $subject, $wrapmessage, $headers); 
	require 'sentmail.php';
}
	else{
	require 'fel1.php';
	}
	

}
sendMail('minmejl@någonting.com');
Medlem sedan maj 2005353 inlägg
#9

Du borde ha kontrollen av fälten innan du går in i funktionen sendMail(). Alltså något i stil med

if(!isset($_POST['message'])){
   print "Fel, inget meddelande";
}else{
   if(!isset($_POST['subject'])){
      print "Fel, ingen rubrik";
   }else{
      sendMail($to);
   }
}

... o.s.v. Det finns många sätt att göra kontrollen på men behåll den på samma sida som användaren skriver meddelandet i så slipper du hämta variabler från andra sidor.

Medlem sedan nov. 200664 inlägg
#10

Varför bör jag ha kontrollen innan funktionen?

Det spelar väl ingen roll var jag har koden? Jag måste ändå skicka variabeln till den där felsidan som ska komma upp om inte namn/epost/meddelande är ifyllt...

Medlem sedan mars 20034 471 inlägg
#11

Ett alternativt sätt att lösa problemet på är att du låter samma sida ta hand om felet. Fördelen är att här kommer du åt allt användaren skickat in rakt av med $_POST. Skissartat exempel:

//main
$error = FALSE;
if (isSet($_POST["Epost"]))
   $epost = $_POST["Epost"];
else {
  $epost = "";
  $error = TRUE;
}
if (isSet($_POST["Meddelande"]))
   $med = $_POST["Meddelande"];
else {
  $med = "";
  $error = TRUE;
}
//... osv för de variabler du vill kolla + ev andra koller som tex att epost
// verkar vara en epostadress och inte något annat märkligt.

if ($error)  //Gäller första gången och alla andra gånger när inte det är felfritt
echo '<form id="contactform" method="post" action="contactform.php">
	<p class="formheader">E-mail:</p>
	<input type="text" class="textarea"name="email" size="30" maxlength="80" value="'.$epost.'"/>
	<p class="formheader">Message:</p>
	<textarea name="message" class="textarea" cols="40" rows="10">'.$med.'</textarea>				
	<br/><br /><input type="submit" name="send" value="Send" />
			</form>';
else sendMail("..."); //Som då inte innehåller felkollen
Medlem sedan juli 20023 617 inlägg
#12

Du får ju faktiskt med dig POST-variablerna till din fel1.php så du skulle kunna göra såhär (i fel1.php):

<textarea name="message" class="textarea" cols="40" rows="10"><?=$_POST['message']?></textarea>
Medlem sedan maj 2005353 inlägg
#13

altruism skrev:

Varför bör jag ha kontrollen innan funktionen?

Det spelar väl ingen roll var jag har koden? Jag måste ändå skicka variabeln till den där felsidan som ska komma upp om inte namn/epost/meddelande är ifyllt...

Precis som aasah säger så slipper du ha en särskild sida för felmeddelanden, konstruktionen du tänker på är en omväg.

Medlem sedan nov. 200664 inlägg
#14

Helmertz skrev:

Precis som aasah säger så slipper du ha en särskild sida för felmeddelanden, konstruktionen du tänker på är en omväg.

Då kör jag på det istället. Det jag fått lära mig om php i en kurs är att man ska separera php och html kod fast det kanske inte alltid är det bästa sättet. Återkommer om jag får problem med den här lösningen.

Att all text som finns på sidan sedan ska hämtas från en databas borde väl inte ställa till några problem? Det är ju bara att skicka en sqlfråga och slänga in variabeln istället för texten som finns nu.....typ. Sidan skall nämligen finnas på flera olika språk.

Medlem sedan nov. 200664 inlägg
#15

fiddler skrev:

Du får ju faktiskt med dig POST-variablerna till din fel1.php så du skulle kunna göra såhär (i fel1.php):

<textarea name="message" class="textarea" cols="40" rows="10"><?=$_POST['message']?></textarea>

Nu kommer jag antagligen inte köra på den varianten att jag har felsidan som egen sida. Men som en parantes så kan det nämnas att så som du föreslog fungerar inte, det var så jag antog att man kunde göra också. Men inget syns i textfältet när man kommer till den sidan.

Medlem sedan juli 20023 617 inlägg
#16

altruism skrev:

Nu kommer jag antagligen inte köra på den varianten att jag har felsidan som egen sida. Men som en parantes så kan det nämnas att så som du föreslog fungerar inte, det var så jag antog att man kunde göra också. Men inget syns i textfältet när man kommer till den sidan.

Märkligt isåfall. Jag gjorde en snabbtest och fick det att fungera, men aasah är inne på ett bra spår så kör på det.

Medlem sedan nov. 200664 inlägg
#17

fiddler skrev:

Märkligt isåfall. Jag gjorde en snabbtest och fick det att fungera, men aasah är inne på ett bra spår så kör på det.

Ahaa nu såg jag. Du har ju bara <?=$_POST['message']?> Jag hade <?php $_POST['message']?> varför skippa "php" och köra ett likamedtecken?

Medlem sedan juli 20023 617 inlägg
#18

Att skriva "<?=" är detsamma som att skriva "<? print" Du saknade mao ett "print".

Angående "<?" vs "<?php" så är det senare det mest korrekta, men det första fungerar för det mesta.

Medlem sedan mars 20034 471 inlägg
#19

altruism skrev:

Att all text som finns på sidan sedan ska hämtas från en databas borde väl inte ställa till några problem? Det är ju bara att skicka en sqlfråga och slänga in variabeln istället för texten som finns nu.....typ. Sidan skall nämligen finnas på flera olika språk.

Inga problem alls. Gör så som du beskriver så funkar det bra!

fiddler skrev:

Angående "<?" vs "<?php" så är det senare det mest korrekta, men det första fungerar för det mesta.

Tja... om man skriver '<?php' är det entydigt att kommandotolken kommer att fatta att det som följer är PHP-kod. '<?' däremot är öppningstagg för ett stort antal olika skriptspråk så då beror det på vilken inställning servern har om det tolkas som PHP-tagg eller annan tagg. Mao, använd den förra, så är du garanterad att rätt kommandotolk går igång!

Medlem sedan dec. 19996 721 inlägg
#20

Någon risk för att fel kommandotolk går igång finns inte direkt. I och med att det är en php-sida så är det php-tolken som har ansvaret. Däremot kan det bli struligt om man vill använda en xml-deklaration i samma dokument (<?xml version="1.0" encoding ....), eftersom php-tolken kommer att hugga tag i den också.

265 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)