Débutant avec le HTML et PHP, je suis vraiment bloqué sur une solution depuis 3 jours :-(
En effet, cela concerne un formulaire de réservation, j'utilise la méthode POST pour transmettre les infos de mon formulaire à une page cible.php jusque là, tout semble fonctionner. Cependant, lorseque j'essaye d'integrer un calcul de prix sur ma page html afin que ce dernier sois aussi transmis sur la page cible.php.
Exemple, lorsque le client sélectionne la voiture qu'il souhaite louer, ainsi que la date de location du 21/06/2017 au 22/06/2017 le prix sera de 50 € 25x2jrs . je souhaite trouver un moyen mais sans succès.
Premier conseil : sépare physiquement ton JS, ton CSS et ton HTML/PHP tu (et on!) y verras plus clair (faire un fichier pour chacun). Ce sera plus facile de t'aider car là nous avons du JS en plein milieu du HTML, en début etc... c'est brouillon :/
Deuxième conseil : Indente proprement ton code.
Troisième conseil : Valide ton code avec W3CValidator
Je viendrais éditer quand j'aurais réussi à reproduire ton code sous JSFindle
- Edité par lindadu01 21 juin 2017 à 20:44:33
Parfois, arrêter 5 minutes son développement permet de mieux repartir face à un problème ;)
Je suppose que c'est un fail de copier/coller mais ta balise doctype n'est pas fermée.
Dans la balise <head> tu y retrouves toutes les informations relatives à ta pages (titres, encodages etc...) Ce n'est pas là où tu mets le contenu de ta page (et donc pas ici que tu commences ton formulaire).
Tu fermes deux fois un div hors qu'il n'y en a qu'un seul d'ouvert (je pense que tu as oublier de mettre un
<div class="coord1">
Il te manque la balise <html>
Petit détails : tu as oublier le mot "Services :" au dessus de GPS etc...
Bon, tu peux t'en débrouiller sans l'aide de JS. Tu fais une fonction PHP (idéalement dans un fichier à part que tu inclus) et qui fait un écho du prix en fonction du nombre de jours. et tu appelle ta fonction là où tu en as besoin
Si tu as besoin d'aide, je reste à ta disponsition
- Edité par lindadu01 22 juin 2017 à 10:59:11
Parfois, arrêter 5 minutes son développement permet de mieux repartir face à un problème ;)
C'est quoi le GOF ? Tu as un souci de conception ?
On choisis un modèle, une période (date + heure 1 à date +heure 2) puis on envoie le tout côté serveur, c'est bien cela ? Enfin la base données est plus pratique pour manipuler le temps, puis multiplier par le prix horaire/jour.
Pour mieux comprendre, mets toi à la place de l"utilisateur et explique comment réserver tel modèle de date1 à date2, ce sera plus clair...
Voilà je me mets à la place du visiteur, Je réserve un véhicule pour une location d'une péiode de 10 jours ( via le formulaire de réservation rapide -> par html ci-dessus ), je sélectionne le véhicule FORD FIESTA ensuite je choisis la date départ "1/07/2017 à 12h00". Retour au "10/07/2017 12h00" --> Je valide ,
J'ai directement une page ( Cible.php, ) qui m'affiche un petit récapitulatif de ma demande de location
Type de véhicule : </strong><?php echo$_POST['veh']; ?></p>
<p>Livraison du véhicule : le <?php echo$_POST['date1']; ?> à <?php echo$_POST['heure1']; ?> heure</p>
<p>Ville de départ : <?php echo$_POST['ville1']; ?></p>
<p>Retour du véhicule : <?php echo$_POST['date2']; ?> à <?php echo$_POST['heure2']; ?> heure</p>
<p>Lieu de récupération : <?php echo$_POST['ville2']; ?></p>
Nombre de jours : ? <---- normalement c'est 10 jours
Estimation du prix de location : ? <---- 25x10jours de location = 250 €
Voilà, le seul souci que j'ai en ce moment, c'est vraiment un souci de logique, car dans la function est ce qu'il va falloir faire appel à plusieurs variable ( date1 + date2 + model de la voiture ) via un tableau ?
Fin dsl dêtre un peu bebete mais je ne trouve pas :-p
Dans la fonction, oui il va falloir utiliser 3 variables (celles que tu as cités). Tu peux éventuellement passer par un switch case pour gérer le prix, mais comme ditLucky, une BDD est mieux car, en plus tu pourra gérer un historique ou modifier la réservation, chose que tu ne peux pas faire ici.
Parfois, arrêter 5 minutes son développement permet de mieux repartir face à un problème ;)
Tu comptes enregistrer la recherche en DB? Si non autant le faire en JS puis enregistrer les informations en cas de confirmation.
Cela fait un traitement en JS ->information au client
Si validation -> Enregistrer en DB. La calcul sera fait côté serveur si la demande en est faite par le client et toi même si tu as besoins de connaitre l'état actuel de la réservation.
Il va donc falloir travailler un peu le cours SQL, si on te donne les scripts et codes tout fait tu ne pourras jamais les modifier à ta guise plus tard. Il serait bien aussi d'écrire un mini cahier des charges, ainsi que la structure de ta base de données (relations entre les tables). Cela va grandement te faire gagner du temps et t'éviter de te perdre en route...
Il faut donc que l'utilisateur puisse avoir un compte s'il valide sa réservation, donc un système de création de compte/connexion comme pour panier d'e-commerce. Puis les tables, celles des marque de voiture avec leur identifiants, leur statut (dispo ou non), etc...
Désolé si je t'embrouille, mais mettre en place un système demande souvent d'en avoir d'autres (ici le login)
Du coup autant le faire avec les bonnes pratiques.
- Cahier des charges qui décrits en gros le fonctionnement, l'interface utilisateur, la charte graphique, le menu de navigation, les événements, etc...
- Architecture du dossier de travail, ressources ton tu as besoin.
- Création de la base de données, c'est elle qui va définir ton code côté serveur , donc hyper important.
- Codage, avec séparation du html, php et js. Inclusion de fichiers, etc...
Je passe certaines étapes qui vont te venir naturellement, mais quand on c'est ce que l'on veut, que l'on suit la feuille de route avec les testes à chaque traitement alors on va beaucoup plus vite.
ps: le site du classico est mon ancien site d'apprentissage (1 an à le faire), j'ai fait comme toi (html/css/php et js + ajax) tout en application l'organisation décrite plus haut.
J'avais volontairement mis la barre assez haute avec des contraintes, je l'ai fait juste en suivant les cours d'OC et Alsacreation.
On y pense pas pas mais au bout d'un moment les fichiers s'accumulent, on créé des doublons, etc... donc autant être organisé.
--------------------
En attendant, peux nous poster le résultat de:
fais un var_dump($_POST); au début de ton fichier cible.php pour voir les paramètres obtenus.
Bon j'ai passé la nuit à comprendre le fonctionnement de bdd et j'y peu retenir pas mal de chose en faisant des tests sans succès lol :-)
J'ai travaillé sur le formulaire afin de voir le code plus clairement, j'ai ensuite remplacé la page cible.php par ajout2.php afin d'insérer les données dans la bdd via $_POST
Création de bdd ( me semble ok ) "image ci-dessous, "
"var_dump" dans la page ajout2.php ( le résultat donné est : string(6) "$_POST" )
Je ne sais pas ce qui peux encore bloquer au niveau de l'insertion des données à la bdd :-(
avez-vous une idée ?
Page ajout2.php
<?php
//ouverture d'une connexion à la BDD
$objetPdo = new PDO('mysql:host=127.0.0.1;dbname=auto','root','');
//préparation de la requête d'insertion (SQL)
$pdoStat = $objetPdo->prepare('INSERT INTO open VALUES(NULL,
:veh, :date1, :heure3, :ville3, :vol3, :lieu3, :date2, :heure,
:ville, :vol, :lieu,)');
// on relie charque marqueur à une valeur
$pdoStat->bindValue(':veh', $_POST['voiture']);
$pdoStat->bindValue(':date1', $_POST['ladate']);
$pdoStat->bindValue(':heure3', $_POST['lheure']);
$pdoStat->bindValue(':ville3', $_POST['villedepart']);
$pdoStat->bindValue(':vol3', $_POST['voldepart']);
$pdoStat->bindValue(':lieu3', $_POST['lieudepart']);
$pdoStat->bindValue(':date2', $_POST['datearrivee']);
$pdoStat->bindValue(':heure', $_POST['heurearrivee']);
$pdoStat->bindValue(':ville', $_POST['villearrivee']);
$pdoStat->bindValue(':vol', $_POST['volarrivee']);
$pdoStat->bindValue(':lieu', $_POST['lieuarrivee']);
// on éxécute la requête
$insertIsOk = $pdoStat->execute();
if($insertIsOk){
$message = 'Les données ont été ajoutées';
}
else{
$message = 'Echec dinsertion';
}
?>
<html>
<body>
<title>Page d'insertion</title>
<p>Insertion des données</p>
<h1><?php echo $message ?></h1>
</body>
</html>
Tu regroupes tout dans une seule table, pas de souci mais se sera moins pratique que d'en utiliser plusieurs, ici aucune relation.
tables véhicules, tables horaires début (id véhicules) , table horaires fin (id véhicules), tables des villes et lieux, etc...
Ensuite on fait une jointure pour regrouper toutes les infos suivant le critère de recherche. mais pour débuter oui cette tables est fonctionnelle.
Attention à l'interclassement, le type des données et déclarer le charset lors de la connexion sinon l'utf-8 ne sera pas pris en compte et dans ton HTML les caractères accentuées auront une forme étrange (genre un losange avec un ?)
ps: le NULL s'est l'ID qui est auto-incrémenté (A.I) donc pas besoin de le préciser, c'est automatique. De plus tu devrais avoir un retour d'erreur SQL, si ce n'est pas le cas il faut l'activer.
non c fait ça été modifier, mais je ne comprends ce que tu veux dire par le champ
surtout ceci
$pdoStat = $objetPdo->prepare('INSERT INTO open (veh, date1, etc...)
VALUES(NULL, :veh, :date1, :heure3, :ville3, :vol3, :lieu3, :date2, :heure,:ville, :vol, :lieu,)');
je l'ai modifié en comme demandé en ça :
<?php
//ouverture d'une connexion à la BDD
$objetPdo = new PDO('mysql:host=127.0.0.1;dbname=auto','root','', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
//préparation de la requête d'insertion (SQL)
$pdoStat = $objetPdo->prepare('INSERT INTO open (veh, date1, heure3, ville3, vol3, lieu3, date2, heure, ville, vol, lieu,)
VALUES(NULL, :veh, :date1, :heure3, :ville3, :vol3, :lieu3, :date2, :heure,
:ville, :vol, :lieu,)');
// on relie charque marqueur à une valeur
Maintenant j'obtien l'erreur suivante :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') VALUES(NULL, '7', '15/06/2017', '12', 'Marrakech', '', '', '', '12', 'Marr' at line 1' in C:\Program Files\EasyPHP-Devserver-17\eds-www\fouad\ajout2.php:30 Stack trace: #0 C:\Program Files\EasyPHP-Devserver-17\eds-www\fouad\ajout2.php(30): PDOStatement->execute() #1 {main} thrown in C:\Program Files\EasyPHP-Devserver-17\eds-www\fouad\ajout2.php on line 30
Ensuite que vois si tu fais un var_dump($_POST) juste avant l(insertion en DB? si le type d'un champ ne correspond au type de paramètre alors cela produit une erreur.
rien ne semble fonctionner . d'après toi il y'a encore des erreurs ?
après activation de l'erreur sql :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')VALUES '7','taner',)' at line 1' in C:\Program Files\EasyPHP-Devserver-17\eds-www\fouad\ajout2.php:19 Stack trace: #0 C:\Program Files\EasyPHP-Devserver-17\eds-www\fouad\ajout2.php(19): PDOStatement->execute() #1 {main} thrown in C:\Program Files\EasyPHP-Devserver-17\eds-www\fouad\ajout2.php on line 19
d avance merci
- Edité par elkhattabifouad 23 juin 2017 à 21:51:34
Comme je l'ai dit s'il y a un souci de correspondance entre le typage des champ et variables alors impossible d'enregistrer, et c'est une bonne chose.
Il est parfois difficile de retrouver le "truc" qui cloche, c'est pour cela qu'il faut bien construire la table, le code PHP ne fait que suivre la cohérence.
Je me suis concentré sur la partie serveur + sql. j'ai donc créer un $_post[] pour m'éviter de faire un formulaire HTML pour le test
Si tu reprend ton formulaire + validation : dans cible.php fais un print_r($_POST) et poste la capture. Pour les dates le format SQL est à respecter est important.
Ce que je ferais à ta place, je m'exerce avec un formulaire simplifié + la table correspondante.
le véhicule + la date de réservation -> type date + time et faire l'insertion.
etape 2 : rajouter l'arrivée : type time.
Note que le format datime permet de simplifier ta mise en place pour le calcul puisque tu peux accéder à toutes les infos: depuis un datetime tu peux extraire le jour, l'année, l'heure + minutes, voir les secondes...
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Parfois, arrêter 5 minutes son développement permet de mieux repartir face à un problème ;)
Parfois, arrêter 5 minutes son développement permet de mieux repartir face à un problème ;)
Parfois, arrêter 5 minutes son développement permet de mieux repartir face à un problème ;)