[RESOLU] AJOUTER UNE VILLE EN LUI ASSOCIANT LE PAYS PAR FORMULAIRE

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] AJOUTER UNE VILLE EN LUI ASSOCIANT LE PAYS PAR FORMULAIRE

Re: [RESOLU] AJOUTER UNE VILLE EN LUI ASSOCIANT LE PAYS PAR FORMULAIRE

par ab1011 » 29 janv. 2021, 18:12

Ok merci pour l'info bon week-end à vous

Re: [RESOLU] AJOUTER UNE VILLE EN LUI ASSOCIANT LE PAYS PAR FORMULAIRE

par or 1 » 29 janv. 2021, 18:04

https://www.php.net/manual/fr/function.is-int.php
" Pour tester si une variable est un nombre ou une chaîne numérique (comme les entrées de formulaire, qui sont toujours des chaînes), vous devez utiliser la fonction is_numeric(). "

Re: AJOUTER UNE VILLE EN LUI ASSOCIANT LE PAYS PAR FORMULAIRE

par ab1011 » 29 janv. 2021, 17:58

J'ai réussi à trouver :

process/process-ajout-ville.php
require('../includes/inc-connexion.php');
require('../class/Ville.php');
require('../class/villeManager.php');

if(isset($_POST['submit_form'])) {

  $ville_nom_form = trim($_POST['ville_nom_form']);
  $ville_texte_form = trim($_POST['ville_texte_form']);
  $pays_id_form = trim($_POST['pays_id_form']);

  if((empty($ville_nom_form)) OR empty($ville_texte_form) OR !isset($pays_id_form)) {

    $message = '<p class="error">Veuillez remplir tous les champs !</p>';
  }
  else {

    $ville_data = array(
            
            'ville_id' => 1,
      'ville_nom' => $ville_nom_form,
      'ville_texte' => $ville_texte_form,
      'pays_id' => (int) $pays_id_form
    );

    $city_data = new Ville($ville_data);

    $manager = new villeManager($db);
      
      if(!$manager->getVilleExiste($ville_nom_form)) {

      	$manager->insertVille($city_data);

      	$message = '<p class="success">La ville ' . $ville_nom_form . ' a bien été ajouté !</p>';
      }
      else {

      	$message = '<p class="error">La ville ' . $ville_nom_form . ' n\'a pas été ajouté !</p>';
      }
  }
}

Re: AJOUTER UNE VILLE EN LUI ASSOCIANT LE PAYS PAR FORMULAIRE

par ab1011 » 29 janv. 2021, 17:01

Je n'ai pas compris le sens de votre question.

Re: AJOUTER UNE VILLE EN LUI ASSOCIANT LE PAYS PAR FORMULAIRE

par or 1 » 29 janv. 2021, 16:24

<option value="<?php echo $pays['pays_id']; ?>"><?php echo $pays['pays_nom']; ?></option>
quel est le html généré par ce code ?

Re: AJOUTER UNE VILLE EN LUI ASSOCIANT LE PAYS PAR FORMULAIRE

par ab1011 » 29 janv. 2021, 16:19

Bonjour, J'ai fait exactement ce que vous m'avez dit de faire, mais J'ai ce message d'erreur :

Fatal error: Uncaught Exception: PAYS_ID doit être un entier.L'objet ne peut pas être créé. in C:\wamp64\www\villes-site-en-poo-et-pdo\class\Ville.php on line 27

Exception: PAYS_ID doit être un entier.L'objet ne peut pas être créé. in C:\wamp64\www\villes-site-en-poo-et-pdo\class\Ville.php on line 27

Besoin d'aide, merci d'avance & bonne journée.

voici mon code :

process/process-ajout-ville.php
require('../includes/inc-connexion.php');
require('../class/Ville.php');
require('../class/villeManager.php');

