PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 Re : Forum Général PHP » Question de syntaxe... je suppose » 03-09-2010 23:08:08

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...

<?php
if (isset ($_POST['envoyer'])){
// On récupère les champs
$artiste=$_POST['artiste'];
$album=$_POST['album'];
$annee=$_POST['annee'];
$genre=$_POST['genre'];
$pays=$_POST['pays'];
$label=$_POST['label'];
$support=$_POST['support'];


    $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!!!

#2 Re : Forum Général PHP » Question de syntaxe... je suppose » 03-09-2010 23:08:08

Il n'aura pas fallu attendre longtemps pour que je revienne demander conseils wink

J'ai donc fait un formulaire pour insérer les objets et qui fonctionne:

// On récupère les champs
if(isset($_POST['artiste']))      $artiste=$_POST['artiste'];
else      $artiste="";

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 sad

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... wink

#3 Re : Forum Général PHP » Question de syntaxe... je suppose » 03-09-2010 23:08:08

Ç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 wink

#4 Re : Forum Général PHP » Question de syntaxe... je suppose » 03-09-2010 23:08:08

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 wink

#5 Forum Général PHP » Question de syntaxe... je suppose » 03-09-2010 23:08:08

BloodyM
Réponses : 6

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:
       


<?php
$db = mysql_connect('localhost', 'root', '');
 
mysql_select_db('music',$db);
 
$order = (iSset($_GET['ordre']) ? $_GET['ordre'] : null);
$tri = (iSset($_GET['tri']) ? " ORDER BY " . $_GET['tri'].' '. $order : null);
$ARTISTE = (iSset($_GET['ARTISTE']) ? $_GET['ARTISTE'] : null);
 
$requete  = "SELECT artiste,album,année,genre,pays,label FROM vinyles";
if ( $ARTISTE != null) { // on ajoute le critère que s'il est demandé
  $requete  .= " WHERE ARTISTE=" .$ARTISTE; // Nota: si ARTISTE est numérique, il ne faut pas le délimiter avec des apostrophes en SQL
}
$requete .=  $tri;
$resultat = mysql_query($requete) or die('Erreur SQL !'.$requete.'<br>'.mysql_error());
 
 
//TABLEAU
echo '<table border="0">';
echo '<thead>';
echo '<tr>
    <th>Artiste <a href="?view=vinyle&tri=ARTISTE&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=ARTISTE&ordre=desc"> <img src="img/triUP.png"></a></th>
    <th>Album <a href="?view=vinyle&tri=ALBUM&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=ALBUM&ordre=desc"> <img src="img/triUP.png"></a></th>
    <th>Année <a href="?view=vinyle&tri=ANNéE&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=ANNéE&ordre=desc"> <img src="img/triUP.png"></a></th>
    <th>Pays <a href="?view=vinyle&tri=PAYS&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=PAYS&ordre=desc"> <img src="img/triUP.png"></a></th>
    <th>Genre <a href="?view=vinyle&tri=GENRE&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=GENRE&ordre=desc"> <img src="img/triUP.png"></a></th>
    <th>Label <a href="?view=vinyle&tri=LABEL&ordre=asc"><img src="img/triDOWN.png"></a><a href="?view=vinyle&tri=LABEL&ordre=desc"> <img src="img/triUP.png"></a></th>
     
    </tr>'
;
    '</thead>';
 
// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($resultat))
    {
    // on affiche les informations de l'enregistrement en cours
        echo '<tr><td>[b]<a href="?view=vinyle&ARTISTE=????????">[/b]'.$data['artiste'].'</a></td><td>'.$data['album'].'</td><td align="center">'.$data['année'].'</td><td align="center">'.$data['pays'].'</td><td align="center">'.$data['genre'].'</td><td align="center">'.$data['label'].'</td></tr>';
    }
'</table>';
// on ferme la connexion à mysql
mysql_close();
?>

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

&ID_AUTEUR=<?php echo $ARTISTE; ?>

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...

Pied de page des forums

Propulsé par FluxBB