HTML-gedeelte
Uw invoervelden in het HTML-formulier moeten namen hebben waarmee u de taal kunt identificeren. In HTML kunt u veldnamen maken met vierkante haken. Wanneer PHP deze waarden ontvangt, zal het ze als een array behandelen. U kunt een <textarea>
. definiëren zoals dit:
<textarea name="email_content[fr]">
Dan heb je in PHP toegang tot de waarde met behulp van de volgende syntaxis:
$french = $_POST['email_content']['fr'];
Opmerkingen:
- HTML
<textarea>
heeft geentype
nochvalue
attributen. - In plaats van
hidden
toe te voegen attribuut aan de<input>
elementen, specificeer gewoon detype="hidden"
. - Bij het uitvoeren van dynamische inhoud in HTML moet u zorgen voor XSS-beveiliging .
- In plaats van
<?php echo $var ?>
u kunt de kortere syntaxis gebruiken<?=$var ?>
Uw volledige HTML-formulier kan er dan ongeveer zo uitzien:
<form action="<?=htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
<input type="hidden" value="<?=$id?>" name="email_id">
<?php foreach ($languages as $lang) : ?>
<textarea value="1" name="email_content[<?=htmlspecialchars($lang)?>]" placeholder="<?=htmlspecialchars($lang)?>" value="<?=htmlspecialchars($lang)?>"></textarea>
<?php endforeach ?>
<button type="submit" name="save">Save</button>
</form>
Zodra het formulier in PHP is ontvangen, wordt uw $_POST
zou zoiets als dit moeten bevatten:
array (
'email_id' => '12',
'email_content' =>
array (
'en' => '',
'fr' => 'French text',
'ru' => '',
),
'save' => '',
)
PHP-gedeelte
Om meerdere waarden in PHP op te slaan met PDO, moet je een lus gebruiken. Vóór de lus moet u de instructie en de bindparameters voorbereiden. PDO_stmt::bind_param()
wordt zelden gebruikt, maar in deze situatie kan het uw code schoner maken. U moet ook alle invoegingen van een transactie uitvoeren.
$pdo->beginTransaction();
$stmt = $pdo->prepare("INSERT INTO emailtemplates (email_id,email_lang,email_content)
VALUES (:email_id, :email_lang, :email_content)");
$stmt->bindParam('email_id', $_POST['email_id']);
$stmt->bindParam('email_lang', $lang);
$stmt->bindParam('email_content', $contents);
foreach ($_POST['email_content'] as $lang => $contents) {
if ($contents && in_array($lang, $languages, true)) {
$stmt->execute();
}
}
$pdo->commit();
Als u de eenvoudigere syntaxis wilt gebruiken, kunt u PDO_stmt::execute()
gebruiken om de parameters door te geven zonder voorafgaande binding.
$pdo->beginTransaction();
$stmt = $pdo->prepare("INSERT INTO emailtemplates (email_id,email_lang,email_content)
VALUES (:email_id, :email_lang, :email_content)");
foreach ($_POST['email_content'] as $lang => $contents) {
if ($contents && in_array($lang, $languages, true)) {
$stmt->execute([
'email_id' => $_POST['email_id'],
'email_lang' => $lang,
'email_content' => $contents,
]);
}
}
$pdo->commit();
De volgende regel controleert of de inhoud is verstrekt en of de taal in de reeks talen staat die u hebt opgegeven.
if ($contents && in_array($lang, $languages, true)) {