Problème d'enregistrement php - Mysql
Résolu/FerméAstolpho Messages postés 73 Date d'inscription vendredi 8 avril 2022 Statut Membre Dernière intervention 12 juin 2024 - 11 nov. 2022 à 16:30
- Problème d'enregistrement php - Mysql
- Easy php - Télécharger - Divers Web & Internet
- Mysql community server - Télécharger - Bases de données
- Telecharger studio d'enregistrement rap - Télécharger - Édition & Montage
- Comment couper un enregistrement audio - Guide
- Enregistrement musique mp3 - Télécharger - Streaming audio
7 réponses
10 nov. 2022 à 13:37
bonjour,
quel est le symptôme du problème?
10 nov. 2022 à 13:45
Le message d'erreur que j'utilise pour ne pas avoir un champs vide lors de la création de la chambre, m'empeche de faire un update de la chambre une fois qu'elle est créer.
a chaque fois que je fait un update j'ai le message : "Le numéro de chambre ne peut pas être vide"
Je ne veut pas utiliser cette fonction lors d'une mises à jour, seulement lors de la création.
/* if(!isset($room_number)) { $errors ['room_number'] = "Le numéro de chambre ne peut pas être vide"; // return false; } */
10 nov. 2022 à 13:58
Tu veux dire que tu souhaites déplacer cette vérification après la ligne 213?
10 nov. 2022 à 13:59
Ou bien simultanément tester $createRoom?
Modifié le 10 nov. 2022 à 15:05
$createRoom sert à créer une chambre en entrant le numéro de la chambre (dans le input) lors de la création de la chambre.
Le code ci-dessous : verifie que le numéro de chambre n'est pas vide.
/* if(!isset($room_number)) { $errors ['room_number'] = "Le numéro de chambre ne peut pas être vide"; // return false; } */
Une fois que la chambre est créer, je peux la mettre à jour (la surface, la taille, le prix etc...) via la fonction $updateRooms.
Sauf que quand j'utilise la fonction $updateRooms, le code qui sert à vérifier si la chambre est vide lors de l'utilisation de la fonction $createRoom est aussi utilisé, et il me bloque l'update.
Quand j'utilise la fonction $updateRooms, je veut pas qu'il vérifie si la chambre à un numéro ou pas, vu que je l'ai dejà fait lors de la création.
Modifié le 10 nov. 2022 à 19:28
Peut-être que je devrias faire la vérification directement dans la fonction
updRooms ligne 47.
Si quelqu'un à une idée merci d'avance. Je vais faire les tests.
10 nov. 2022 à 20:11
Comme suggéré en #4, je ferais ceci:
if(!isset($room_number) and isset($createRoom))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionModifié le 10 nov. 2022 à 20:27
ça me fait pareil, c'est dans le update $updRooms que j'ai le problème pas sur la creation de chambre $createRoom
A mon avis il faut que je fasse un select sur la table Rooms, pour qu'il vérifie si le numéro de chambre existe bien, et s'il existe il laisse passe le update.
Je sais pas à quel niveau le faire
Est-ce qu'ont peut faire la verification directement dans la fonction ci-dessous :
function updRoom($id_rooms, $id_customers, $floors, $location="", $type, $area, $bathroom, $shower, $price){ $db = getDB(); $sql = "UPDATE rooms SET id_customers=:id_customers ,floors=:floors ,location=:location ,type=:type ,area=:area ,bathroom=:bathroom ,shower=:shower ,price=:price WHERE id_rooms=:id_rooms "; try{ // Prepare statement $stmt = $db->prepare($sql); $stmt->bindParam(':id_customers', $id_customers); $stmt->bindParam(':floors', $floors); $stmt->bindParam(':location', $location); $location = strtoupper($location); $stmt->bindParam(':type', $type); $type = strtoupper($type); $stmt->bindParam(':area', $area); $stmt->bindParam(':bathroom', $bathroom); $bathroom = strtoupper($bathroom); $stmt->bindParam(':shower', $shower); $shower = strtoupper($shower); $stmt->bindParam(':price', $price); $stmt->bindParam(':id_rooms', $id_rooms); // execute query return $stmt->execute(); }catch(Exception $e){ echo "Erreur dans la requête " . $sql; echo $e->getMessage(); exit; } }
11 nov. 2022 à 09:24
Es-tu certain que "c'est dans le update $updRooms que j'ai le problème"?
Quel est le symptôme précis?
11 nov. 2022 à 10:22
Quand je crée une chambre avec $createRoom, j'ai le code ci-dessous : qui vérifie si le champ est bien rempli.
if(!isset($room_number)) { $errors ['room_number'] = "Le numéro de chambre ne peut pas être vide"; // return false; }
11 nov. 2022 à 10:31
Où se trouve ce code?
Modifié le 11 nov. 2022 à 11:42
Il se trouve à la ligne 168 de la page de traitement ci-dessous :
<?php if(session_status() == PHP_SESSION_NONE){ session_start(); } //---------------------------------------------------------------// //connexion à la bdd // A lire et à appliquer avant de poursuivre : // http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs //---------------------------------------------------------------// require_once('../inc/connexion.php'); /** * Fonction pour insérer une chambre */ function creaRoom($room_number){ $db = getDB(); $sql = "INSERT INTO rooms (room_number) VALUES (:room_number)"; try{ // Prepare statement $stmt = $db->prepare($sql); $stmt->bindParam(':room_number', $room_number); // execute query $stmt->execute(); // on récupère l'id du customer créé : https://www.php.net/manual/fr/pdo.lastinsertid.php $id = $db->lastInsertId(); return $id; }catch(Exception $e){ echo "Erreur dans la requête " . $sql; echo $e->getMessage(); exit; } } /** Fonction pour mettre à jour la chambre */ function updRoom($id_rooms, $id_customers, $floors, $location="", $type, $area, $bathroom, $shower, $price){ $db = getDB(); $sql = "UPDATE rooms SET id_customers=:id_customers ,floors=:floors ,location=:location ,type=:type ,area=:area ,bathroom=:bathroom ,shower=:shower ,price=:price WHERE id_rooms=:id_rooms "; try{ // Prepare statement $stmt = $db->prepare($sql); $stmt->bindParam(':id_customers', $id_customers); $stmt->bindParam(':floors', $floors); $stmt->bindParam(':location', $location); $location = strtoupper($location); $stmt->bindParam(':type', $type); $type = strtoupper($type); $stmt->bindParam(':area', $area); $stmt->bindParam(':bathroom', $bathroom); $bathroom = strtoupper($bathroom); $stmt->bindParam(':shower', $shower); $shower = strtoupper($shower); $stmt->bindParam(':price', $price); $stmt->bindParam(':id_rooms', $id_rooms); // execute query return $stmt->execute(); }catch(Exception $e){ echo "Erreur dans la requête " . $sql; echo $e->getMessage(); exit; } } /** Fonction pour récupérer l'id d'une chambre via son le numéro de chambre */ function getRoomByroomNumber($room_number){ $db = getDB(); $sql = 'SELECT id_rooms FROM rooms WHERE room_number = ?'; try{ $stmt = $db->prepare ($sql); $stmt->execute(array($room_number)); $resultat = $stmt->fetchColumn(); // https://www.php.net/manual/fr/pdostatement.fetchcolumn.php return $resultat; }catch(Exception $e){ echo "Erreur dans la requête " . $sql; echo $e->getMessage(); exit; } } /** Fonction pour vérifier si une chambre est affecté */ function getCustomersByroomNumber($id_customers){ $db = getDB(); $sql = 'SELECT id_customers FROM rooms WHERE id_customers = ?'; try{ $stmt = $db->prepare ($sql); $stmt->execute(array($id_customers)); $resultat = $stmt->fetchColumn(); // https://www.php.net/manual/fr/pdostatement.fetchcolumn.php return $resultat; }catch(Exception $e){ echo "Erreur dans la requête " . $sql; echo $e->getMessage(); exit; } } //---------------------------------------------------// // On récupère proprement les variables envoyées // en $_POST AVANT de les utiliser // pour cela, j'utilise l'écriture ternaire : https://blog.smarchal.com/operateur-ternaire-php#:~:text=L'op%C3%A9rateur%20ternaire%20est%20un,%5BTHEN%5D%20%3A%20%5BELSE%5D%3B //---------------------------------------------------// $room_number = !empty($_POST["room_number"]) ? $_POST["room_number"] : NULL; $createRoom = isset($_POST["createRoom"]) ? $_POST["createRoom"] : NULL; $id_rooms = !empty($_POST["id_rooms"]) ? $_POST["id_rooms"] : NULL; $id_customers = !empty($_POST["id_customers"]) ? $_POST["id_customers"] : NULL; $floors = !empty($_POST["floors"]) ? $_POST["floors"] : NULL; $location = !empty($_POST["location"]) ? $_POST["location"] : NULL; $type = !empty($_POST["type"]) ? $_POST["type"] : NULL; $area = !empty($_POST["area"]) ? $_POST["area"] : NULL; $bathroom = !empty($_POST["bathroom"]) ? $_POST["bathroom"] : NULL; $shower = !empty($_POST["shower"]) ? $_POST["shower"] : NULL; $price = !empty($_POST["price"]) ? $_POST["price"] : NULL; $updateRooms = isset($_POST["updateRooms"]) ? $_POST["updateRooms"] : NULL; //---------------------------------------------------// // Traitement du formulaire //---------------------------------------------------// if(!empty($_POST)) { $errors =array(); $db = getDB(); $db_room_Number = getRoomByroomNumber($room_number); if(!empty($db_room_Number)){ $errors['room_number'] = "Cet chambre existe déjà"; } if(!isset($_POST[$room_number])) { $errors ['room_number'] = "Le numéro de chambre ne peut pas être vide"; // return false; } if(!empty($area)) { if(!preg_match("#^[0-9]#", $_POST['area'] )) { $errors ['area'] = "Ont ne peux pas mettre de lettre dans le champ correspondant a la surface"; // return false; } } if(!empty($location)) { if(!preg_match("#^[A-Za-z]#", $_POST['location'] )) { $errors['location'] = "Vous ne pouvez pas mettre de caractères numériques dans la localisation"; } } if(!empty($type)) { if(!preg_match("#^[A-Za-z]#", $_POST['type'] )) { $errors['type'] = "Vous ne pouvez pas mettre de caractères numériques dans le type"; } } if(!empty($bathroom)) { if(!preg_match("#^[A-Za-z]#", $_POST['bathroom'] )) { $errors['bathroom'] = "Vous ne pouvez pas mettre de caractères numériques dans la douche"; } } if(!empty($shower)) { if(!preg_match("#^[A-Za-z]#", $_POST['shower'] )) { $errors['shower'] = "Vous ne pouvez pas mettre de caractères numériques dans les toilettes"; } } if(!empty($price)) { if(!preg_match("#^[0-9]#", $_POST['price'] )) { $errors ['price'] = "Ont ne peux pas mettre de lettre dans le prix"; // return false; } } // Si il n'y a pas d'erreurs ... if(empty($errors)) { if(isset($createRoom)) { //On crée la chambre si toutes les conditions sont réunies creaRoom($room_number); //header('Location: ../../array/rooms.php'); echo "<script type='text/javascript'>document.location.replace('../array/rooms.php');</script>"; exit; //toujours mettre un exit après une redirection } if(isset($updateRooms)) { //On met à jour la chambre si toutes les conditions sont réunies updRoom($id_rooms,$id_customers, $floors, $location,$type, $area, $bathroom, $shower, $price); //header('Location: ../form/Room.php?id_rooms=$id_rooms'); echo "<script type='text/javascript'>document.location.replace('../form/Room.php?id_rooms=$id_rooms');</script>"; exit; //toujours mettre un exit après une redirection } // debug ($errors); } else{ //on affiche les erreurs.. par exemple : print_r($errors); } } ?>
11 nov. 2022 à 11:51
Comment as-tu testé ma suggestion en #7?
11 nov. 2022 à 12:09
comme ça
if(!isset($room_number) and isset($createRoom)){ //On crée la chambre si toutes les conditions sont réunies creaRoom($room_number); //header('Location: ../../array/rooms.php'); echo "<script type='text/javascript'>document.location.replace('../array/rooms.php');</script>"; exit; //toujours mettre un exit après une redirection }
11 nov. 2022 à 12:20
Comprends-tu comment le code que tu as écrit fonctionne?
As-tu envisagé de plutôt modifier la ligne 168?
11 nov. 2022 à 10:30
Quand je crée une chambre, j'ai le code ci-dessous : qui vérifie que le input correspondant au numéro de la chambre n'est pas vide. il est utilisé lors de $creaRoom
if(!isset($room_number)) { $errors ['room_number'] = "Le numéro de chambre ne peut pas être vide"; // return false; }
Lorsque je fait un update avec $updRooms, j'ai le message voir image ci-dessous. Du coup je peux pas faire de update, car j'ai le message "la chambre ne peut pas être vide" sauf que la chambre à déjà été créer et qe je n'ai pas besoin cette vérifications lors d'un update mais juste lors de la création.