Nån som kan PHP?

Larsa97

Mygg-jagare!
Gick med
9 Apr 2004
Ort
Bålsta
Hoj
SV1000S -05
Sliter mitt hår.. har fått i uppdrag av friidrottsklubben har hemma att göra en tävlingsanmälan - ett formulär som ska läggas ut på hemsidan. Formuläret fungerar bra förutom när det gäller de multipla checkboxarna (man ska kunna välja flera grenar på en gång).

Hur får man med flera "values" från checkboxar med samma namn "gren"?? Uppgifterna ska skickas via e-post och på "echo-sidan".

Så här ser del av formuläret ut:
<form name="kontakt" method="post" action="formmail.php">

Välj gren/grenar:
<input type="checkbox" name="gren[]" value="60m">60 m
<input type="checkbox" name="gren[]" value="80m"80 m
<input type="checkbox" name="gren[]" value="100m">100 m

PHP kod:
<?php
// startar sessioner
session_start();
// ämnesrubrik som visas när mailet tas emot
$subject = "Ämne";
// e-postadress som formulärinnhållet ska skicka till
$to = "min@adress.se";
// meddelande
$body = '
Namn: '.$_POST['name'].'
E-post: '.$_POST['email'].'
Tävling: '.$_POST['tavling'].'
Gren/grenar: '.$_POST['gren'].'
Meddelande: '.$_POST['meddelande'].'
';
// om submitknappen använts i formuläret bearbetas informationen i formulärfälten
if(isset($_POST['submit'])){
// kontrollerar om magic_quotes_gpc är aktiverat
// och lagrar information från formuläret
// som används i meddelandet och validering av fältinnehåll
if(get_magic_quotes_gpc()){
$name = stripslashes(trim($_POST["name"]));
$email = stripslashes(trim($_POST["email"]));
$tavling = stripslashes(trim($_POST["tavling"]));
$gren = stripslashes(trim($_POST["gren"]));
$meddelande = stripslashes(trim($_POST["meddelande"]));
}
else{
$name = $_POST["name"];
$email = $_POST["email"];
$tavling = $_POST["tavling"];
$gren = $_POST["gren"];
$meddelande = $_POST["meddelande"];
}
// startar sessioner
$_SESSION['name'] = $name;
$_SESSION['email'] = $email;
$_SESSION['tavling'] = $tavling;
$_SESSION['gren'] = $gren;
$_SESSION['meddelande'] = $meddelande;

// anger en variabel som kan lagra de eventuella felaktigheterna
$errors = array();
// kontrollera om tävling angivits
if (!$_POST["tavling"])
$errors[] = "- välj tävling";
// kontrollera om gren valts
if (!$_POST["gren"])
$errors[] = "- välj gren";
// kontrollera om namn angivits
if (!$_POST["name"])
$errors[] = "- ditt namn saknas";
// kontrollerar om epostadressen är korrekt angiven
if(!preg_match("/^[a-z0-9\å\ä\ö\ü\%._-]+@[a-z0-9\å\ä\ö\ü\%.-]+\.[a-z]{2,6}$/i", $email))
$errors[] = "- din e-postadress saknas eller är felaktig";
//kontrollera om scriptet anropas från ditt formulär
if ($_SERVER['HTTP_REFERER']!= "http://www.balstaik.se/kontaktform.php")
$errors[] = "- Du försöker använda vårt Formmail vilket bara är tillåtet från vår webplats!";
}
//CSS-formatering av felmeddelande
echo '<style type="text/css">
<!--
.text {font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 11px;}
h2 {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; color: #336633; letter-spacing: 2px; font-weight: normal;}
.textbakgrund {background-color: #ccff66;}
-->
</style>';
// visning av felmeddelande
if (count($errors)>0){
echo "<span class='text'>";
echo "<h2>Följande information måste anges innan du kan skicka din anmälan:</h2><br /><br />";
foreach($errors as $fel)
echo "<span class='textbakgrund'> $fel <br /><br /></span>";
echo "<br />Ange den information som saknas och skicka anmälan igen. Tack! <br /><br />";
echo "<a href='javascript:history.go(-1)'>« klicka här för att komma tillbaka till anmälan</a></span>";
}
else {
// om formuläret är korrekt ifyllt skickas informationen
if (mail($to, $subject, $body ,"From: $email"))
// visar bekräftelsesidan
echo nl2br("<h2>Bekräftelse - Tack för din anmälan!</h2>
<b>Mottagare:</b> $to
<b>Ämne:</b> $subject
<b>Tävling:</b> $tavling
<b>Gren/grenar:</b> $gren
<b>Meddelande:</b> $meddelande
");

else
echo "Det gick inte att ta emot din anmälan";
}

?>
 
Finns säkert något smart sätt, men vill du lösa det enkelt och snabbt så döp checkboxarna till gren60, gren80 och gren100.
 
Finns säkert något smart sätt, men vill du lösa det enkelt och snabbt så döp checkboxarna till gren60, gren80 och gren100.

Kan man ju göra förstås, men då blir det en lååång kod med t ex
if (!$_POST["gren60"])
$errors[] = "- välj gren";

if (!$_POST["gren80"])
$errors[] = "- välj gren";

if (!$_POST["gren100"])
$errors[] = "- välj gren";

osv...
 
För att förtydliga lite så har det snarare med HTML att göra än PHP.

Du kan ha flera checkboxar med samma name. I ditt fall kommer du få en variabel, gren, för varje ikryssad checkbox. Har du alltså kryssat i 60 och 80 kommer du få gren=60 och gren=80.

Edit: såg att jag inte läste tillräckligt bra. Det där verkade du redan ha kläm på och det verkar som om det bara är PHP-koden för att plocka ut värdena från gren-variabeln du är ute efter.

Om jag har fattat rätt så är det PHP-magi som fixar att lägga värdena från dina checkboxar i en array i och med att du gett checkboxarna namnet gren[] och inte gren. Du bör kunna få ut rätt värden så här:

$count=count($gren);
for($i=0; $i < $count; $i++) {
... gör nåt kul här, variabeln gren[$i] innehåller ett av de ikryssade värdena ...
}
 
Last edited:
Kan man ju göra förstås, men då blir det en lååång kod med t ex
if (!$_POST["gren60"])
$errors[] = "- välj gren";

if (!$_POST["gren80"])
$errors[] = "- välj gren";

if (!$_POST["gren100"])
$errors[] = "- välj gren";

osv...


Ja, ska du ha många grenar blir det mycket kod. Lättläst förvisso, men mycket. Ska du bara ha tre grenar så räknar i alla fall inte jag det som mycket. Hur som helst verkar Tobbelobbe vara något på spåren.

Har själv aldrig döpt en checkbox till "xxx[]", men det kanske fungerar bra? Vad får du ut i Query-strängen, eller Post?
 
Gör det enkelt för dig, använd RF's hemsidor där din klubb bör finns på svenskidrott.se

Där kan deltagarna anmäla sig online.

Jag sköter hedesunda if's skidresultat vid de sidorna. Skitans enkla matchen!
 
Last edited:
Tack för alla svar.

Kan det vara så att if(isset($_POST['gren'])) { saknas??

Har fått information från php portalen att koden ska se ut som följande:
// meddelande
$body = '
Namn: '.$_POST['name'].'
E-post: '.$_POST['email'].'
Tävling: '.$_POST['tavling'].'
Gren/grenar: '.

foreach($_POST['gren'] as $val) {
.'$val <br>'.
}

Meddelande: '.$_POST['meddelande'].'

// visar bekräftelsesidan
echo nl2br("<h2>Bekräftelse - Tack för din anmälan!</h2>
<b>Mottagare:</b> $to
<b>Ämne:</b> $subject
<b>Tävling:</b> $tavling
<b>Gren/grenar:</b><br>
".foreach($_POST['gren'] as $val) {."
$val <br>".
}

<b>Meddelande:</b> $meddelande
");


Får dock följande felmeddelande:
Parse error: syntax error, unexpected T_FOREACH in /hsphere/local/home/gronadal/balstaik.se/formmail.php on line 15
(rad 15 är där $foreach börjar)

Kan det vara något litet tecken som saknas/är felaktigt? Verkar i alla fall som jag är på väg åt rätt håll...

Formuläret ska innehålla alla grenar (ca 30 st), och byggas ut med informationom den tävlande, kontaktperson m m
 
Last edited:
Om jag har fattat rätt så är det PHP-magi som fixar att lägga värdena från dina checkboxar i en array i och med att du gett checkboxarna namnet gren[] och inte gren. Du bör kunna få ut rätt värden så här:

$count=count($gren);
for($i=0; $i < $count; $i++) {
... gör nåt kul här, variabeln gren[$i] innehåller ett av de ikryssade värdena ...
}
Hej Tobbelobbe!
Tack för svar. Nu fungerar det äntligen:) För den intresserade:

// meddelande
if(isset($_POST['gren'])) {
$grenar = array();
foreach($_POST['gren'] as $val) {
$grenar[] = $val;
}
}


$body = "
Tävling: ".$_POST['tavling']."
Namn: ".$_POST['name']."
Klubb/Förening: ".$_POST['klubb']."
Ålder: ".$_POST['age']."
Pojke/flicka: ".$_POST['kon']."
Gren/grenar: ";
for ($i=0; $i< count($grenar); $i++)
{
$body .= $grenar[$i].", ";
}
$body .= "
Kontaktperson: ".$_POST['kontakt']."
E-post: ".$_POST['email']."
Meddelande: ".$_POST['meddelande']
;

if (mail($to, $subject, $body ,"From: $email")) {
// visar bekräftelsesidan
echo nl2br("<h2>Bekräftelse - Tack för din anmälan!</h2>
<b>Mottagare:</b> $to
<b>Ämne:</b> $subject
<b>Tävling:</b> $tavling
<b>Klubb/förening:</b> $klubb
<b>Namn:</b> $name
<b>Pojke/man - Flicka/kvinna:</b> $kon
<b>Ålder:</b> $age
<b>Kontaktperson:</b> $kontakt
<b>E-post:</b> $email
<b>Gren/grenar:</b><br>");
for ($i=0; $i< count($grenar); $i++)
{
echo $grenar[$i].", ";
}
echo "<br><b>Meddelande:</b> $meddelande";
}
else
echo "Det gick inte att ta emot din anmälan";
}

?>
 
Last edited:
Nyheter
Höstrusch för våra fotografer

Inte bara sommarmånaderna, ...

Jonathan Rea avslutar sin racingkarriär

Efter nästan två decennier ...

Yamaha debuterar med V4 i MotoGP

Yamaha har meddelat att för...

Hojmys i Ugglans Park

Ända sedan början av 90-tal...

MC-mässan 2026

MC-Mässan är tillbaka 23–25...

Bike kör Stark Varg EX!

Under hösten kommer Bike gö...

Customhoj Bike Show 2026

Den 23 till 25 januari körs...

Racing på Kjula Dragway till helgen

Den kommande helgen (23-24 ...

Harley-Davidson och MotoGP lanserar Harley-Davidson Bagger World Cup

Harley-Davidson och MotoGP ...

BMW Motorrad International GS Trophy 2026 körs i Rumänien

Platsen för BMW Motorrad In...

Back
Top