Insérer des infos dans ma base de données via un formulaire

Fermé
dinolam81 Messages postés 9 Date d'inscription lundi 30 décembre 2013 Statut Membre Dernière intervention 20 septembre 2016 - 30 déc. 2013 à 18:12
dinolam81 Messages postés 9 Date d'inscription lundi 30 décembre 2013 Statut Membre Dernière intervention 20 septembre 2016 - 31 déc. 2013 à 12:40
J'ai un problème avec mes deux requêtes sql: SELECT et INSERT INTO.
Je n'arrive pas à insérer des infos via un formulaire dans ma base de données.

J'utilise PHP 5.4.12, MySQL 5.6.12, server wamp, windows 7, PDO, Architecture MVC.

Voilà les deux requêtes: la 1ère permet de vérifier si un utilisateur existe déjà avec le même pseudo et la 2ème permet d'insérer les infos ds la BD.

1ère req:

$req = $db->query("
SELECT count(*) AS nbr
FROM users u
INNER JOIN type_users tu
ON u.type_users_id = 'tu.type_users_id'
WHERE tu.type_users_name = '$pseudo'
") or die(print_r($db->errorInfo()));
$data = $req->fetch();
$req->closeCursor();

2ème req:

INSERT INTO users( users_name)
SELECT count(*)
FROM users u
INNER JOIN type_users tu
ON u.type_users_id = 'tu.type_users_id'
WHERE users_name = '.$pseudo.'
$req->execute(array($q)) or die(print_r($db->errorInfo()));

$data = $req->fetch();
$req->closeCursor();


code connexion à la BD:

$host = "mysql:host=127.0.0.1;dbname=swoop;charset=utf-8";
$user = "root";
$password = "";
try {
$db = new PDO($host, $user, $password);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
} catch(Exception $e) {
echo 'Impossible de se connecter à la base de données <br />';
echo $e->getMessage();
die();
}

J'utilise 2 tables ds la BD: users et type_users: les deux sont reliées par le champ: type_users_id. J'utilise aussi les deux requêtes ds des fonctions: is_pseudo et input_pseudo que j'appelle ds la partie traitement formulaire.
Par exemple: dans le controller et dans la page:trait_form: j'ai mis ce code:

<?php
if(isset($pseudo) && !empty($pseudo)) {

$pseudo = htmlspecialchars($_POST['pseudo']);

// Fonction d'insertion ds la BD (utiliser ds le modèle)
input_pseudo();

}
?>

Quelqu'un peut m'aider? Merci!
A voir également:

7 réponses

Utilisateur anonyme
30 déc. 2013 à 22:29
Bonjour

ON u.type_users_id = 'tu.type_users_id'
Quand tu écris ceci, avec des apostrophes autour de 'tu.type_users_id', ta condition de jointure n'est pas que les champs type_users_id des deux tables soient égaux. C'est que le champ u.type_users_id contienne le texte 'tu.type_users_id', car entre mis entre des apostrophes, ce n'est plus un nom de champ mais un texte. Tu comprends la différence ? Il aurait fallu écrire ON u.type_users_id = tu.type_users_id sans apostrophes.

Je ne comprends pas ta deuxième requête. Ce que tu insères dans le champ users_name de ta table users, ce n'est pas un nom mais le résultat d'une sous-requête "SELECT COUNT(*) etc" donc un nombre. Je doute que ce soit que tu voulais faire.
0
dinolam81 Messages postés 9 Date d'inscription lundi 30 décembre 2013 Statut Membre Dernière intervention 20 septembre 2016
30 déc. 2013 à 23:58
Merci le père de m'avoir répondu!
En faite dans la 2ème requêtes je voulais juste insérer le nom d'utilisateur dans la base de données. J'ai pris juste l'exemple du users_name mais il concerne aussi les autres champs de la table users.
0
dinolam81 Messages postés 9 Date d'inscription lundi 30 décembre 2013 Statut Membre Dernière intervention 20 septembre 2016
31 déc. 2013 à 00:03
J'aurai besoin d'éclaircissement sur l'insertion des infos ds la BD en utilisant les jointures comme je l'ai fait, qu'il s'agit de l'insertion d'un champ ou de plusieurs.

Merci de votre compréhension.
0
Utilisateur anonyme
31 déc. 2013 à 07:10
Si tu veux insérer une info dans une base de données, tu n'as pas besoin de jointure.
Par exemple :

INSERT INTO users (users_name) VALUES ($pseudo)

Explique-moi à quoi te servirait une jointure ici.
Par contre, cette requête est probablement incomplète : il te manque sûrement d'autres champs.

Et fais bien attention au sens des mots : quand on parle d'insertion dans une base de données, on parle de créer une nouvelle ligne. Tous les champs de la ligne sont créés en même temps, il est plus prudent de leur donner des valeurs à tous (sauf éventuellement un champ auto-incrémenté). Je ne vois pas ce qu'une jointure vient faire là-dedans.
INSERT INTO users (users_name,login, age) VALUES ('$pseudo','$login', 2013-$naissance)


Si tu veux absolument insérer les champs les uns après les autres, seul le premier serait une insertion (INSERT sql) : les autres seraient des mises à jour (UPDATE).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dinolam81 Messages postés 9 Date d'inscription lundi 30 décembre 2013 Statut Membre Dernière intervention 20 septembre 2016
31 déc. 2013 à 12:28
Bonjour le père,

J'ai 2 tables ds ma base de données: users et type_users.
Elles sont liées par un champ(clé étrangère): fk_type_users_id ds la table users.
J'ai 2 types d'utilisateurs(par exple: des artistes et des mélomanes).
Si un membre s'inscrit, il est identifié ds la table type_users pour qu'on sache que c'est un artiste ou un mélomane. Et ses infos sont enregistrées ds la table users liées par la clé étrangère: fk_type_users_id.

C'est ce que j'essaye de faire.

Voilà le code de mes tables:

Structure de la table 'type_users':

CREATE TABLE IF NOT EXISTS 'type_users' (
'type_users_id' int(11) NOT NULL AUTO_INCREMENT,
'type_users_name' varchar(255) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY ('type_users_id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=5 ;

Structure de la table 'users':

CREATE TABLE IF NOT EXISTS 'users' (
'users_id' int(11) NOT NULL AUTO_INCREMENT,
'users_password' varchar(255) COLLATE utf8_bin DEFAULT NULL,
'users_name' varchar(255) COLLATE utf8_bin DEFAULT NULL,
'users_prenom' varchar(255) COLLATE utf8_bin DEFAULT NULL,
'users_email' varchar(255) COLLATE utf8_bin DEFAULT NULL,
'users_description' text COLLATE utf8_bin,
'type_users_id' int(11) DEFAULT NULL,
'ville_id' int(11) DEFAULT NULL,
'civilite_id' int(11) DEFAULT NULL,
PRIMARY KEY ('users_id'),
KEY 'fk_users_type_users_idx' ('type_users_id'),
KEY 'fk_users_ville1_idx' ('ville_id'),
KEY 'fk_users_civilite1_idx' ('civilite_id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=2 ;

Je voudrais savoir comment insérer des infos ds la BD via un formulaire en utilisant MVC quand on a deux types d'utilisateurs(artistes et mélomanes) pour pouvoir les distinguer.

Merci!
0
Utilisateur anonyme
31 déc. 2013 à 12:32
Très bien, as-tu une question précise ?
0
dinolam81 Messages postés 9 Date d'inscription lundi 30 décembre 2013 Statut Membre Dernière intervention 20 septembre 2016
31 déc. 2013 à 12:40
J'ai un formulaire avec les champs: pseudo:mot de passe, mot de passe confirm, email. Je veux qu'à travers ce formulaire les artistes et les mélomanes puissent s'inscrire et les enregistrer en base de données.

Ma question: comment faire la requête d'insertion?

Merci!
0