ID finden und Eintrag löschen?

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

  • ID finden und Eintrag löschen?

    Ich bin gerade ein Newssystem mit Adminpanal zu schreiben. Also die News klappen auch. Jetzt möchte ich gerne im Adminpanal einen Bereich erstellen wo der User gewisse Einträge löschen kann, was dann so ausehen soll:
    05: Neues von uns [bearbeiten | löschen]
    Mein Problem ist jetzt nur, wie ich rausfinden kann welche ID der Beitrag hat und wie ich eine Funktion auslöse, dass wenn ich auf einen Link klicke. Wie z.B.: "bearbeiten".

  • #2
    Lass' dir einfach die Newstitel ausgeben (der Reihe nach) und füge deine zwei Links am Ende hinzu. Und dann machst du als <a href Code \"bla.php?deletenews=",$row->id,"\". Je nachdem, wie du deine SELECT-Abfrage gestaltest...
    "I am what I am and I do what I can..."
    Meine HP -- Mein GPG-Key
    Meine Projekte: WebStorage 2.0 -- easyAJAX-Chat 2.2.0 (beta)

    Kommentar


    • #3
      Ja wenn ich das mache und ich zuvor einen Newsbeitrag lösche, dann stimmt die Reihenfolge doch nichtmehr oder? Weil wenn ich z. B.: ID 2 lösche dann ist die Reihenfolge 1, 3, 4, 5 usw. oder klappt das schon?
      Wie muss ich den Link dann genau definieren, hab meinen Code mal dazugeschrieben?
      Und das mit den Link mein ich eigentlich so das der PHP-Code in der selben Datei steht, aber erst drauf zugegriffen wird wenn ich auf den Link klicke.

      PHP-Code:
      <?php
          error_reporting
      (E_ALL);
          include 
      "inc/config.php"// die Konfigurationsdateien lesen.

          // Verbindung zu MySQL Aufbauen
          
      @mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS) OR die(mysql_error());
          
      mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());

          
      // news.php
          
      $sql "SELECT
                      Titel,
                      Inhalt,
                      Datum
                  FROM
                      News
                  ORDER BY
                      Datum DESC"
      ;
          
      $result mysql_query($sql) OR die(mysql_error());
          if(
      mysql_num_rows($result)) {
              while(
      $row mysql_fetch_assoc($result)) {
                  echo 
      "    <div class=\"news\"><b>";
                  echo 
      $row['Titel'];
                  echo 
      "    </b></div>\n";
                  echo 
      "    <div class=\"text\">(";
                  echo 
      $row['Datum'];
                  echo 
      ")    </div>\n";
                  echo 
      "    <div class=\"text\">\n";
                  echo 
      nl2br($row['Inhalt']); // \n in <br /> umwandeln
                  
      echo "    </div>\n";
                  echo 
      "    <br><center><img src=\"img/line2.jpg\"></center>";
                  echo 
      "</div>\n";
              }
          } else {
              echo
      "<p>Keine News vorhanden</p>\n";
          }
      ?>

      Kommentar


      • #4
        Um welche Reihenfolge machst du dir sorgen?
        Prinzipiell macht man es so:
        Jeder Eintrag hat eine eindeutige ID. Anhand dieser ID kann ein Beitrag identifiziert werden. Und anhand einer ID kann ein Beitrag dann auch gelöscht werden.

        (Hinweis: Es handelt es sich um keinen für dein Problem konkret zugeschnittenen Code... Ich möchte dir hier nur das Prinzip erläutern.)
        PHP-Code:
        $sql "SELECT id, title FROM table_news";
        $result mysql_query($sql)
            or die(
        mysql_error());

        while (
        $row mysql_fetch_assoc($result))
        {
            
        // liste aller einträge erstellen
            
        print '<a href="?action=delete&news_id=' $row['id'] . '">' $row['title'] . '</a>';

        Jetzt musst du nur noch an geeigneter Stelle überprüfen, ob
        Code:
        $_GET['action']
        delete entspricht und
        Code:
        $_GET['news_id']
        mit übergeben wurde. Falls ja, dann Eintrag mit der jeweiligen ID löschen.
        Zuletzt geändert von Griecherus; 10.12.2006, 22:23.
        Nieder mit der Camel Case-Konvention

        Kommentar


        • #5
          Jetzt musst du nur noch an geeigneter Stelle überprüfen, ob
          Code:
          $_GET['action']
          delete entspricht und
          Code:
          $_GET['news_id']
          mit übergeben wurde. Falls ja, dann Eintrag mit der jeweiligen ID löschen.
          Versteht sich natürlich von alleine, das du auf integer achtest (sql-injection) und nur benutzer mit entsprechenden rechten die aktionen ausführen dürfen!!

          Kommentar


          • #6
            Original geschrieben von PHP-Desaster
            Versteht sich natürlich von alleine, das du auf integer achtest (sql-injection) und nur benutzer mit entsprechenden rechten die aktionen ausführen dürfen!!
            Natürlich. Nur ist das seine Aufgabe, nicht meine. Ich habe ihm nur das Prinzip vermitteln wollen.
            Nieder mit der Camel Case-Konvention

            Kommentar


            • #7
              Also ich habe mein Problem jetzt mal so gelöst, aber ich denke nicht das dies die beste Möglichkeit ist. Bitte gibt mir mal Tipps/Möglichkeiten wie ich das System verbessern kann.
              Brauch ich überhaupt zwei PHP-Seiten um den Vorgang "löschen" zu aktivieren?
              Wie genau kann ich denn über $_GET-Funktion die ID übermitteln?

              Es funktioniert so:

              Über die news.php werden alle News aufgelistet.
              news.php
              PHP-Code:
              <?php include ("checkuser.php"); ?>
              <br><center>[<a href="news_anlegen.php">News anlegen</a>]</center><br>
              <?php
                  error_reporting
              (E_ALL);
                  include 
              "../inc/config.php";

                  
              // Verbindung zu MySQL Aufbauen
                  
              @mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS) OR die(mysql_error());
                  
              mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());

                  
              $sql "SELECT
                      ID,
                              Titel
                          FROM
                              News
                          ORDER BY
                              Datum DESC"
              ;
                  
              $result mysql_query($sql) OR die(mysql_error());
                  if(
              mysql_num_rows($result)) {
                      while(
              $row mysql_fetch_assoc($result)) {
                          echo 
              "<div class=\"news\"><b>&nbsp;ID ";
                          echo 
              $row['ID'];
                          echo 
              ":&nbsp;";
                          echo 
              $row['Titel'];
                          echo 
              "</b> [<a href=\"news_bearbeiten.php?id=" $row['ID'] . "\">
              bearbeiten</a> | <a href=\"news_loeschen.php?id=" 
              $row['ID'] . "\">
              löschen</a>]</div>\n"
              ;
                      }
                  } else {
                      echo
              "<p>Keine News vorhanden</p>\n";
                  }
                  echo
              "<br>";
              ?>
              Wenn der User jetzt auf löschen geht wird die Seite news_loeschen.php aufgerufen und die ID wird per URL mitgeliefert.

              news.loeschen.php
              PHP-Code:
              <?php include ("checkuser.php"); ?>
              <?php
                  error_reporting
              (E_ALL);
                  include 
              "../inc/config.php";

                  
              // Verbindung zu MySQL Aufbauen
                  
              @mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS) OR die(mysql_error());
                  
              mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());

                  
              $nr $id;

                  
              $sql "DELETE FROM
                      News
                          WHERE
                              ID=
              $nr";
                  
              $result mysql_query($sql);

                  
              header("Location: cp.php");
                  exit;
              ?>
              Zuletzt geändert von SilverVegeto; 12.12.2006, 10:13.

              Kommentar


              • #8
                Du brauchst nicht unbedingt zwei PHP-Skripte dafür, du kannst das auch in einer Datei lösen, sofern du das so möchtest. Die Grundlage dafür ist, unterscheiden zu können, welche Aktion der User gerade "aufruft", also z.B. Einträge anzeigen, Eintrag bearbeiten oder löschen usw. Das lässt sich in der Regel ganz gut über GET-Parameter regeln.

                Beispiel:
                PHP-Code:

                $action 
                $_GET['action'];

                if (
                $action == 'list')
                {
                    
                // alle beiträge anzeigen
                }
                elseif (
                $action == 'edit' && !empty($_GET['news_id'])
                {
                    
                // beitrag mit der id "news_id" bearbeiten (in form anzeigen)
                }
                elseif (
                //...)
                {
                    
                // und so weiter und so fort
                }

                // alternativ ließe sich das auch über einen switch lösen 
                So benötigst du nicht für jede Aktion eine eigene Datei. Dafür solltest du umso mehr auf Struktur und Übersichtlichkeit achten. Und nicht vergessen: Bei meinem Code-Beispiel handelt es sich nur um eine mögliche prinzipielle Funktionsweise. Die Detailarbeit in jeglicher Hinsicht bleibt natürlich bei dir.

                Du hast in der new.loeschen.php übrigens einen "Fehler". Die news_id wird nämlich nirgends übergeben, sofern register_globals auf "off" gestellt ist. Dann müsste es nämlich
                Code:
                $_GET['param_name'];
                heissen, um dein_script.php?param_name=param_value anzusprechen. In deinem Fall $id = $_GET['id'];.
                Sollte register_globals auf "on" sein, dann sofort etwas dagegen tun. Mehr dazu hier.
                Nieder mit der Camel Case-Konvention

                Kommentar


                • #9
                  Also ich hab das jetzt mal probiert, aber es erscheint immer folgende Fehlermeldung:
                  Parse error: parse error, unexpected '{' in /srv/www/web1/html/..../news.php on line 36
                  Mein Code:
                  PHP-Code:
                  <?php include ("checkuser.php"); ?>
                  <br><center>[<a href="news_anlegen.php">News anlegen</a>]</center><br>
                  <?php
                      error_reporting
                  (E_ALL);
                      include 
                  "../inc/config.php";

                      
                  // Verbindung zu MySQL Aufbauen
                      
                  @mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS) OR die(mysql_error());
                      
                  mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());


                  $action $_GET['action'];

                  if (
                  $action == '')
                  {
                      
                  $sql "SELECT
                          ID,
                                  Titel
                              FROM
                                  News
                              ORDER BY
                                  Datum DESC"
                  ;
                      
                  $result mysql_query($sql) OR die(mysql_error());
                      if(
                  mysql_num_rows($result)) {
                          while(
                  $row mysql_fetch_assoc($result)){
                      
                  // liste aller einträge erstellen
                      
                  print '<a href="?action=edit&news_id=' $row['id'] . '">' $row['title'] . '</a>';
                      }
                      } else {
                          echo
                  "<p>Keine News vorhanden</p>\n";
                      }
                      echo
                  "<br>";

                  }
                  elseif (
                  $action == 'edit' && !empty($_GET['news_id'])
                  # Zeile 36
                      
                  $sql "DELETE FROM
                          News
                              WHERE
                                  ID=
                  $news_id";
                      
                  $result mysql_query($sql);

                      
                  header("Location: news.php");
                  }
                  ?>

                  Kommentar


                  • #10
                    Och Kinders, lernt doch bitte, bevor ihr mit etwas komplexeren Sachen rumspielt, erst mal die Grundlagen der Syntax so weit, dass ihr einen besch***enen simplen parse error selber finden könnt ...

                    PHP-Code:
                    elseif ($action == 'edit' && !empty($_GET['news_id'])

                    Na, was fehlt denn da am Ende der Zeile vor der geschweiften Klammer noch?

                    Konzentriere dich, nimm deine ganzen Grundschulmathekenntnisse zusammen - und zähle die verdammten Runden Klammern ...
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Okay, sry das war ein dummer Fehler von mir. Nun zu den hoffe ich mal vorerst letzten Fragen. Hab noch zwei Fehlermeldungen wobei ich folgenden Code benutze:

                      Wenn die News aufgelistet werden:
                      Notice: Undefined index: action in /srv/www/web1/html/hosted/.../news.php on line 12
                      Nach dem Löschvorgang:
                      Warning: Cannot modify header information - headers already sent by (output started at /srv/www/web1/html/hosted/.../cp.php:13) in /srv/www/web1/html/hosted/.../news.php on line 45
                      PHP-Code:
                      <?php include ("checkuser.php"); ?>
                      <br><center>[<a href="news_anlegen.php">News anlegen</a>]</center><br>
                      <?php
                          error_reporting
                      (E_ALL);
                          include 
                      "../inc/config.php";

                          
                      // Verbindung zu MySQL Aufbauen
                          
                      @mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS) OR die(mysql_error());
                          
                      mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());


                      $action $_GET['action']; # Zeile 12

                      if ($action == "")
                      {
                          
                      $sql "SELECT
                              ID,
                                      Titel
                                  FROM
                                      News
                                  ORDER BY
                                      Datum DESC"
                      ;
                          
                      $result mysql_query($sql) OR die(mysql_error());
                          if(
                      mysql_num_rows($result)) {
                              while(
                      $row mysql_fetch_assoc($result)){
                          
                      // liste aller einträge erstellen
                                      
                      echo "    <div class=\"news\"><b>";
                                  echo 
                      $row['ID'];
                                  echo 
                      $row['Titel'];
                                  echo 
                      "</div>\n";
                          }
                          } else {
                              echo
                      "<p>Keine News vorhanden</p>\n";
                          }
                          echo
                      "<br>";

                      }
                      elseif (
                      $action == "edit" && !empty($_GET["news_id"]))
                      # Zeile 36
                          
                      $sql "DELETE FROM
                              News
                                  WHERE
                                      ID=
                      $news_id";
                          
                      $result mysql_query($sql);

                        
                      header ("Location: cp.php"); # Zeile 46
                      }
                      ?>

                      Kommentar


                      • #12
                        Notice: Undefined index: action in [...]
                        -> Suchfunktion!
                        Warning: Cannot modify header information - headers already sent by [...]
                        -> Suchfunktion & und der extra zu diesem Thema hier im Forum immer oben angezeigte Sticky Thread zu diesem dämlichen Thema!


                        OffTopic:
                        Verdammte Gamer-Kiddies ... können die sich eigentlich selber den Hintern abwischen?
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar

                        Lädt...
                        X