CMS Doppelte einträge verhindern...

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • CMS Doppelte einträge verhindern...

    Hallo,

    ich bemühe mich gerade an einem cms. Und bin nun auf ein Problem gestoßen.
    Es sieht wie folgt aus:

    Es gibt:

    Hauptkategorie, ($m)
    Subkategorie, ($s)
    Inhalt ($p)

    in dieser Reihenfolge.
    Erstelle ich nun eine Hauptkategorie bekommt sie, sofern noch keine andere vorhanden ist die nummer 1 ... (also $m = 1)

    Wähle ich im Bereich wo ich Subketegorien anlegen kann nun die erste Hauptkategorie aus und lege dazu eine Subkategorie an, bekommt die Subkategorie auch die Zahl 1, sofern keine andere Subkategorie zu dem haupkategoriepunkt vorhanden sind. (also $s = 1)

    Gleiches passiert mit den Inhalten.

    So setzt sich mein "code" zusammen., welcher die Inhalte und Kategorien verwaltet. Habe ich nun auf meiner Index-Seite die nachfrage nach dem code $m=1, $s=2, $p=4 so weiß das Skrip und die DB: Hauptkategorie Nr.1, davon Subkategorie Nr 2 und Inhalt Nr.4

    Nun zum eigentlichen Problem. Bei eintragen errechnet sich die Zahl des Codes, z.B. $m indem gezählt wird, wieviele Hauptkategorien schon vorhanden sind, +1. Ist also keine Hauptkategorie vorhanden bekmmt $m = 1... sind 2 vorhanden bekommt $m = 3 usw....
    Das funktioniert bis zu dem Punkt, wo ich eine Hauptkategorie lösche.

    Habe ich z.B 3 Hauptkategorien $m = 1 , $m = 2 und $m = 3 und lösche nun Hauptkatagorie 2 so sind in der Datenbank noch 2 Hauptkategorien vorhanden. 1 und 3. Erstelle ich nun wieder eine neue Hauptkategorie so bekommt diese, die schon vergebende $m = 3, da das skript ja prüft wieviele schon vorhanden sind und addiert +1. So kommt es zu den doppelten Einträgen.

    Anbei habe ich mal den Quelltext den ich verwende um die Kategorie Zahl zu bestimmen. Könntet ihr mir helfen das Problem zu umgehen?

    PHP-Code:
    <?PHP
    $sql_select_cat 
    "SELECT status FROM content WHERE status = 'category';"


    $counter 0;
    $result_select_cat mysql_query($sql_select_cat) OR die(mysql_error());
    while(
    $row_select_cat mysql_fetch_assoc($result_select_cat)) {
        if (
    $row_select_cat["status"] != ""){
        
    $counter = ($counter+1);
        }
        }
        
    $value_m $counter+1;
    ?>
    The Human Mirror - Mein Blog!
    www.sonicsense.de - The future of music!

  • #2
    Mhn, wieso machst du das nicht einfach mit auto_increment?
    PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

    Kommentar


    • #3
      Genau! Bäääh!
      Ich denke, also bin ich.
      Manche sind trotzdem!

      Kommentar


      • #4
        Original geschrieben von cst
        Genau! Bäääh!
        Mhn?
        PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

        Kommentar


        • #5
          Weil die Lücke zwischen 1 und 3 wieder geschlossen werden soll. :[

          Ich als Idee:

          Wenn ich die Datenbank mit while abfrage... bekomme ich eine Liste mit den Vorhanden Hauptkategorien,... nun müssen nur Zeile 1+2, 3+4, 5+6... usw miteinander verglichen werden.

          An meinem Beispiel... Zeile 1: $m1 = 1, Zeile 2 $m2 = 3,..

          Nun könnte man: $m2 - $m1 = 2

          Wenn nun also die Differenz > 1 ist, so soll $m1+1 gelten und den $m-Wert ergeben.

          Nur wie ich das Umsetze .... tjo... :[
          Zuletzt geändert von Hazzardous; 13.07.2004, 16:05.
          The Human Mirror - Mein Blog!
          www.sonicsense.de - The future of music!

          Kommentar


          • #6
            Die Lücke soll geschlossen werden?

            Wieso nicht alle Datensätze einlesen, dann in eine Schleife, in der Schleife immer $i hochsetzen, und dann in der Schleife den Datensatz updaten, mit der von $i vorgesehenen ID
            PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

            Kommentar


            • #7
              Update auf Version 4.1 dann kannste mit sub-select elegant lösen. Deine Lösung ist bei einer Multiuser-App. sehr unsicher.

              Kommentar


              • #8
                Weil $m so klein wie möglich gehalten werden soll.

                The Human Mirror - Mein Blog!
                www.sonicsense.de - The future of music!

                Kommentar


                • #9
                  Original geschrieben von asp2php
                  Update auf Version 4.1 dann kannste mit sub-select elegant lösen. Deine Lösung ist bei einer Multiuser-App. sehr unsicher.
                  Warum ist es für Multiuser unsicher? Und leider habe ich nicht die Möglichkeit die Version zu ändern.

                  Und wie würde meine Variante aussehen wenn ich sie Programmieren könnte?

                  *verzweifel
                  The Human Mirror - Mein Blog!
                  www.sonicsense.de - The future of music!

                  Kommentar


                  • #10
                    Original geschrieben von Hazzardous
                    Weil $m so klein wie möglich gehalten werden soll.
                    wieso denn das?

                    Kommentar


                    • #11
                      Original geschrieben von Hazzardous
                      Warum ist es für Multiuser unsicher?
                      weil ein anderer User/Admin dazwischen funken kann, dann hast du nicht nur Doppel sondern vielfach, wenn mehr Leute berechtigt sind, das zu machen.

                      Kommentar


                      • #12
                        Dann haben wir aneinander vorbeigeredet. Genau das möchte ich ja beheben. Also 2 Sachen:

                        1. Die Lücken solle, falls dort mal ein Datensatz war, geschlossen werden und..
                        2. Es sollen die doppelten Einträge verhindert werden.

                        Und lieb wäre es mir wenn es möglich wäre das sich während der While Schleife immer 2 Zeilen, also Zeile 1 und 2 dann Zeile 2 und 3 vergleichen. Dann soll sich von der höheren Zeile die niedrigere Zeile abgezogen werden und anhand der Differenz kann man ja dann dingfest machen ob nun eine neue Nummer vergeben werden soll oder eine zu schliessende Lücke da ist. (Wenn ich mich nicht irre) Nur ich kann es Programmiertechnisch nicht umsetzen.
                        Zuletzt geändert von Hazzardous; 13.07.2004, 16:39.
                        The Human Mirror - Mein Blog!
                        www.sonicsense.de - The future of music!

                        Kommentar


                        • #13
                          Kann mir bitte jemand Helfen meinen Gedanken in PHP zu formulieren? Ich bin am verzweifeln :[

                          *heeeuuuuuull
                          The Human Mirror - Mein Blog!
                          www.sonicsense.de - The future of music!

                          Kommentar


                          • #14
                            Ich fasse nochmal zusammen:

                            Ich erstelle DB-Einträge.
                            Zeile 1: ID= 1 M=1
                            Zeile 2: ID= 2 M=2
                            Zeile 3: ID= 3 M=3

                            Nun lösche ich z.B. die Zeile 2.

                            Füge ich nun eine neue Zeile hinzu, kommt mit dem Code den ich geschrieben habe (da er die vorhanden Zeilen zählt und dann +1 rechnet) dabei raus

                            Zeile 1: ID= 1 M=1
                            Zeile 3: ID= 3 M=3
                            Zeile 4: ID= 4 M=3

                            Nun habe ich einen Doppelten Eintrag. Und ich kann leider nicht die ID nehmen, da ich noch 2 andere Spalten neben M habe bei denen das gleiche Problem ist. Darum kein Auto Increment.

                            Hier ist der Verantwortliche Code
                            PHP-Code:
                            <?PHP
                            $sql_select_cat 
                            "SELECT status FROM content WHERE status = 'category';"


                            $counter 0;
                            $result_select_cat mysql_query($sql_select_cat) OR die(mysql_error());
                            while(
                            $row_select_cat mysql_fetch_assoc($result_select_cat)) {
                                if (
                            $row_select_cat["status"] != ""){
                                
                            $counter = ($counter+1);
                                }
                                }
                                
                            $value_m $counter+1;
                            ?>
                            Ich wäre euch tausendfach dankbar wenn ihr mir helfen könntet, zumindest mit dem Problem der doppelten Einträge
                            The Human Mirror - Mein Blog!
                            www.sonicsense.de - The future of music!

                            Kommentar


                            • #15
                              Man könnte vorm Löschen eines Eintrags einfach dessen m-Wert auslesen und zwischenspeichern. Dann löscht man diesen Datensatz und reduziert bei allen anderen Datensätzen, deren m-Wert grösser als der zwischengespeicherte ist, denselben um 1.
                              So treten schonmal keine Lücken auf ... ich weiss jedoch nicht, ob es in deinem Fall problematisch ist, wenn sich durch einen Löschvorgang auch die m-Werte aller nachfolgenden Einträge ändern.
                              [color=red]Geht nicht[/color] ist keine Fehlermeldung

                              Kommentar

                              Lädt...
                              X