if(isset($_POST['submit_form'])) {

	$ville_nom_form = trim($_POST['ville_nom_form']);
	$ville_texte_form = trim($_POST['ville_texte_form']);
	$pays_id_form = trim($_POST['pays_id_form']);

	if((empty($ville_nom_form)) OR empty($ville_texte_form) OR !isset($pays_id_form)) {

		$message = '<p class="error">Veuillez remplir tous les champs !</p>';
	}
	else {

		$ville_data = array(
            
            'ville_id' => 1,
			'ville_nom' => $ville_nom_form,
			'ville_texte' => $ville_texte_form,
			'pays_id' => $pays_id_form
		);

		$city_data = new Ville($ville_data);

		$manager = new villeManager($db);
	    
	    if(!$manager->getVilleExiste($ville_nom_form)) {

	    	$manager->insertVille($city_data);

	    	$message = '<p class="success">La ville ' . $ville_nom_form . ' a bien été ajouté !</p>';
	    }
	    else {

	    	$message = '<p class="error">La ville ' . $ville_nom_form . ' n\'a pas été ajouté !</p>';
	    }
	}
}
admin/ajout.php
<head>
	<title>Ajouter une ville</title>
	<meta charset="utf-8">
	<link rel="stylesheet" href="css/style.css">
</head>

<body>
	<div id="wrapper">
		<div id="container_add">
			<h1>ajouter une ville</h1>
		    <form method="post" action="">
		    	<p>Nom de la ville : <input type="text" id="ville_nom_form" name="ville_nom_form"></p> 
            
                <p>Texte de présentation<br>
                	<textarea name="ville_texte_form" cols="75" rows="25"></textarea> 
                </p>

                <p>
                	<label>Choisissez le pays : </label>
				    <select name="pays_id_form">
				    	<?php if(!empty($pays_data)) : ?>
	                        <?php foreach($pays_data as $pays) : ?>
	                        	<option value="<?php echo $pays['pays_id']; ?>"><?php echo $pays['pays_nom']; ?></option>
	                        <?php endforeach; ?>
	                    <?php endif; ?>
				    </select>
                <p><input type="submit" id="submit_form" name="submit_form" value="valider"></p>
            </form>

            <?php if(isset($message)) echo $message; ?>
        </div>
    </div>
</body>
class/Ville.php
class Ville {

    private $_ville_id;
	private $_ville_nom;
	private $_ville_texte;
    private $_pays_id;

    private static $error;

    const MSG_ERROR_VILLE_ID = 'VILLE_ID doit être un entier.';
    const MSG_ERROR_VILLE_NOM = 'VILLE_NOM doit être une chaîne de caractères.';
    const MSG_ERROR_VILLE_TEXTE = 'VILLE_TEXTE doit être une chaîne de caractères.';
    const MSG_ERROR_PAYS_ID = 'PAYS_ID doit être un entier.';
    const MSG_ERROR_END = 'L\'objet ne peut pas être créé.';
			
	public function __construct(array $data) {

        $this->setVilleId($data['ville_id']);
        $this->setVilleNom($data['ville_nom']);
        $this->setVilleTexte($data['ville_texte']);
        $this->setPaysId($data['pays_id']);

        if(!empty(self::$error)) {

            throw new Exception(self::$error . self::MSG_ERROR_END);
        }
    }

    public function setError($msg) {

        self::$error = $msg;
    }
 
    public function getError() {

        return self::$error;
    }
 
    public function setVilleId($ville_id) {

        if((is_int($ville_id)) AND ($ville_id > 0)) {

            $this->_ville_id = $ville_id;
        }
        else {

            $this->setError(self::MSG_ERROR_VILLE_ID);
        }
    }
 
    public function setVilleNom($ville_nom) {

        if(is_string($ville_nom)) {

            $this->_ville_nom = $ville_nom;
        }
        else {

            $this->setError(self::MSG_ERROR_VILLE_NOM);
        }
    }
 
    public function setVilleTexte($ville_texte) {

        if(is_string($ville_texte)) {

            $this->_ville_texte = $ville_texte;
        }
        else {

            $this->setError(self::MSG_ERROR_VILLE_TEXTE);
        }
    }

