Erreur en PHP : Ajout d'adresse
Résolu
Numbyscuit
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
Numbyscuit Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
Numbyscuit Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je cherche à ajouter une adresse à un client, selon les conditions suivantes :
1- Un client peut avoir plusieurs adresses
2- Plusieurs clients peuvent avoir la même adresse
3- Plusieurs clients peuvent partager le même nom ET prénom.
4- Or, un client ne peut avoir le même nom, prénom, et adresse.
5- Aussi, chaque pseudo (identifiant) est unique.
Mon problème est le suivant. J'ai fait une page contenant une fonction ajouter qui semble bonne, cependant, malgré mes instructions, elle ne remplit pas la condition n°3. Les noms et prénoms des deux clients auront beau êtres différents, si l'adresse se trouve déjà dans la table, elle ne sera pas ajoutée.
Voici d'abord le formulaire qui envoie les informations.
Voici maintenant le code complet de la page "newadress.php" :
Je reçois toujours le message d'erreur "Erreur dans l'adresse" quand mes informations relatives à l'adresse sont identiques. J'ai eu beau essayé de trifouiller encore et encore, rien n'y fait.
Je vous remercie d'avance pour votre aide, en m'excusant de beaucoup en demander, ces derniers jours ^^
Je cherche à ajouter une adresse à un client, selon les conditions suivantes :
1- Un client peut avoir plusieurs adresses
2- Plusieurs clients peuvent avoir la même adresse
3- Plusieurs clients peuvent partager le même nom ET prénom.
4- Or, un client ne peut avoir le même nom, prénom, et adresse.
5- Aussi, chaque pseudo (identifiant) est unique.
Mon problème est le suivant. J'ai fait une page contenant une fonction ajouter qui semble bonne, cependant, malgré mes instructions, elle ne remplit pas la condition n°3. Les noms et prénoms des deux clients auront beau êtres différents, si l'adresse se trouve déjà dans la table, elle ne sera pas ajoutée.
Voici d'abord le formulaire qui envoie les informations.
<form method="post" action="newadress.php"> <fieldset class="inscr"> <legend>Ajouter une adresse</legend> <label>Adresse : </label> <input type="text" name="adress" id="adress" class="champ" required /> <br /><br /> <label>Code postal : </label> <input type="text" name="CP" id="CP" class="champ" required /> <br /><br /> <label>Ville : </label> <input type="text" name="ville" id="ville" class="champ" required /> <br /><br /> <label>Pays : </label> <input type="text" name="pays" id="pays" class="champ" required /> </fieldset> <br /> <div class="inscr"> <input type="reset" value="Réinitialiser" /> <input type="submit" value="Ajouter" /> </div> </form>
Voici maintenant le code complet de la page "newadress.php" :
/*Connexion à BDD */ try { // On se connecte à MySQL $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:host=localhost;dbname=bdd_exiastore', 'root', '', $pdo_options); $bdd->exec('SET NAMES utf8'); } catch(Exception $e) { // En cas d'erreur, on affiche un message et on arrête tout die('Erreur : '.$e->getMessage()); } $log = $_SESSION['pseudo']; $sql = "SELECT * FROM clients WHERE clients.PseudoClient ='".$log."' "; $req = $bdd->query($sql); $req->setFetchMode(PDO::FETCH_OBJ); // Nom $name = $_SESSION['nom']; $sqlTrois = "SELECT * FROM clients WHERE clients.NomClient ='".$name."' "; $reqTrois = $bdd->query($sqlTrois); $reqTrois->setFetchMode(PDO::FETCH_OBJ); // Prénom $prename = $_SESSION['prenom']; $sqlQuatre = "SELECT * FROM clients WHERE clients.PrenomClient ='".$prename."' "; $reqQuatre = $bdd->query($sqlQuatre); $reqQuatre->setFetchMode(PDO::FETCH_OBJ); // Rue $addr = $_POST['adress']; $sqlCinq = "SELECT * FROM adresses WHERE adresses.RueAdresse ='".$addr."' "; $reqCinq = $bdd->query($sqlCinq); $reqCinq->setFetchMode(PDO::FETCH_OBJ); // CP $postal = $_POST['CP']; $sqlSix = "SELECT * FROM adresses WHERE adresses.CPAdresse ='".$postal."' "; $reqSix = $bdd->query($sqlSix); $reqSix->setFetchMode(PDO::FETCH_OBJ); // Ville $town = $_POST['ville']; $sqlSept = "SELECT * FROM adresses WHERE adresses.VilleAdresse ='".$town."' "; $reqSept = $bdd->query($sqlSept); $reqSept->setFetchMode(PDO::FETCH_OBJ); // Pays $country = $_POST['pays']; $sqlHuit = "SELECT * FROM adresses WHERE adresses.PaysAdresse ='".$country."' "; $reqHuit = $bdd->query($sqlHuit); $reqHuit->setFetchMode(PDO::FETCH_OBJ); if(empty($_POST['adress']) OR empty($_POST['ville']) OR empty($_POST['pays']) OR empty($_POST['CP']) ) { echo "Vous n'avez pas renseigné tous les champs."; header("Refresh: 3; URL= zone.php" ) ; } // Si tout n'a pas été mis dans le même "else if", c'est parce que des problèmes ont été rencontrés. else if(strlen($_POST['adress']) < 10 OR strlen($_POST['adress']) > 50) { echo 'Adresse invalide - Rue.'; header("Refresh: 3; URL= zone.php" ) ; } else if (strlen($_POST['pays']) < 3 OR strlen($_POST['pays']) > 15) { echo 'Adresse invalide - Pays.'; header("Refresh: 3; URL= zone.php" ) ; } else if (strlen($_POST['CP']) != 5) { echo "Adresse invalide - Code postal."; header("Refresh: 3; URL= zone.php" ) ; } else if(strlen($_POST['ville']) < 3 OR $_POST['ville'] > 20 ) { echo "Adresse invalide - Ville."; header("Refresh: 3; URL= zone.php" ) ; } else if(($ligneTrois = $reqTrois->fetch() AND $ligneQuatre = $reqQuatre->fetch() AND $ligneCinq = $reqCinq->fetch() AND $ligneSix = $reqSix->fetch() AND $ligneSept = $reqSept->fetch() AND $ligneHuit = $reqHuit->fetch() ) OR ($ligne = $req->fetch() AND $ligneCinq = $reqCinq->fetch() AND $ligneSix = $reqSix->fetch() AND $ligneSept = $reqSept->fetch() AND $ligneHuit = $reqHuit->fetch()) ) { echo "Erreur. <br />- Soit un autre compte possède déjà les mêmes nom, prénom, et adresse. <br />- Soit vous avez déjà entré une telle adresse."; header("Refresh: 3; URL= zone.php" ) ; } else { $add = $_POST['adress']; $ville = $_POST['ville']; $cp = $_POST['CP']; $pays = $_POST['pays']; $reqAdd = $bdd->prepare("INSERT INTO adresses (RueAdresse, CPAdresse, VilleAdresse, PaysAdresse) VALUES(:add, :cp, :ville, :pays) "); $reqAdd->execute(array( 'add'=>$add, 'cp'=>$cp, 'ville'=>$ville, 'pays'=>$pays )); $sqlId = $bdd->prepare(" SELECT ID_Client FROM clients WHERE PseudoClient = :log "); $sqlId->execute(array( 'log' => $log )); $donneesId = $sqlId->fetch(); $idCli = $donneesId['ID_Client']; $sqlAdd = $bdd->prepare("SELECT adresses.ID_Adresse FROM adresses WHERE adresses.RueAdresse = :add AND adresses.CPAdresse = :cp AND adresses.VilleAdresse = :ville AND adresses.PaysAdresse = :pays "); $sqlAdd->execute(array( 'add'=>$add, 'cp'=>$cp, 'ville'=>$ville, 'pays'=>$pays )); $donneesAdd = $sqlAdd->fetch(); $idAdd = $donneesAdd['ID_Adresse']; $reqId = $bdd->prepare("INSERT INTO avoir (avoir.ID_Client, avoir.ID_Adresse) VALUES(:idCli, :idAdd) "); $reqId->execute(array( 'idCli'=>$idCli, 'idAdd'=>$idAdd )); echo "Adresse ajoutée"; $sqlAdd->closeCursor(); $reqAdd->closeCursor(); $reqId->closeCursor(); header("Refresh: 3; URL= zone.php" ) ; } ?>
Je reçois toujours le message d'erreur "Erreur dans l'adresse" quand mes informations relatives à l'adresse sont identiques. J'ai eu beau essayé de trifouiller encore et encore, rien n'y fait.
Je vous remercie d'avance pour votre aide, en m'excusant de beaucoup en demander, ces derniers jours ^^
A voir également:
- Erreur en PHP : Ajout d'adresse
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Expert php pinterest - Télécharger - Langages
- J'aime par erreur facebook notification - Forum Facebook
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues
7 réponses
L'ID_Adresse est la clef primaire. Et sinon, la requête INSERT INTO fonctionne pour la table "avoir" comme pour la table "adresses". Mais le hic, c'est quand le code semble pas comprendre que les noms et prénoms doivent déjà exister aussi pour que ça bloque.
J'ai changé la structure de la requête, et ça semble fonctionner :
Ce qui est étrange, c'est que la précédente structure fonctionnait sans problème pour vérifier l'inscription, mais pas pour l'ajout d'adresse.
$name = $_SESSION['nom']; $prename = $_SESSION['prenom']; $addr = $_POST['adress']; $postal = $_POST['CP']; $town = $_POST['ville']; $country = $_POST['pays']; $check = $bdd->prepare( "SELECT * FROM adresses INNER JOIN avoir ON avoir.ID_Adresse = adresses.ID_Adresse INNER JOIN clients ON clients.ID_Client = avoir.ID_Client WHERE clients.NomClient = :name AND clients.PrenomClient = :prename AND adresses.RueAdresse = :addr AND adresses.CPAdresse = :postal AND adresses.VilleAdresse = :town AND adresses.PaysAdresse = :country "); $check->execute(array( 'name'=>$name, 'prename'=>$prename, 'addr'=>$addr, 'postal'=>$postal, 'town'=>$town, 'country'=>$country )); $check->setFetchMode(PDO::FETCH_OBJ);
Ce qui est étrange, c'est que la précédente structure fonctionnait sans problème pour vérifier l'inscription, mais pas pour l'ajout d'adresse.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour
Oui, un up est tout à fait permis, dans la mesure où tu n'en abuses pas. Et après 3 jours, on ne peut pas te reprocher d'en abuser.
Je reçois toujours le message d'erreur "Erreur dans l'adresse" Sauf erreur de ma part, ce message n'existe pas dans ton script. Quel message d'erreur as-tu vraiment ?
else if(($ligneTrois = $reqTrois->fetch() AND $ligneQuatre = $reqQuatre->fetch() AND $ligneCinq = $reqCinq->fetch() AND $ligneSix = $reqSix->fetch() AND $ligneSept = $reqSept->fetch() AND $ligneHuit = $reqHuit->fetch() ) OR ($ligne = $req->fetch() AND $ligneCinq = $reqCinq->fetch() AND $ligneSix = $reqSix->fetch() AND $ligneSept = $reqSept->fetch() AND $ligneHuit = $reqHuit->fetch()) )
Ton problème s'explique très bien par cette condition.
Si les noms sont différents, tu sautes au OR. Là, tu ne compares les adresses, elles sont égales, donc le if est globalement vrai.
D'autre part, te rends-tu compte que dans l'évaluation de cette condition, tu peux être amené à faire deux fois $reqCinq->fetch(), ... et que cela va donc essayer de lire deux lignes du résultat de la requête... Tu peux donc avoir 'vrai' la 1ère fois et 'faux' la seconde, je doute que ce soit l'effet recherché.
Oui, un up est tout à fait permis, dans la mesure où tu n'en abuses pas. Et après 3 jours, on ne peut pas te reprocher d'en abuser.
Je reçois toujours le message d'erreur "Erreur dans l'adresse" Sauf erreur de ma part, ce message n'existe pas dans ton script. Quel message d'erreur as-tu vraiment ?
else if(($ligneTrois = $reqTrois->fetch() AND $ligneQuatre = $reqQuatre->fetch() AND $ligneCinq = $reqCinq->fetch() AND $ligneSix = $reqSix->fetch() AND $ligneSept = $reqSept->fetch() AND $ligneHuit = $reqHuit->fetch() ) OR ($ligne = $req->fetch() AND $ligneCinq = $reqCinq->fetch() AND $ligneSix = $reqSix->fetch() AND $ligneSept = $reqSept->fetch() AND $ligneHuit = $reqHuit->fetch()) )
Ton problème s'explique très bien par cette condition.
Si les noms sont différents, tu sautes au OR. Là, tu ne compares les adresses, elles sont égales, donc le if est globalement vrai.
D'autre part, te rends-tu compte que dans l'évaluation de cette condition, tu peux être amené à faire deux fois $reqCinq->fetch(), ... et que cela va donc essayer de lire deux lignes du résultat de la requête... Tu peux donc avoir 'vrai' la 1ère fois et 'faux' la seconde, je doute que ce soit l'effet recherché.