tu pense réellement que ceci peux fonctionner (comme tu le pense) ?
?>
<script type="text/javascript">
function validation() {
if (confirm('Confirmer l\'enregistrement ')) {
leformulaire.submit();
</script><?php
try {
$bdd = PDO2::getInstance();
$stmt =
$bdd->prepare("INSERT INTO users(nomUser, prenomUser, fonctionUser, telUser, emailUser) VALUES(:nomUser, :prenomUser, :fonctionUser, :telUser, :emailUser)") or
exit(print_r($bdd->errorInfo()));
$stmt->bindParam(':nomUser', $_SESSION['nomDoc'], PDO::PARAM_STR, 50);
$stmt->bindParam(':prenomUser', $_SESSION['prenomDoc'], PDO::PARAM_STR, 50);
$stmt->bindParam(':fonctionUser', $_SESSION['specialiteDoc'], PDO::PARAM_STR, 75);
$stmt->bindParam(':telUser', $_SESSION['telephoneDoc'], PDO::PARAM_STR, 15);
$stmt->bindParam(':emailUser', $_SESSION['mailDoc'], PDO::PARAM_STR, 100);
$stmt->execute();
} catch (PDOException $e) {
echo 'Erreur insert into users : ' . $e->getMessage();
$stmt > rollBack();
}
?>
<script type="text/javascript">
}else
{
return false
}
</script>
si oui il faut que tu revois le fonctionnement de php

php est exécuté sur un serveur et le javascript sur le client (en clair ton navigateur).
lorsque tu va essayer d'utiliser ta fonction javascript le code php qui s'y trouve aura déjà été exécuté.
D'ailleurs c'est dès le cas au première affichage de ton formulaire.
Coté JS / html le code que tu génère n'est pas correcte (tu commence la fonction dans un tag script et finit dans une autre c'est pas du php ça ne fonctionne pas

.
Donc le code que tu as mis en bas de page doit être exécuté que si tu valide le dernier formulaire.
Pourquoi utiliser un paramètre d'url, tu poste le formulaire autant utiliser un champs de type "hidden"
pour savoir si le dernier formulaire est posté utilise le bouton (il faut le nommer).
d'ailleurs le dernier formulaire n'est pas dans un formulaire html (<form> </form>).
Un bouton submit suffit (sauf si tu as des besoin de tunning important mais cela ne semble pas être le cas).
la fonction validation permet juste de conditionner la soumission avec l'avertissement.
tu as une erreur de syntaxe sur le rollback (c'est $stmt->rollBack() que tu veux et pas tester si $stmt est supérieur au retour d'une fonction rollBack, d'ailleurs tu devrais avoir une erreur ?).
coté gestion d'erreur zéro

or exit(print_r($bdd->errorInfo())); => c'est moche car ne finit pas la page et laisse l'utilisateur sur se faim => utilise seulement le système d'exception.
Le type et la longueur sur le bindParam sont inutile (, PDO::PARAM_STR, 100) parce que par défaut le type c'est du string et c'est ce que tu utilise. De plus la longueur n'est nécessaire que sur les paramètre de sortie d'une appel à procédure stockée

)
La gestion du commit / rollback se fait au niveau de la connexion et non du PDOSatement (pas de méthode rollBack).
Est ce que tu as définis, à la connexion, que tu ne souhaitais pas d'auto commit ?
(isset($_POST['nomCab']) && !empty($_POST['nomCab']) peux être simplifier en !empty($_POST['nomCab']) car empty "effectue un isset" (si la variable n'existe pas il n'y a pas d'erreur et la fonction retourne true car considère comme "vide").
Rapidement je ferais quelque chose dans ce gout la :
<?php
// fichiers de conf
require "../phprequire/config.php";
require "../phprequire/pdo.php";
if (!empty($_POST['etapeFinale'])) {
// validationfinale
$stmt = null;
$bdd = null;
try {
$bdd = PDO2::getInstance();
$stmt = $bdd->prepare("INSERT INTO users(nomUser, prenomUser, fonctionUser, telUser, emailUser)
VALUES (:nomUser, :prenomUser, :fonctionUser, :telUser, :emailUser)");
$stmt->bindParam(':nomUser', $_SESSION['nomDoc']);
$stmt->bindParam(':prenomUser', $_SESSION['prenomDoc']);
$stmt->bindParam(':fonctionUser', $_SESSION['specialiteDoc']);
$stmt->bindParam(':telUser', $_SESSION['telephoneDoc']);
$stmt->bindParam(':emailUser', $_SESSION['mailDoc']);
$stmt->execute();
$bdd->commit();
} catch (PDOException $e) {
echo 'Erreur insert into users : ' . $e->getMessage();
// il y a de forte chance pour $stmt n'existe pas quand tu arrive ici (lorsque le prépare se vautre par
// exemple
if ($bdd != null && is_a($bdd, 'PDO')) {
$bdd->rollBack();
}
}
// un tite redirection vers une autre page ?
}
header('Content-Type: text/html; charset=UTF-8');
?>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>
<style type="text/css">
:invalid {
box-shadow: 0 0 2px 1px red;
border-color: red;
}
:valid {
box-shadow: 0 0 2px 1px green;
border-color: green;
}
</style>
<script type="text/javascript">
function validation() {
return confirm('Confirmer l\'enregistrement ');
}
</script>
</head>
<body>
<div id="registerPraticien">
<?php
if (!isset($_GET['etape'])) {
?>
<!-- Infos perso -->
<fieldset>
<legend>Renseignez vos informations personnelles</legend>
<form action="medecin.php" method="post" onsubmit="return controleNom();">
<input type="hidden" name="etape" value="2"/>
<input id="nomDoc" type="text" placeholder="Nom" name="nomDoc" pattern="[A-ZÀÂÇÈÉÊËÎÔÙÛ ]*"><br/>
<input id="prenomDoc" type="text" placeholder="Prénom" name="prenomDoc"
pattern="[a-zA-ZÀÂÇÈÉÊËÎÔÙÛàâçèéêëîôöùû ]*"><br/>
<input id="specialiteDoc" type="text" placeholder="Fonction/Spécialité" name="specialiteDoc"
pattern="/^[\sa-zA-ZÀÂÇÈÉÊËÎÔÙÛàâçèéêëîôöùû\]+$/g;"><br/>
<input id="telephoneDoc" type="tel" placeholder="Numéro de téléphone" name="telephoneDoc"
pattern="^0[1-68]([-. ]?[0-9]{2}){4}$"><br/>
<input id="mailDoc" type="text" placeholder="Adresse mail" name="mailDoc"
pattern="^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$"><br/>
<input type="button" value="Précédent" onclick="javascript:history.back(-1)">
<input type="submit" value="Suivant" name="envoieInfoDoc">
</form>
</fieldset>
<!-- /Infos perso -->
<?php
// Je vérifie que je suis bien à l'étape 2 et que les champs de la partie infos persos sont tous remplis
} elseif (!empty($_POST['etape']) && $_POST['etape'] == 2 && !empty($_POST['nomDoc']) &&
!empty($_POST['prenomDoc']) && !empty($_POST['specialiteDoc']) && !empty($_POST['telephoneDoc']) &&
!empty($_POST['mailDoc'])) {
// Je stock les données persos dans des variables correspondants
$_SESSION['nomDoc'] = $_POST['nomDoc'];
$_SESSION['prenomDoc'] = $_POST['prenomDoc'];
$_SESSION['specialiteDoc'] = $_POST['specialiteDoc'];
$_SESSION['telephoneDoc'] = $_POST['telephoneDoc'];
$_SESSION['mailDoc'] = $_POST['mailDoc'];
?>
<!-- Infos cabinet -->
<fieldset>
<legend>Renseignez les informations concernant votre cabinet</legend>
<form action="medecin.php" method="post">
<input type="hidden" name="etape" value="3"/>
<input type="text" placeholder="Nom du cabinet" name="nomCab"
pattern="[a-zA-ZÀÂÇÈÉÊËÎÔÙÛàâçèéêëîôöùû ]*"><br/>
<input type="textarea" placeholder="Adresse" name="adresseCab"
pattern="[0-9]{1,3}(?:(?:[,. ]){1}[-a-zA-Zàâäéèêëïîôöùûüç]+)+"><br/>
<input type="text" placeholder="Code Postal" name="cpCab" pattern="^[0-9]{5}$"><br/>
<input type="text" placeholder="Fonction/Spécialité" name="specialiteCab"
pattern="/^[\sa-zA-ZÀÂÇÈÉÊËÎÔÙÛàâçèéêëîôöùû\]+$/g;"><br/>
<input type="tel" placeholder="Numéro de téléphone" name="telephoneCab"
pattern="^0[1-68]([-. ]?[0-9]{2}){4}$"><br/>
<input type="button" value="Précédent" onclick="javascript:history.back(-1)">
<input type="submit" value="Suivant" name="envoieInfoCab">
</form>
</fieldset>
<!-- /Infos cabinet -->
<?php
// Si je ne suis pas à l'étape 2, Je vérifie que je suis bien à l'étape 3 et que les champs de la partie cabinet sont tous remplis
} elseif (!empty($_POST['etape']) && ($_POST['etape'] == 3) && !empty($_POST['nomCab']) &&
!empty($_POST['adresseCab']) && !empty($_POST['cpCab']) && !empty($_POST['specialiteCab']) &&
!empty($_POST['telephoneCab'])
) {
// Je stock les infos du cabinet dans des variables correspondantes
$_SESSION['nomCab'] = $_POST['nomCab'];
$_SESSION['adresseCab'] = $_POST['adresseCab'];
$_SESSION['cpCab'] = $_POST['cpCab'];
$_SESSION['specialiteCab'] = $_POST['specialiteCab'];
$_SESSION['telephoneCab'] = $_POST['telephoneCab'];
?>
<!-- Je récapitule les informations saisies, pour éviter les erreurs -->
<h1>Récapitulatif de vos informations: </h1>
<?php
echo "Nom du médecin : " . $_SESSION['nomDoc'] . "<br />Prénom du médecin : " . $_SESSION['prenomDoc'] .
"<br />Spécialité : " . $_SESSION['specialiteDoc'] . "<br />Téléphone du médecin : " .
$_SESSION['telephoneDoc'] . "<br />Adresse mail du médecin : " . $_SESSION['mailDoc'] . "<br />";
echo "Nom du cabinet : " . $_SESSION['nomCab'] . "<br />Adresse du cabinet : " . $_SESSION['adresseCab'] .
"<br />Code postal du cabinet : " . $_SESSION['cpCab'] . "<br />Spécialité du cabinet : " .
$_SESSION['specialiteCab'] . "<br />Téléphone du abinet : " . $_SESSION['telephoneCab'];
?>
<br/>
<form method="post">
<input type="submit" value="Confirmer" name="etapeFinale" onsubmit="validation()"/>
</form>
<?php
} else {
// tu fait quoi dans ce cas ?
}
?>
</div>
</body>
</html>
je m'intrique : PDO2 ? une seule version n'est pas suffisante ?
il y a surement mieux à faire mais c'est une base.
pour info tes html 5 c'est très bien mais pense que cela ne fonctionne qu'avec des navigateurs récents (donc attention a la cible derrière s'il tournent sur du windows xp faut pas qu'ils utilisent IE

)
@+