webForumDet fria alternativet

<select> och array

9 svar · 1 259 visningar · startad av Tinwëlint

TinwëlintMedlem sedan maj 2004451 inlägg
#1

Har en array som skriver ut selecttaggar till ett mailformulär (man ska kunna välja vem man vill skicka till). Såhär:

$mottagare=array(
    array('ordf', 'Ordförande', 'ordf@ksrfefr.org'),
    array('judo', 'Ansvarig Judo', 'judo@ksrfefr.org'),
    array['jutsu', 'Ansvarig Ju shin jutsu', 'jutsu@ksrfefr.org'),
    array('webbm', 'Webbmaster', 'webmaster@ksrfefr.org')
)

och senare:

foreach ($mottagare as $row) {

echo "<option value=\"$row[0]\">$row[1]</option>\n

}

För att mailadressen varken ska visas på sidan eller i koden så låter jag value vara en förkortning av namnet ($row[0], kanske är onödigt?). Problemet är hur jag sedan ska veta vilken array som har valts inför skickningen av mailet och därifrån få ut mailadressen. Jag har knappt en aning om hur jag ska göra.

r/stavfel åtgärdat

r2/ändrade till dummy-adresser.

MatteMedlem sedan aug. 20002 975 inlägg
#2

Du kan göra så här:

$mottagare = array(
    'ordf' => array('Ordförande', 'ordf@ksrfefr.org'),
    'judo' => array('Ansvarig Judo', 'judo@ksrfefr.org'),
    'jutsu' => array('Ansvarig Ju shin jutsu', 'jutsu@ksrfefr.org'),
    'webbm' => array('Webbmaster', 'webmaster@ksrfefr.org')
)

echo "<select name='mail'>\n";
foreach ($mottagare as $key => $val) {

echo "<option value=\"$key\">$val[0]</option>\n";

}

echo "</select>\n";

Och sedan i skriptet som tar emot formuläret:

$mottagare = array(
    'ordf' => array('Ordförande', 'ordf@ksrfefr.org'),
    'judo' => array('Ansvarig Judo', 'judo@ksrfefr.org'),
    'jutsu' => array('Ansvarig Ju shin jutsu', 'jutsu@ksrfefr.org'),
    'webbm' => array('Webbmaster', 'webmaster@ksrfefr.org')
)

echo $mottagare[$_POST['mail']][1];
TinwëlintMedlem sedan maj 2004451 inlägg
#3

Hmmm, förkortningen är då "key" till arrayen okej,
Måste jag upprepa arrayen där nere sen? Det gör i och för sig inget. Den ska bara innehålla de där fyra så det blir ju inte särskilt komplicerat.

Efter att ha kollat igenom en stund förstår jag också. Hurra!
mail innehåller nyckeln.
$_POST är en array som skapas med innehållet från formuläret som postas och mail i den kommer att vara nån av de fyra nycklarna som används för att välja ut rätt rad i arrayen $mottagare.
Tack.

aasahMedlem sedan mars 20034 471 inlägg
#4

Tinwëlint - om du inte vill att mailadresserna ska synas på nätet så hoppas jag att du använt dummy-värden här? :q

Annars kanske det är läge att redigera in sådana...

TinwëlintMedlem sedan maj 2004451 inlägg
#5

Oj. Vad dum jag känner mig.
Ber Matte snällt att också ändra.

r/ Tack båda två.

MatteMedlem sedan aug. 20002 975 inlägg
#6

Tinwëlint skrev:

Ber Matte snällt att också ändra.

Fixat :)

Tinwëlint skrev:

Måste jag upprepa arrayen där nere sen?

Har du det i samma skript så räcker det med en gång.

TinwëlintMedlem sedan maj 2004451 inlägg
#7

Matte skrev:

Har du det i samma skript så räcker det med en gång.

Ok. Tänkte väl det.

TinwëlintMedlem sedan maj 2004451 inlägg
#8

Problemet nu är att jag inte får det att fungera med resten av mitt kontakt-skript :p .

Såhär ser koden ut (lite modifierad version av walter groupious skript):

<?php

$mottagare = array(
    'ordf' => array('Ordförande', 'ordf@gds.org'),
    'judo' => array('Ansvarig Judo', 'judo@kgdsg.org'),
    'jutsu' => array('Ansvarig Ju shin jutsu', 'jutsu@ksdg.org'),
    'webbm' => array('Webbmaster', 'webmaster@kfdsaf.org')
)

?>

<form action="" method="post">
<p>
<select id="to" name="to" tabindex="1">

<?php
foreach ($mottagare as $key => $val) {

echo "<option value=\"$rkey\">$val[0]</option>\n";

}
?>

</select>
<label for="to">Till</label>
<p>
<input id="name" type="text" name="name" size="30" tabindex="2" />
<label for="name">Namn</label>
</p>
<p>
<input id="subject" type="text" name="subject" size="30" tabindex="3" />
<label for="subject">Ämne</label>
</p>
<p>
<input id="email" type="text" name="email" size="30" tabindex="4" />
<label for="email">E-post</label>
</p>
<p>
<label for="message">Skriv ditt meddelande här:</label>
<textarea id="message" name="message" cols="70" rows="5"  tabindex="5"></textarea>
</p>
<p>
<button name="submit" type="submit" value="Skicka" tabindex="6">Skicka</button>
</p>
</form>

<?php

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "To: $till\r\n";
$headers .= "From: $name\r\n";
$headers .= "Reply-To: $email\r\n";

extract($_POST);
if ($_POST['submit']) { 

$till = $mottagare[$_POST['to']][1];

	if($till && $name && $subject && $email && $message ) { // kollar så alla fält är ifyllda
		if (return_valid($email)) {
			mail($till,$subject,$message,"From: $name <$email>",$headers); // skickar mailet
			echo "<p>meddelandet skickat!</p>"; 
			
		 	
		} else {
		  print "<p>Fyll i alla fält!</p>"; 
		
	
  }
 }
}

function return_valid($e_mail) {
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $e_mail)) {
return TRUE;
}
else {
  echo "<p>Ogiltig epostadress!</p>";
return FALSE;
}
}
//--------- end 

?>

Någonting vid mitt skapande av "$till = $mottagare[$_POST['to']][1];" måste vara fel.

Texten "meddelande skickat" kommer inte fram och inga meddelanden skickas. Någon som ser något fel direkt?

En testsida ligger här (om någon provar att skicka gör det till webbmaster är ni snälla, de andra blir nog lite förvånade om de får en massa konstiga mail.):
http://kgabudo.org/test/kontaktform.php

MatteMedlem sedan aug. 20002 975 inlägg
#9

Det har smugit med ett litet r som inte ska vara där :)

Ändra

echo "<option value=\"$rkey\">$val[0]</option>\n";

// Till
echo "<option value=\"$key\">$val[0]</option>\n";

Så kanske det fungerar.

PS
mailadresserna ?

TinwëlintMedlem sedan maj 2004451 inlägg
#10

Vad slarvig jag känner mig idag. Tack.

131 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)