Vous n'êtes pas identifié(e).
Pages : 1
Là je suis définitivement perdu pour mon formulaire. J'ai utilisé la conditionnelle If pour retrouver ce qui existe et ce qui existe pas pour chaque champ et donc écrire et/ou récupérer une nouvelle ID. Quand un objet n'existe pas, il me le créé convenablement mais lorsqu'il existe déjà, PHP enregistre plusieurs lignes partiellement renseignées dans MySQL. Je vous donne le code à l'heure actuelle mais j'ai testé tellement de trucs qu'à certains endroits ça ne ressemble plus à rien...
$db = mysql_connect('localhost', 'root', ''); // connexion à la base
mysql_select_db('mymusic',$db); // sélection de la base
//REQUETE GENRE
$sql = "SELECT id FROM genre WHERE genre = '$genre' ";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$res = mysql_num_rows($req);
if($res!=0) {
$sql = "INSERT INTO album(idgenre) SELECT id FROM genre
WHERE genre = '$genre'";
$idgenre = mysql_insert_id();
} else {
$sql = "INSERT INTO genre(id,genre) VALUES('','$genre')"; }
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$idgenre = mysql_insert_id();
//REQUETE ANNEE
$sql = "INSERT INTO album(annee) VALUES('$annee')";
//REQUETE LABEL
$sql = "SELECT id FROM label WHERE label = '$label' ";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$res = mysql_num_rows($req);
if($res!=0) {
$sql = "INSERT INTO album(idlabel) SELECT id FROM label
WHERE label = '$label'";
} else {
$sql = "INSERT INTO label(id,label) VALUES('','$label')"; }
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$idlabel = mysql_insert_id();
//REQUETE PAYS
$sql = "SELECT id FROM pays WHERE pays = '$pays' ";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$res = mysql_num_rows($req);
if($res!=0) {
$sql = "INSERT INTO artiste(idpays) (SELECT id FROM pays
WHERE pays = '$pays')";
} else {
$sql = "INSERT INTO pays(id,pays) VALUES('','$pays')"; }
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$idpays = mysql_insert_id();
//REQUETE ARTISTE
$sql = "SELECT id FROM artiste WHERE artiste = '$artiste' ";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$res = mysql_num_rows($req);
if($res!=0) {
$sql = "INSERT INTO album(idartiste) SELECT id FROM artiste
WHERE artiste = '$artiste'";
} else {
$sql = "INSERT INTO artiste(id,artiste,idpays) VALUES('','$artiste','$idpays')"; }
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$idartiste = mysql_insert_id();
//REQUETE ALBUM FINALE
$sql =
"??????????????????????????????????????????????????????????????????????";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$res = mysql_num_rows($req);
if($res!=0) {
$sq= "??????????????????????????????????????????????????????????";
} else {
$sql = "INSERT INTO album(idartiste,album,annee,idgenre,idlabel,idsupport) VALUES('$idartiste','$album','$annee','$idgenre','$idlabel','$support')"; }
mysql_query($sql) or die( mysql_error() ) ;
// on affiche le résultat pour le visiteur
echo htmlspecialchars($_POST['album']); echo htmlspecialchars($_POST['artiste']); echo ' ajouté dans la base de données';
mysql_close(); // on ferme la connexion
}
?>
Je vous en prie, 3 jours que je bloque là dessus!!!
Il n'aura pas fallu attendre longtemps pour que je revienne demander conseils
J'ai donc fait un formulaire pour insérer les objets et qui fonctionne:
if(isset($_POST['album'])) $album=$_POST['album'];
else $album="";
if(isset($_POST['annee'])) $annee=$_POST['annee'];
else $annee="";
if(isset($_POST['genre'])) $genre=$_POST['genre'];
else $genre="";
if(isset($_POST['pays'])) $pays=$_POST['pays'];
else $pays="";
if(isset($_POST['label'])) $label=$_POST['label'];
else $label="";
if(isset($_POST['support'])) $support=$_POST['support'];
else $support="";
$db = mysql_connect('localhost', 'root', ''); // connexion à la base
mysql_select_db('mymusic',$db); // sélection de la base
//REQUETE GENRE
$sql = "INSERT INTO genre(id,genre) VALUES('','$genre')";
mysql_query($sql) or die( mysql_error() ) ;
$idgenre = mysql_insert_id();
//REQUETE ANNEE
$sql = "INSERT INTO album(annee) VALUES('$annee')";
mysql_query($sql) or die( mysql_error() ) ;
//REQUETE LABEL
$sql = "INSERT INTO label(id,label) VALUES('','$label')";
mysql_query($sql) or die( mysql_error() ) ;
$idlabel = mysql_insert_id();
//REQUETE PAYS
$sql = "INSERT INTO pays(id,pays) VALUES('','$pays')";
mysql_query($sql) or die( mysql_error() ) ;
$idpays = mysql_insert_id();
//REQUETE ARTISTE
$sql = "INSERT INTO artiste(id,artiste,idpays) VALUES('','$artiste','$idpays')";
mysql_query($sql) or die( mysql_error() ) ;
$idartiste = mysql_insert_id();
//REQUETE SUPPORT (depuis un champ de formulaire Select
$sql = "INSERT INTO support(id,support) VALUES('','$support')";
mysql_query($sql) or die( mysql_error() ) ;
//REQUETE ALBUM FINALE
$sql = "INSERT INTO album(idartiste,album,annee,idgenre,idlabel,idsupport) VALUES('$idartiste','$album','$annee','$idgenre','$idlabel','$support')";
mysql_query($sql) or die( mysql_error() ) ;
// on affiche le résultat pour le visiteur
echo($album) && ($artiste); echo ' ajouté dans la base de données';
mysql_close(); // on ferme la connexion
Cependant, je pense que j'utilise mysql_insert_id(); à mauvais escient ou bien l'origine est autre puisque à chaque ajout, il insère une nouvelle ID, même si l'objet existe déjà.
Par exemple, j'ai dans ma table le label 'Sub Pop' avec l'id=2 et si je rentre dans mon champ label 'Sub Pop' il va créer une nouvelle ID... et c'est donc tout le contraire de ce que je désire
J'ai essayé NOT EXISTS et NOT IN de bien des manières mais rien n'agit convenablement...
L'apprentissage de php/MySQL est aussi celui de la patience...
Ça-y-est, j'ai mis en place le gros de la structure de la base de données ainsi que la requête principale et de tri.
Ça va me demander un gros boulot de saisie pour spécifier chaque champ par rapport à ma (mauvaise) méthode précédente puisque ma bdd était générée par un fichier .csv depuis le petit logiciel Melomania. Pour ça que j'avais utilisé cette méthode.
Mais tant pis, si ça me permet d'obtenir ce que je veux je serai gagnant à force de patience!
Merci beaucoup moogli pour ton aide très précieuse et l'excellent lien que tu m'as fourni. Ce petit travail m'a demandé d'acquérir une certaine logique d'esprit ardue au départ mais finalement très intéressante.
Je serai probablement de retour lorsque je rencontrerai d'autres problèmes
Bonjour moogli et merci pour ta réponse.
Ça me paraît très complet et les indications que tu me donnes semblent plus logiques que ce que j'ai fait actuellement. Donc il va falloir que je repense ma bdd si je comprends bien. Je vais essayer tout ça et reviendrai par ici pour retourner le résultat obtenu.
Encore merci
Bonsoir,
Totalement novice en programmation, je suis dans un petit projet perso de bdd PHP/MySQL dans laquelle je répertorie tous mes CD, MP3 et vinyles.
J'ai trois tables différentes dans la Base "music":
****cds****
(id) - Artiste - Album - Année - Genre - Pays - Label
****mp3s****
(id) - Artiste - Album - Année - Genre
****vinyles****
(id) - Artiste - Album - Année - Genre - Pays - Label
Le tout est affiché sur 3 pages PHP différentes.
Voici ce que je souhaite faire:
Ma on tableau s'affiche de cette manière:
Artiste A - Album 1 - Année...
Artiste A - Album 3 - Année...
Artiste B - Album 9 - Année...
...
En cliquant sur le lien Artiste A par exemple, uniquement les entrées de cet artistes s'affichent. Pareil pour Année...
Voici mon code actuel récupéré sur un autre site:
J'ai bien remarqué le Nota: si ARTISTE est numérique, il ne faut pas le délimiter avec des apostrophes en SQL et je crois que c'est ce qui change tout puisque ARTISTE est en texte. En effet, si dans mon navigateur je tape: ?view=vinyle&ARTISTE='test' ça fonctionne mais si j'enlève les guillemets ' ' ça ne fonctionne plus.
J'ai essayé de placer des guillemets et modifier la syntaxe de toutes les manières mais rien ne fonctionne...
Et sinon je n'arrive pas non plus à faire mon lien (là où j'ai mis en Bold dans le texte).
J'ai essayé des trucs du genre
mais ça reste dans le même état dans le navigateur...
Merci d'avance si vous pouvez me filer un coup de main. J'ai eccumé plusieurs forums spécialisés mais comme bien souvent, ne ne répond pas... pourtant le problème doit être un léger défaut de syntaxe je pense mais je suis tellement néophyte à PHP et MySQL...
Pages : 1