Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem beim Setzten einer Variable

Einklappen

Neue Werbung 2019

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

  • Problem beim Setzten einer Variable

    Hallo,

    ich habe mal wieder ein projekt gestartet um mein wissen in PHP zu erweitern.

    Es ist ein Kommentar system, ich habe eine Tabelle in der datenbank die so aussieht:

    Code:
    |||   Feld   |||+|||    Typ   |||
    +---------------+---------------+
    | kon_id        | int(11)       |
    +---------------+---------------+
    | id            | int(11)       |
    +---------------+---------------+
    | datum         | varchar(10)   |
    +---------------+---------------+
    | zeit          | varchar(5)    |
    +---------------+---------------+
    | name          | text          |
    +---------------+---------------+
    | text          | text          |
    +---------------+---------------+
    So nun habe ich 3 Dateien, eine zum Anzeigen der Kommentare, eine zum Eintragen und eine um Anzuzeigen wie viele Einträge schon in kon_id X drin sind.

    kon_id stellt eine Kommentar Gruppe da, id stellt die id des Kommentars da.

    Nun rufe ich in der Eintrage seite folgendes auf:

    Code:
    <?php
    $query = "SELECT kon_id, id, datum, zeit, name, text FROM $tabele ORDER BY id DESC";
    $result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());
    
    while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
       
       if ($row[0] == $kid) {
      		$id = $row[1];
    		$id++;
       }
    }
    ?>
    Also $id wird der letzten ausgelesenen id angepasst und dann um eins erhöht, das problem ist das er nach 2 einträgen den wert nicht mehr erhöht.

    Dann habe ich folgende ausgabe:

    Code:
    Eintrag 1: id = 0
    Eintrag 2: id = 1
    Eintrag 3: id = 1
    Kann mir einer sagen woran das liegt das id nicht höher geht?

    Sorry für die lange beschreibung, aber ich finde es wichtig das man weiss worum es sich genau dreht da dies ab und zu entscheident sein kann.

    *edit*
    Der php code steht in "code" da "php" irgendwie nicht will

    Danke im Vorraus.
    MFG
    DJ Nuno


  • #2
    Hallo,

    das Problem liegt wohl eher an der schlechten Tabellen Struktur der Datenbank.
    Für `datum` & `zeit` bitte `DATETIME` verwenden, für `id` PrimaryKey + auto_increment, dann kannst du auf das manuelle Hochzählen der `id` verzichten (das übernimmt MySQL.

    Kommentar


    • #3
      irgendwie sieht die schleife komisch aus

      PHP-Code:
      <?php
      while ($row mysql_fetch_array($resultMYSQL_NUM)) {
         
         if (
      $row[0] == $kid) {
              
      $id $row[1];
            
      $id++;
         }

      ?>
      warum $row[1]? sollte das nicht $row['id'] heissen? genauso mit $row[0]
      und warum setzt du $id +1 also $id++ wenn du bei dem nächsten durchgang $id wieder überschreibst?

      Nebenbei hat Zergling recht

      Kommentar


      • #4
        Hallo,

        Also erstmal zu Zergling:

        Ich habe nicht Datetime benutzt weil ich davon MYSQL nicht wirklich ahnung habe, ich habe die feld typen von einem anderen projekt kopiert.
        Werde es mal damit versuchen.

        Zu HK:

        $row[0] und $row[1], weil ich nicht wusste das es auch anders geht.
        Werde das auch mal versuchen.

        Die id wird um 1 erhöht um herrauszufinden welche die nächte id ist, da ich mich auch an einem kleinen admin tool versucht habe ist das Projekt jetzt etwas anders.

        Vorher wurde nur anhand der anzahl an einträgen herraqusgefunden welche die nächte id ist, was aber ja nun nicht mehr geht.
        Da das Admin tool natürlich durch die id's die eniträge löscht.

        Erstmal vielen dank werde mal gucken wir ich eure tipps in das projekt intigrieren kann.
        MFG
        DJ Nuno

        Kommentar


        • #5
          Ich finde es schrecklich wenn leute etwas kopieren das aber nicht sagen ... So kommt es oft vor, das beide Seiten sowohl der Thread Starter als auch die Poster nicht wissen was genau gemeint ist ... kann doch nit sein ... !

          Man müsse so nen Feld machen
          [ ] selber geschreiben
          [ ] kopiert
          welches man bei jeden Threadstart anklicken müsst

          LG Chris

          Kommentar


          • #6
            was ist denn dadran so schlimm??? (o_O)
            MFG
            DJ Nuno

            Kommentar


            • #7
              Dass wir davon ausgehen du verstehst das Skript.

              Kommentar


              • #8
                Das tue ich auch, ich weiss schon was ich da kopiere dafür gibt es doch genug seiten im netz und in die PHP Manual gucke ich auch oft genug.

                Nicht jeder lernt gleich am anfang wie man seinen code so schreibt das er am effektivsten und schnellsten arbeitet

                *edit*
                Weiss jetzt wieder warum ich nicht Date und Time in der MySQL benutz habe, das ausgabe format gefällt mir nicht.
                MFG
                DJ Nuno

                Kommentar


                • #9
                  ..welches du in jede erdenkliche Format umwandeln kannst...

                  Kommentar


                  • #10
                    Wuste ich nicht, das ist aber auch im moment erstmal relative.
                    Ich bin der Meinung das der Code erstmal überhaupt laufen sollte
                    MFG
                    DJ Nuno

                    Kommentar


                    • #11
                      Hallo.

                      Du liest ja nur die letzte ID der Beiträge inneralb einer Kommetar-Gruppe ($kid) aus. Du müsstest diese Bedingung also rausnehmen, um tatsächlich die höchste ID auszulesen. Dazu würde es aber auch eine einfache Query tun. In jedem Fall hast du ein Problem: Zwischen dem Auslesen der letzten ID und dem Schreiben des neuen Eintrages mit ID=letzte_ID+1 besteht ein kleines Zeitfenster, in dem ein anderer Prozess einen neuen Datensatz einfügen könnte. Das kannst du natürlich abfangen, aber genau dafür gibt es eben auto_increment-Felder.

                      Um auf $row['id'] etc. zugreiefn zu können, musst du entweder den zweiten Parameter von mysql_fetch_array() auf MYSQL_ASSOC oder so stellen oder gleich mysql_fetch_assoc() verwenden.

                      Die Zietangabe solltest du in jedem Fall in ein Feld zusammenziehen. Wenn dir DATETIME nicht taugt, dann schreib einen Unix-Timestamp in das Feld. Wenn du die Datensätze der zeitlichen Reihenfolge nach sortierten möchtest, dann sortiere dann eben über dieses Zeit-Feld und nicht über die ID. Zwar sollte es ja nicht vorkommen, dass ein neuerer Beitrag eine kleinere ID als der bisang neueste Beitrag bekommt, aber man weiß ja nie, was kommt. Vielleicht möchtest du irgendwann mal Daten importieren und musst die einfriemeln. Dann ist es ärgerlich, auch noch die Queries anpassen zu müssen.

                      Basti

                      Kommentar


                      • #12
                        Hallo,

                        das habe ich schon gemacht und es geht nun auch alles.
                        leider ist das script nicht include fähg also muss ich es mit einer IFrame machen aber das sollte gehen.

                        Vielen dank an alle!
                        MFG
                        DJ Nuno

                        Kommentar

                        Lädt...
                        X