    public function setPaysId($pays_id) {

        if((is_int($pays_id)) AND ($pays_id > 0)) {

            $this->_pays_id = $pays_id;
        }
        else {

            $this->setError(self::MSG_ERROR_PAYS_ID);
        }
    }
 
    public function getVilleId() {

        return $this->_ville_id;
    }
 
    public function getVilleNom() {

        return $this->_ville_nom;
    }
 
    public function getVilleTexte() {

        return $this->_ville_texte;
    }

    public function getPaysId() {

        return $this->_pays_id;
    }
}
class/villeManager.php
class villeManager {

	private $_db;

	public function __construct($db) {

		$this->setDb($db);
	}

	public function setDb(PDO $dbh) {

		$this->_db = $dbh;
	}
        
        public function getVilleExiste($ville_nom) {

        $sql = 'SELECT ville_nom FROM villes WHERE ville_nom = :ville_nom';

        $stmnt = $this->_db->prepare($sql);

        $stmnt->execute(

            array(

                ':ville_nom' => $ville_nom
            )
        );

        $count = $stmnt->rowCount();

        if($count > 0) {

            return true;
        }
        else {

            return false;
        }
    }

    public function insertVille(Ville $ville) {

        $sql = 'INSERT INTO villes (ville_nom, ville_texte, pays_id) VALUES (:ville_nom, :ville_texte, :pays_id)';

        $ville_nom = htmlspecialchars($ville->getVilleNom());
        $ville_texte = htmlspecialchars($ville->getVilleTexte());
        $pays_id = $ville->getPaysId();

        $stmnt = $this->_db->prepare($sql);

        $stmnt->bindParam(':ville_nom', $ville_nom);
        $stmnt->bindParam(':ville_texte', $ville_texte);
        $stmnt->bindParam(':pays_id', $pays_id);

        $stmnt->execute();
    }

Re: AJOUTER UNE VILLE EN LUI ASSOCIANT LE PAYS PAR FORMULAIRE

par Ryle » 28 janv. 2021, 19:02

Dans ton formulaire d'ajout de ville, ajoute un menu déroulant contenant la liste des pays que tu as dans table pays. Pour chaque option de ce select utilise le pays_id :
<option value="<?php echo ... 'pays_id' ... ?>"> <?php echo ... 'pays_nom' ... ?> </option>

Au moment où tu enregistres ta ville, tu recevras ainsi également le pays_id dy pays que tu as sélectionné et tu pourras l'enregistrer dans ta table :)

Re: AJOUTER UNE VILLE EN LUI ASSOCIANT LE PAYS PAR FORMULAIRE

par ab1011 » 28 janv. 2021, 16:41

quand je veux ajouter une ville dans la table villes à partir de l'administration par formulaire, je ne peux pas parce que je dois renseigné le champs pays_id. C'est la que ça bloque.

Re: AJOUTER UNE VILLE EN LUI ASSOCIANT LE PAYS PAR FORMULAIRE

par Ryle » 28 janv. 2021, 15:30

Salutations !

Je comprends bien que tu veux mettre à jour ta table de ville avec l'id pays qui convient, mais je ne suis pas certain de bien comprendre comment tu veux le faire. En fait il te faut déterminer pour chaque ville dans quel pays elle se trouve, aller chercher dans ta table pays l'id correspondant et l'insérer dans ta table des villes... après dire à quel moment intervient ton formulaire, je vois pas trop...

Tu veux faire un formulaire qui liste toutes les villes et propose une liste de pays qui permet à utilisateur d'associer le bon pays à chaque ville ?

AJOUTER UNE VILLE EN LUI ASSOCIANT LE PAYS PAR FORMULAIRE

par ab1011 » 28 janv. 2021, 15:05

Bonjour, j'ai une table villes et une table pays :

- Dans la table villes, j'ai des colonnes intitulés ville_id, ville_nom, ville_texte et pays_id.

- Dans la table pays, j'ai des colonnes intitulés pays_id et pays_nom.

Comment puis-je rentré dans le champs pays_id de la table villes le numéro correspondant au pays par formulaire ?

Merci d'avance & bonne journée.