Mailen van form veld in php

Status
Niet open voor verdere reacties.

wzshop

Gebruiker
Lid geworden
21 dec 2004
Berichten
188
Dag mensen.

Ik heb een formulier waarbij men een datum kan kiezen. Dit is (met externe hulp) als volgt weergegeven:
PHP:
//  Pak de standaard-opties
$arrayOpties = array(
    'empty'    =>  '',
    'dontcare' =>  'geen voorkeur',
    '0'        =>  'vandaag',
    '1'        =>  'morgen',
);

//  Zet er enkele dagen in de toekomst bij
$intAantalDagenVooruit = 7;
for ( $intTeller = 2; $intTeller <= $intAantalDagenVooruit; $intTeller++ )
{
    $arrayOpties[$intTeller] = date( 'd-m-Y', strtotime( '+' . $intTeller . ' day' ) );
}

//  Default '0'
if ( !isset($_POST['voorkeursdatum']) or !isset($arrayOpties[$_POST['voorkeursdatum']]) ) {
    $_POST['voorkeursdatum'] = '0';
}

//  Geef alles weer
echo '<select name="voorkeursdatum">' . PHP_EOL;
foreach ( $arrayOpties as $value => $description )
{
    $strSelected = $_POST['voorkeursdatum'] == $value
        ? ' selected="selected"'
        : '';
    echo '<option value="' . $value . '"' . $strSelected . '>' . htmlspecialchars($description) . '</option>' . PHP_EOL;
}
echo '</select>' . PHP_EOL;

Je ziet dat men dus uiteindelijk in het menu een keuze kan maken tussen; leeg veld, geen voorkeur, vandaag, morgen, en data tot 7 dagen vooruit.

Nu gaan er 2 dingen mis.
1) Wanneer men nu op het formulier komt staat het veld "vandaag" automatisch geselecteerd, terwijl ik graag het lege veld als standaard geselecteerd veld wil

2) Hoe kan ik het bovenstaande script kloppend laten mailen? Nu heb ik
PHP:
 <tr>
<td align="left" valign="top" width="130">Voorkeursdatum: </td>
<td align="left" valign="top" width="auto">'. $arrayOpties[ $_POST['voorkeursdatum'] ] . '</td>
</tr>

Hij geeft nu wel alle standaard waarden neer(vanuit de array) maar niet als ik op een andere datum in de week heb geklikt. Hoe kan ik dit oplossen?

Enorm bedankt voor alle hulp!
 
Wat betreft probleem 1:

Je checkt welk veld je selected moet maken door het te matchen tegen $_POST['voorkeursdatum'].

Als je die echter niet gezet is (dwz, als je voor het eerst op de pagina komt) is de waarde daarvan gelijk aan NULL.

Omdat je checkt met ==, worden de nodige type conversions gedaan voor de check, en als het goed is, is de waarde NULL gelijk aan '0', dus zal hij die pakken.

Je kunt het fixen door van tevoren de inhoud van $_POST['voorkeursdatum'] in een andere variabele te stoppen, en als hij helemaal niet bestaat (dus: !isset($_POST['voorkeursdatum']) ) dan zet je hem op de value die je wel selected wil hebben.

Wat betreft je tweede vraag; ik zie niet je hele script, dus ik kan er niet veel over zeggen :(
 
hallo dank voor je reactie.

Betreffende selected; dit zou toch moeten voldoen:
PHP:
if ( !isset($_POST['voorkeursdatum']) or !isset($arrayOpties[$_POST['voorkeursdatum']]) ) {
    $_POST['voorkeursdatum'] = 'empty';
}

Toch pakt hij de array 'empty' nu niet.. misschien begreep ik je verkeerd maar hoe kan ik het dan scripten?

En betreffende het mailen. Volgens mij heb je toch alles wat je nodig hebt? Het invoerveld, en de manier waarop de waarde wordt gemaild, toch?

Echter wordt dus op deze manier enkel alle standaard waarden weergegeven(vanuit de array) maar geen andere data als ik op een andere datum in de week heb geklikt.

Enorm bedankt voor je tijd.
 
opgelost;

ik moest dit nog even voor het mailen zetten :S

PHP:
//  Zet er enkele dagen in de toekomst bij
$intAantalDagenVooruit = 7;
for ( $intTeller = 4; $intTeller <= $intAantalDagenVooruit; $intTeller++ )
{
    $arrayOpties[$intTeller] = date( 'd-m-Y', strtotime( '+' . $intTeller . ' day' ) );
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan