IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Gestion de relation avec condition php [MySQL]


Sujet :

PHP & Base de données

  1. #21
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Quand on fait bien les choses, on sépare la vue (du HTML avec des incursions de PHP pour alimenter certaines valeurs à afficher à partir des variables PHP), le modèle, les requêtes vers la base de données, et le contrôleur (toute la logique applicative, qu'est ce qui se passe quand l'utilisateur fait quelque chose sur la vue).

    Donc la requête devrait au moins être dans le contrôleur, mieux, dans le modèle.

    Le contrôleur réagit à la soumission du formulaire par l'utilisateur et traite les données saisies.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO tutoriel (logiciel_id /*, les autres colonnes à alimenter , la ok :)*/ )
    VALUES (5 /*,la par contre je dois pas mettre d'id puisque il est recuperer par la liste :)  */ )
    5 est l'id du logiciel choisi par l'utilisateur pour l'associer au nouveau tutoriel à enregistrer. Donc oui, c'est la valeur à enregistrer dans la colonne logiciel_id de la table tutoriel. C'est la valeur de la clé étrangère référençant le logiciel auquel est consacré le tutoriel.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #22
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Voici ma partie formulaire implémenter dans une fonction

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <?php
    function Post_Tuto_Form()
    { ?>
    <?php
    $nlogiciel = mysql_query('SELECT * FROM logiciel');
    ?>
    <form id="posteur" method="post" name="ajout" autocomplete="on">
    <fieldset style="width:300px;">
    <legend style="padding-left: 32px; color: darkslategray; font-size: 16px; font-family: Verdana; text-shadow: 1px 1px 1px blue; ">Partie I formulaire</legend>
    <div class="corner-hi3"></div>
    <div class="corner-hi-revers"></div>
     
    <label for="ttr_title">Titre : </label>
    <input type="text" name="ttr_title" size="45" placeholder="Le Titre du Tuto"/><br /><br />
     
    <label for="ttr_temps">Durée: </label>
    <input type="text" name="ttr_temps" size="45" placeholder="La durée..."/>
    <br/><br/>
     
    <label for=lgc_nom>Logiciel: </label>
    <select name="lgc_nom" style="width:150px;" required>
    <?php
    while ($affichelogiciel = mysql_fetch_array($nlogiciel))
    {
    ?>
       <option value="<?php echo $affichelogiciel['lgc_id'] ?>">
       <?php echo $affichelogiciel['lgc_nom'] ?>
       </option>
    <?
    }
    ?>

    Puis voici la partie programmation SQL,
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    <?php
    session_start();
     
    // On inclus les fichiers necessaires
     
    // sécurisation à l'affichage
    $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES); };
    if(!isset($_SESSION['pseudo']))
    {
         header("Location: index.php");
    }
    $enr = mysql_query('SELECT * FROM utilisateur WHERE id_utilisateur = "'.$_SESSION["id"].'"');
    $row = mysql_fetch_assoc($enr);
    $level = $row["User_Rang"];
     if($level != 1)
     {
     header("Location: index.php");
     }
    ?>
    <?php
    if(isset($_POST['send']))
    {
    if(!empty($_POST["ttr_title"]) AND !empty($_POST['ttr_content']) AND !empty($_POST["ttr_desc"]) AND !empty($_POST["ttr_temps"]))
    {     
    // Création des variables aux noms abrégés
    $id_user =  mysql_real_escape_string($_SESSION['id']);
    $datetime =  date('Y-m-d H:i:s');
    $title =  mysql_real_escape_string($_POST["ttr_title"]);
    $desc =  mysql_real_escape_string($_POST["ttr_desc"]);
    $content =  mysql_real_escape_string($_POST["ttr_content"]);
    $temps =  mysql_real_escape_string($_POST["ttr_temps"]);
    $prix =  mysql_real_escape_string($_POST["ttr_prix"]);
    $type = mysql_real_escape_string($_POST["ttr_type"]);
    $img_vignette =  mysql_real_escape_string($_POST["image_vignette"]);
    $img_normale =  mysql_real_escape_string($_POST["image_normale"]);
    $img_popup =  mysql_real_escape_string($_POST["image_popup"]);
    $lgc_id = mysql_real_escape_string($_POST["lgc_id"]);
    $table = "tutoriel";
     
    $enr=mysql_query("INSERT INTO $table(ttr_id, ttr_title, ttr_content, ttr_desc, ttr_prix, ttr_date, ttr_temps, ttr_type ) VALUES('','$title', '$content', '$desc', '$prix','$datetime', '$temps', '$type') ") or die ("Erreur requette ".mysql_error());
    $insertion_image=mysql_query(" INSERT INTO image (id_image, image_vignette, image_normale, image_popup) VALUES ('','".$_POST["image_vignette"]."','".$_POST["image_normale"]."','".$_POST["image_popup"]."')");
    $update = mysql_query("UPDATE tutoriel SET logiciel_id = '.$lgc_id' ");
    $resultat = "<div class='err'>Tutoriel ajouté !<br><b style='color:green;'>Le tuto est ajouté en BDD.</b></div>";
    header ("Refresh: 1;URL=add-tutos.php");
    mysql_close();
    }
    else
    {
    $resultat = "<div class='err'>Erreur !<b>Attention, tous les champs ne sont pas remplis.</b></div>";
    }
    echo $resultat;
    }   
     
    ?>

    Voila c'est la que ça marche plus
    Tu trouves ma structure correcte ?

  3. #23
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    J'ai bien compris le système de MVC
    Le Modèle-Vue-Contrôleur, et d'ailleurs j'étais en train de l'implémenter à mon site, seulement le gros probleme réside dans le fait de ces insertions à mon gout, je n'arrive pas a faire en sorte que la clé logiciel_id prenne l'ID logiciel correspondant a celui de la liste

  4. #24
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Dans le traitement de ton formulaire, tu as ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $lgc_id = mysql_real_escape_string($_POST["lgc_id"]);
    Mais dans la construction du formulaire, tu as ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="lgc_nom" style="width:150px;" required>
    Change le nom de la balise select !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $enr=mysql_query("INSERT INTO $table(ttr_id, ttr_title, ttr_content, ttr_desc, ttr_prix, ttr_date, ttr_temps, ttr_type ) 
    VALUES('','$title', '$content', '$desc', '$prix','$datetime', '$temps', '$type') ") or die ("Erreur requette ".mysql_error());
    Pourquoi avoir mis le nom de la table dans une variable ? Ça ne sert à rien !

    Plutôt que de donner une valeur chaîne vide à la colonne ttr_id, comme elle est auto-incrémentée, ne la mentionne simplement pas dans la liste des colonnes de la table.
    Idem pour id_image dans la requête suivante.

    Le prix est une valeur numérique, inutile de l'entourer d'apostrophes ! C'est peut-être vrai pour d'autres colonnes, à vérifier. Et dans le cas de valeurs numériques attendues pour la requête, plutôt que mysql_real_escape_string, il vaut mieux utiliser intval ou la fonction appropriée au type de valeur attendue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $insertion_image=mysql_query(" INSERT INTO image (id_image, image_vignette, image_normale, image_popup) 
    VALUES ('','".$_POST["image_vignette"]."','".$_POST["image_normale"]."','".$_POST["image_popup"]."')");
    Pourquoi utilises-tu ici $_POST au lieu de la variable sécurisée que tu as créée plus haut ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $update = mysql_query("UPDATE tutoriel SET logiciel_id = '.$lgc_id' ");
    Pourquoi soumettre une requête supplémentaire alors que tu peux affecter cette valeur à la clé étrangère dès la requête d'insertion ?

    Tu as utilisé or die sur la première requête mais pas sur les autres. Si l'une de ces deux requêtes plante, tu auras quand même le message de succès de l'enregistrement.

    Normal que l'image insérée ne soit pas associée au tutoriel ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #25
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Oulah ca fait beaucoup en même temps

    Bien c'est partit,
    J'ai corrigé en fonctions de tes remarques
    Je vais tester pour voir, par contre la je ne comprends pas :

    Pourquoi soumettre une requête supplémentaire alors que tu peux affecter cette valeur à la clé étrangère dès la requête d'insertion ?
    C'est quoi l'étape pour faire ça ?

    Tu as utilisé or die sur la première requête mais pas sur les autres. Si l'une de ces deux requêtes plante, tu auras quand même le message de succès de l'enregistrement.

    Problème reglé mais il parait qu'il ne faut pas laisser les OR DIE en production est ce vrai ?


    Normal que l'image insérée ne soit pas associée au tutoriel ?
    Non de même pour le logiciel, la categorie etc... C'est pour ca que je poste pour comprendre la démarche a effectuer

  6. #26
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par design_57
    Citation Envoyé par CinéPhil
    Pourquoi soumettre une requête supplémentaire alors que tu peux affecter cette valeur à la clé étrangère dès la requête d'insertion ?
    C'est quoi l'étape pour faire ça ?
    Il n'y a pas d'étape, il suffit de modifier la requête d'insertion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $enr=mysql_query("INSERT INTO $table(logiciel_id, ttr_title, ttr_content, ttr_desc, ttr_prix, ttr_date, ttr_temps, ttr_type )
    VALUES($lgc_id,'$title', '$content', '$desc', $prix, '$datetime', '$temps', '$type') ") or die ("Erreur requette ".mysql_error());
    Citation Envoyé par design_57
    Citation Envoyé par CinéPhil
    Tu as utilisé or die sur la première requête mais pas sur les autres. Si l'une de ces deux requêtes plante, tu auras quand même le message de succès de l'enregistrement.
    Problème reglé mais il parait qu'il ne faut pas laisser les OR DIE en production est ce vrai ?
    Le problème de or die est que ça envoie un message incompréhensible pour l'utilisateur final étranger au programme. C'est plutôt disgracieux et ça ne fait pas très pro.
    Il vaut mieux gérer les éventuelles erreurs avec d'autres techniques pour afficher un message d'erreur clair pour l'utilisateur.

    Citation Envoyé par design_57
    Citation Envoyé par CinéPhil
    Normal que l'image insérée ne soit pas associée au tutoriel ?
    Non de même pour le logiciel, la categorie etc... C'est pour ca que je poste pour comprendre la démarche a effectuer
    Dans la table des tutoriels, tu as une clé étrangère qui référence l'identifiant du logiciel auquel est consacré le tutoriel. Puisque l'image que tu insères semble associée au tutoriel, il faut une clé étrangère dans la table des images qui référence l'identifiant du tutoriel.

    MCD :
    tutoriel -0,n----avoir----1,1- image
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #27
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Bien vu ^^
    Moi j'ai une clé image_id mais dans la table tutoriel !
    Ce qui n'est pas bon je me trompe ?

    Sinon pour le reste ca fonctionne plutôt bien merci !

    Ca avance lentement mais surement

    Je vous dit pour la clé etrangére elle prend l'ID de tutoriel ?

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Requête SQL:
     
    ALTER TABLE `image` ADD FOREIGN KEY ( `tutoriel_id` ) REFERENCES `formatikzmain`.`tutoriel` (
    `ttr_id`
    ) ON DELETE CASCADE ON UPDATE CASCADE ;
     
    MySQL a répondu: Documentation
    #1452 - Cannot add or update a child row: a foreign key constraint fails (`formatikzmain`.<result 2 when explaining filename '#sql-c13_34174c3'>, CONSTRAINT `#sql-c13_34174c3_ibfk_1` FOREIGN KEY (`tutoriel_id`) REFERENCES `tutoriel` (`ttr_id`) ON DELETE CASCADE ON U)

  8. #28
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par design_57 Voir le message
    Bien vu ^^
    Moi j'ai une clé image_id mais dans la table tutoriel !
    Ce qui n'est pas bon je me trompe ?
    Donc cela répond plutôt à ce MCD :
    tutoriel -1,1----avoir----0,n- image

    Pourquoi pas !

    Je vous dit pour la clé etrangére elle prend l'ID de tutoriel ?

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Requête SQL:
     
    ALTER TABLE `image` ADD FOREIGN KEY ( `tutoriel_id` ) REFERENCES `formatikzmain`.`tutoriel` (
    `ttr_id`
    ) ON DELETE CASCADE ON UPDATE CASCADE ;
     
    MySQL a répondu: Documentation
    #1452 - Cannot add or update a child row: a foreign key constraint fails (`formatikzmain`.<result 2 when explaining filename '#sql-c13_34174c3'>, CONSTRAINT `#sql-c13_34174c3_ibfk_1` FOREIGN KEY (`tutoriel_id`) REFERENCES `tutoriel` (`ttr_id`) ON DELETE CASCADE ON U)
    Ben si un tutoriel n'a qu'une image et qu'une image peut être affectée à plusieurs tutoriels, n'ajoute pas de clé étrangère référençant le tutoriel dans la table image, ce serait faux.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #29
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Ok j'ai compris,
    Donc je n'ajoute pas de clé dans la table image,
    parce qu'en fait : 1 Tutoriel
    1 ,N POSSEDE 1,1 Image
    Voila comment je vois la cardinalité

  10. #30
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    1 Tutoriel 1 ,N POSSEDE 1,1 Image
    Ce qui se traduit par la règle de gestion suivante :
    Un tutoriel possède de une à plusieurs images et une image est possédée par un seul tutoriel.

    Ça semble correspondre au processus de ton programme puisque apparemment tu insères l'image en même temps que le tutoriel. Mais ça ne correspond pas à la structure des tables puisque en ce cas la clé étrangère est dans la table des images et non pas dans la table des tutoriels.

    Alors, la règle de gestion est-elle juste ?
    Sinon reformule là et tu trouveras les cardinalités.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #31
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Effectivement ,
    C'est juste , Un tutoriel possede de 1 a plusieurs image , ces dernières appartiennent à 1 tutoriel ,
    Je supprime la clé Fk dans la table Tutoriel et ajoute une Fk en Image

    Je pense que ca devrait sonner juste

    Mince en ajoutant par phpmyadmin dans les gestions relations j'ai cette maudite erreur !
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     ALTER TABLE `image` ADD FOREIGN KEY ( `tutoriel_id` ) REFERENCES `formatikzmain`.`tutoriel` (
    `ttr_id`
    ) ON DELETE RESTRICT ON UPDATE RESTRICT ;
     
    MySQL a répondu: Documentation
    #1452 - Cannot add or update a child row: a foreign key constraint fails (`formatikzmain`.<result 2 when explaining filename '#sql-c13_3421120'>, CONSTRAINT `#sql-c13_3421120_ibfk_1` FOREIGN KEY (`tutoriel_id`) REFERENCES `tutoriel` (`ttr_id`))

  12. #32
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Tu dois déjà avoir des données dans la table image ?
    Du coup, quand tu as ajouté la colonne tutoriel_id, la valeur par défaut pour toutes les lignes s'est mise soit à NULL soit à zéro selon que la colonne est "NULLable" ou NOT NULL.
    Et maintenant que tu veux poser la contrainte de clé étrangère, MySQL vérifie que cette valeur zéro existe comme identifiant d'un tutoriel, ce qui n'est probablement pas le cas.

    Solution :
    - modifier la valeur de la colonne portant la clé étrangère image.tutoriel_id avec les bonnes valeurs, donc des identifiants de tutoriels existant dans la table des tutoriels ;
    - ajouter ensuite la clé étrangère.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  13. #33
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Est ce que vider la table tuto et image solutionnerai quelque chose ?

  14. #34
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Si tu n'en es qu'à des données de test pendant le développement, tu peux effectivement vider ces deux tables.
    Tu pourras alors directement ajouter la clé étrangère à la table image.

    N'oublie pas bien sûr de modifier ensuite ton programme pour alimenter cette clé à partir du mysql_insert_id obtenu après la requête d'insertion du tutoriel.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  15. #35
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Justement la requête exacte aprés l'insertion du tutoriel serait de quelle type ?
    Car il m'ajoute mais rien ne se passe , en plus il ne m'insére plus les images

    Effectivement ce ne sont que des Test

  16. #36
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Tu avais ce code :
    Citation Envoyé par design_57
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $enr=mysql_query("INSERT INTO $table(ttr_id, ttr_title, ttr_content, ttr_desc, ttr_prix, ttr_date, ttr_temps, ttr_type ) VALUES('','$title', '$content', '$desc', '$prix','$datetime', '$temps', '$type') ") or die ("Erreur requette ".mysql_error());
    $insertion_image=mysql_query(" INSERT INTO image (id_image, image_vignette, image_normale, image_popup) VALUES ('','".$_POST["image_vignette"]."','".$_POST["image_normale"]."','".$_POST["image_popup"]."')");
    Je te recommande de faire plutôt ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $reqenr = "
    	INSERT INTO tutoriel(logiciel_id, ttr_title, ttr_content, ttr_desc, ttr_prix, ttr_date, ttr_temps, ttr_type )
    	VALUES($lgc_id,'$title', '$content', '$desc', $prix,'$datetime', '$temps', '$type')
    ";
    $enr = mysql_query($reqenr) or die ("Erreur reqenr ".mysql_error()."<br />Requête :<br />".$reqenr);
     
    $ttr_id = mysql_insert_id();
     
    $reqimg = "
    	INSERT INTO image (tutoriel_id, image_vignette, image_normale, image_popup)
    	VALUES ($ttr_id, '$img_vignette','$img_normale','$img_popup')
    ";
    $insertion_image = mysql_query($reqimg) or die ("Erreur reqimg ".mysql_error()."<br />Requête :<br />".$reqimg);
    Ton code sera plus clair en l'aérant et en indentant correctement.
    En séparant l'écriture de la requête de sa soumission à MySQL, tu peux ainsi éventuellement faire un echo sur sa variable si tu n'obtiens pas d'erreur à l'exécution mais que ça ne donne pas le résultat escompté et tu peux ainsi analyser la requête réellement envoyée à MySQL.
    En plus, ça te prépare à passer à PDO qui est mieux que mysql_, ces dernières extensions n'étant plus maintenues.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  17. #37
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Magnifiquement lisible ,
    Ca fonctionne super bien MERCI

    Malheureusement un problème n'arrive jamais seul voici encore un autre soucis
    Code slq : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Warning: mysql_query(): Can't connect to local MySQL server through socket '
     
    Warning: mysql_query(): A link to the server could not be established in on line 264
    Partie I formulaire
    A chaque fois que je poste un tutoriel

    Pour finir ça doit venir des requêtes que je cherche a placer pour interoger la base de donnée, je me demande si un session_start() ne reglerai pas le
    probleme , en testant il semble que non
    Arghh

    voici les requete incriminés elle sont avant chaque fonction contenant des infos relatives a la bonne connection de la base

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $nlogiciel = mysql_query('SELECT * FROM logiciel');
    $ncategorie = mysql_query('SELECT * FROM categorie');
    $nlevel = mysql_query('SELECT * FROM level');

  18. #38
    Membre confirmé
    Homme Profil pro
    Infographiste
    Inscrit en
    Février 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 99
    Par défaut
    Problème résolu grace a Cinephil que je remercie de tout coeur ^^

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [XL-2007] Gestion des alertes avec condition Excel
    Par Leodams dans le forum Excel
    Réponses: 4
    Dernier message: 17/02/2015, 12h19
  2. relations avec condition
    Par Gunblade28 dans le forum Doctrine2
    Réponses: 2
    Dernier message: 10/11/2011, 12h34
  3. [PHP 5.0] Gestion des upload avec condition
    Par jmtrivia dans le forum Langage
    Réponses: 3
    Dernier message: 17/03/2010, 14h10
  4. Gestion des relations avec innoDB
    Par leomac dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/03/2009, 12h12
  5. Réponses: 2
    Dernier message: 22/07/2005, 12h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo