Bonjour,

Voila je rencontre un petit problème avec mon code. je souhaite faire un ajout dans ma base de données et voici le code que j'ai saisie.

Je précise que ce code fonctionne parfaitement dans une autre page, j'ai juste modifié les champs.

$NomFichierFinal = uniqid(rand())."-".clean($_FILES['fichier']['name']);
            move_uploaded_file($_FILES['fichier']['tmp_name'],'../visuels/themes/'.$NomFichierFinal);
            /// INDIQUE AU SERVEUR BDD QUE L'ON VA EFFECTUER UNE REQUETTE QUI VA MODIFIER LE NOMBRE D'ENREGISTREMENT
            $bdd->beginTransaction();
            $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $requete = "INSERT INTO themes (`themes`, `fichier` ) VALUES (?, ?)";
            $reponse = $bdd->prepare($requete);
            $reponse->execute(array($_POST['themes'], $NomFichierFinal));
            $bdd->commit(); 
            echo '<p class="alert alert-success"><i class="fas fa-check-circle"></i> Tout c\'est bien passé votre nouveau theme a bien été ajouté, Féliciations !!!</p>';
            echo '<p><a href="themes.php?action=ajouter" class="btn btn-success ajout"><i class="fas fa-plus"></i> ajouter un theme</a> <a href="themes.php" class="btn btn-light"><i class="fas fa-list-ol"></i> retour liste</a></p>';
        }

Voici le message d'erreur que ca me renvoie :

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1364 Field 'idt' doesn't have a default value in C:\wamp64\www\cdos93_v2\regent\themes.php on line 61

ma table est composée de 3 colonnes : idt (clé primaire / themes / Fichier

Je ne comprend absolument pa ce qui se passe d'autant que je le répéte ce code fonctionne parfaitement dans un autre fichier.

Si vous pouvez m'aider je suis preneuse.

PS : si quelqu'un peut aussi me donner une astuce pour supprimer un champ dans une table liée sans impacté l'autre table je suis preneuse.

3 réponses


salut
je pense que ton probleme est lie a la bdd non pas au code il faut verefier si le champ idt est en autoincremente
pour la suppression. je ne sais pas si tu veut supprimer la valeur ou le champ. si c'est le champ donc c'est un changement dans la structure de la table tu peut faire ca avec phpmyadmin l'autre table elle ne sera pas impacter mais il faut juste faire attention a tes données pour eviter les redandance je ne sais pas ce que tu veut faire exactementmaintenant si tu veut supprimer un champ ID d'une table pere surement tu y aura des enregistrement insignifiant dans la table fils

mocoye
Auteur

Bonjour,

tout d'abord merci d'avoir répondu à mon message.

Pour préciser afin que la réponse soit la plus efficace possible :

j'ai 3 tables qui sont liées :
1/ theme : idt/themes
2/ albums : ida / album / vignette / id_th (qui reprend idt de la table theme corresspondant)
3/ photos : idp / photos / id_alb_p (qui reprend ida de la table albums corresspondant)

Pour les modifications et suppressions :
Les photos ne peuvent appartenir qu'à un seul album donc leur suppression entraîne la suppression de l'album et inversement.
en revanche un thème peut avoir plusieurs albums mais un album ne peut avoir qu'un thème

en fait pour schématiser :

  • 1 thème = x albums = x photos
  • 1 album = 1 thème = x photos
  • x photos = 1 album = 1 thèmes

je ne sais pas si j'ai été claire ?

mocoye
Auteur

Bonjour,

Alors j'ai testé sur ma page de gestion des albums, toujours le meme problème pour la suppression des champs ou il y a des photos, et pour ceux où il n'y a pas de photos ca fonctionne.

En revanche pour la modification, il y a bien une modification, mais :
Exemple je modifie le ida= 99 et ca modifie l'ida=1 quand je regarde l'url c'est bien le GET=99 qui passe du coup je comprend pas d'ou viens l'erreur, voici le code :

//// POUR MODIFIER UN FICHIER
    case 'modifier':
    if (empty($_POST["validation"])) {
        $requete = "SELECT *
                FROM albums_p, themes
                WHERE themes.idt=id_th AND albums_p.ida=".$_GET['ida'];
        $reponse = $bdd->prepare($requete);
        $reponse->execute();
        while ($ligne=$reponse->fetch(PDO::FETCH_OBJ)) {
    ?>
        <form method="post" action="albums.php?action=modifier&ida=<?php echo $_GET['ida']; ?>" enctype="multipart/form-data">
            <input type="hidden" name="validation" value="ok">
            <input type="hidden" name="MAX_FILE_SIEZ" value="8000000">
            <div class="form-group">        
                <div class="form-group form-inline">
                    <label for="albums_p">Album </label>
                    <input type="text" class="form-control" name="albums_p" id="albums_p" placeholder="nom de l'album" value="<?php echo htmlspecialchars($ligne->albums_p); ?>" required>
                </div>
                <div class="form-group form-inline">
                    <label for="abrev_alb_p">Abréviation </label>
                    <input type="text" class="form-control" name="abrev_alb_p" id="abrev_alb_p" placeholder="Abréviation" value="<?php echo htmlspecialchars($ligne->abrev_alb_p); ?>" required>
                </div>
                <div class="form-group form-inline">
                    <label for="vignettes_p">Vignette</label>
                    <input type="file" class="form-control" id="vignettes_p" name="vignettes_p" value="<?php echo htmlspecialchars($ligne->vignettes_p); ?>" required accept="image/jpeg, image/x-png">
                </div>
                <div class="form-check form-check-inline">
                    <label for="id_th">themes</label>
                    <?php 
                    $requete = "SELECT * FROM themes" ;
                    $reponse = $bdd->prepare($requete);
                    $reponse->execute();
                    ?>
                    <select name="id_th" id="id_th">
                    <?php while ($ligne=$reponse->fetch(PDO::FETCH_OBJ)) { ?>
                    <option value="<?php echo $ligne->idt; ?>"><?php echo $ligne->idt; ?> - <?php echo $ligne->themes; ?></option>
                    <?php } ?>
                    </select>
                </div>
            </div>
             <input class="btn btn-primary" type="submit" value="Modifier">
        </form>
    <?php }
}
else {
        if (!isset($_FILES) OR !isset($_FILES['vignettes_p']) OR ($_FILES['vignettes_p']['name'] <> "" AND $_FILES['vignettes_p']['error'] > 0 )) {
                echo '<p class="alert alert-danger">Erreur lors du transfert du fichier</p>';
                break;
            }
            /// GENERER UN NOM DE FICHIER UNIQUE
            $NomFichierFinal = uniqid(rand())."-".clean($_FILES['vignettes_p']['name']);
            move_uploaded_file($_FILES['vignettes_p']['tmp_name'],'../images/albums/[\'abrev_alb_p\']'.$NomFichierFinal);
            /// INDIQUE AU SERVEUR BDD QUE L'ON VA EFFECTUER UNE REQUETTE QUI VA MODIFIER LE NOMBRE D'ENREGISTREMENT

            $bdd->beginTransaction();
            $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $requete = "UPDATE `albums_p` SET albums_p=?, abrev_alb_p=?, vignettes_p=?, id_th=? WHERE ida=? in (SELECT idp from photos where ida=id_alb_p)";
            $reponse = $bdd->prepare($requete);
            $reponse->execute(array($_POST['albums_p'], $_POST['abrev_alb_p'], $NomFichierFinal, $_POST['id_th'], $_GET['ida']));
            $bdd->commit(); 
            echo '<p class="alert alert-success"><i class="fas fa-check-circle"></i> Tout c\'est bien passé l\'albume a bien été mofifié, Féliciations !!!</p>';
            echo '<p><a href="albums.php?action=ajouter" class="btn btn-success ajout"><i class="fas fa-plus"></i> ajouter un album</a> <a href="albums.php" class="btn btn-light"><i class="fas fa-list-ol"></i> retour liste</a></p>';
}
        break;
//// POUR SUPPRIMER UN FICHIER
    case 'supprimer':
            $bdd->beginTransaction();
            $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $requete = "DELETE FROM `albums_p` WHERE ida=? in (SELECT idp from photos where ida=id_alb_p)";
            $reponse = $bdd->prepare($requete);
            $reponse->execute(array($_GET['ida']));
            $bdd->commit(); 
            echo '<p class="alert alert-success"><i class="fas fa-check-circle"></i> Tout c\'est bien passé l\'album a bien été supprimé, Féliciations !!!</p>';
            echo '<p><a href="albums.php?action=ajouter" class="btn btn-success ajout"><i class="fas fa-plus"></i> ajouter un albums</a> <a href="albums.php" class="btn btn-light"><i class="fas fa-list-ol"></i> retour liste</a></p>';
        break;

j'avoue que je suis un peu perdu là,