1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
| <?php
function post_value($index, $default = '') {
$ret = $default;
if (isset($_POST[$index])) {
if (is_string($_POST[$index])) {
$ret = trim($_POST[$index]);
} else if (is_array($_POST[$index])) {
array_map('trim', $_POST[$index]);
}
}
return $ret;
}
$prices = [
1 => [
"label" => "1 lot de 2 jeux",
"price" => 5,
],
2 => [
"label" => "2 lots de 2 jeux",
"price" => 8,
],
3 => [
"label" => "3 lots de 2 jeux",
"price" => 10,
],
4 => [
"label" => "4 lots de 2 jeux",
"price" => 12,
],
];
if (!empty($_POST['action']) && $_POST['action'] === 'submit') {
$errors = [];
// Validation des champs obligatoires
$required_fields = ['nom', 'prenom', 'email', 'commentaire', 'quantite', 'modeles', 'CGV', 'date', 'quantite'];
foreach ($required_fields AS $v) {
if (empty($v)) {
$errors[$v] = "empty";
}
}
// Validation de l'adresse email
if (!filter_var(post_value('email'), FILTER_VALIDATE_EMAIL)) {
$errors['email'] = "invalid";
}
// Seulement s'il n'y a pas d'erreur, je vais insérer mes données
if (empty($errors)) {
// ON PROTEGE LES CHAMPS CONTRE LES INJECTIONS
// C'EST LA BASE ET TRES TRES IMPORTANT
$nom = mysqli_real_escape_string($connection, post_value('nom'));
$prenom = mysqli_real_escape_string($connection, post_value('prenom'));
$email = mysqli_real_escape_string($connection, post_value('email'));
$commentaire = mysqli_real_escape_string($connection, post_value('commentaire'));
$quantite = mysqli_real_escape_string($connection, post_value('quantite'));
$classique = (in_array('classique', post_value('modeles')));
$original = (in_array('original', post_value('modeles')));
$CGV = mysqli_real_escape_string($connection, post_value('CGV'));
$game_price = $prices[post_value('quantite')]['price'];
$prix = (int) post_value('quantite') * $game_price;
$date = mysqli_real_escape_string($connection, post_value('date'));
$Ajouterclt = "INSERT INTO client (nom, prenom, email, commentaire, quantite, classique, original, CGV, prix, date)
VALUES ('$nom', '$prenom', '$email', '$commentaire', '$quantite', '$classique', '$original', '$CGV', '$prix', NOW())";
echo '<div style="background: green; color: white; padding: 15px;">';
echo PHP_EOL . '<pre>Pas d\'erreurs dans le formulaire, ici je peux exécuter ma requête : ' . print_r($Ajouterclt, true) . '</pre>' . PHP_EOL;
echo PHP_EOL . '<pre>Prix calculé depuis PHP : ' . print_r($prix, true) . '</pre>' . PHP_EOL;
echo '</div>';
} else {
echo PHP_EOL . '<pre style="background: red; color: white; padding: 15px;">Il existe des erreurs dans le formulaire : ' . print_r($errors, true) . '</pre>' . PHP_EOL;
}
}
?><legend><b>Projet</b></legend>
<fieldset>
<form name="form1" method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<p>
<input type="text" name="nom" id="nom" placeholder="Nom" value="<?= post_value('nom'); ?>" required pattern="^[A-Za-z '-]+$" />
<input type="text" name="prenom" id="prenom" placeholder="Prenom" value="<?= post_value('prenom'); ?>" required pattern="^[A-Za-z '-]+$" />
</p>
<p>
<input type="email" name="email" id="email" placeholder="Email" value="<?= post_value('email'); ?>" required />
</p>
<p>
<label for="commentaire">Commentaire </label>
<br />
<textarea id="commentaire" name="commentaire" placeholder="Commentaire" class="limiter" maxlength="255" rows="3"><?= post_value('commentaire'); ?></textarea>
<br />
<span id="controle_decompte"></span>
</p>
<table>
<caption>
Quel modèle choisissez vous ?
Classique ou Original ? Ou les 2 ?
</caption>
<tr>
<th>
<label for="modele_1">
<img src="../images/exemple2.png" width="192" height="122" alt=""/>
</label>
</th>
<th>
<label for="modele_2">
<img src="../images/exemple2.png" width="192" height="122" alt=""/>
</label>
</th>
</tr>
<td align="center">Classique </td>
<td align="center">Original</td>
<tr>
<td align="center"><input type="checkbox" id="modele_1" name="modeles[]" value="classique" <?php if (in_array('classique', post_value('modeles', []))) echo ' checked="checked"'; ?> /></td>
<td align="center"><input type="checkbox" id="modele_2" name="modeles[]" value="original" <?php if (in_array('original', post_value('modeles', []))) echo ' checked="checked"'; ?> /></td>
</tr>
</table>
<p>
<label for="quantite">Quantité</label>
<select name="quantite" required>
<option value="0"></option>
<?php foreach ($prices AS $k => $v) : ?>
<option value="<?= $k; ?>"<?php if (post_value('quantite') == $k) echo ' selected="selected"'; ?>><?= $v['label']; ?></option>
<?php endforeach; ?>
</select>
- Total : <span id="prix">0</span>
</p>
<p>
<input type="checkbox" id="CGV" name="CGV" value="o" required>
<label for="CGV">J'accepete les <a href="../CGV.html" target="_blank">Conditions Générales de vente</a></label>
</p>
<p>
<input type="hidden" name="date" value="">
<input type="hidden" name="action" value="submit" />
<input type="submit" name="Bouton" value="commande">
</p>
</form>
</fieldset>
<script>
/**
* Calcule le montant total par rapport au prix général du produit et à la quantité sélectionnée
*/
var prices = <?= json_encode($prices); ?>;
function calculateTotal() {
var total = 0;
var qty = document.querySelector('[name="quantite"]').value;
if (qty > 0 && prices[document.querySelector('[name="quantite"]').value]) {
var price = prices[document.querySelector('[name="quantite"]').value].price;
total = parseInt(qty) * parseFloat(price);
}
document.querySelector('#prix').textContent = total;
}
/**
* Affiche le nombre de caractères restants, basés sur l'attribut maxlength du textarea
*/
function calculateCharactersLeft() {
var $el = document.querySelector('.limiter');
var maxlength = $el.getAttribute('maxlength');
var length_left = maxlength - $el.value.length;
document.querySelector('#controle_decompte').textContent = length_left + " caractère(s) restant(s)";
}
window.onload = function () {
document.querySelector('.limiter').addEventListener('keyup', calculateCharactersLeft); // Pour exécuter la fonction à chaque "keyup"
calculateCharactersLeft(); // Pour exécuter la fonction dès le chargement de la page
document.querySelector('[name="quantite"]').addEventListener('change', calculateTotal); // Pour exécuter la fonction à chaque changement de sélection
calculateTotal(); // Pour exécuter la fonction dès le chargement de la page
}
</script> |