Ankündigung

Einklappen
Keine Ankündigung bisher.

Löschen mit Nachricht

Einklappen

Neue Werbung 2019

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

  • Löschen mit Nachricht

    Hallo Leute, ich befinde mich in einer Sackgasse. Zunächst der Lösch-Code:

    PHP-Code:
    <?php
        error_reporting
    (E_ALL);

        if(isset(
    $_POST['ID']) AND $_POST['ID'] != 0) {
            if(isset(
    $_POST['submit']) AND $_POST['submit'] == 'Kunden löschen'){

                
    // Rechte löschen
                
    $sql "DELETE FROM
                                    User_Rechte
                        WHERE
                                    UserID = '"
    .$_POST['ID']."'
                       "
    ;
                
    mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());

                
    // Nachricht den Kunden senden
                
    $nick_d $_POST["Kunde"];
                
    $empfaenger_d $_POST["KundenMail"];
                
    $absendername_d "Mustermann";
                
    $absendermail_d "absender@mailprovider.de";
                
    // $timet_d = date("d.m.Y"); 
                
    $betreff_d "Löschung Ihres Kontos";
                
    $text_d "Hallo $nick_d,
                Ihr Konto wurde von einem Verwalter gelöscht."

                
    mail($empfaenger_d$betreff_d$text_d"From: $absendername_d <$absendermail_d>");

                
    // User löschen
                
    $sql "DELETE FROM
                                    User
                        WHERE
                                    ID = '"
    .$_POST['ID']."'
                       "
    ;
                 
    mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());

                echo 
    "Der Kunde wurde gelöscht.<br>\n";
            }
            elseif(isset(
    $_POST['submit']) AND $_POST['submit'] == 'Kunden auswählen') {
                echo 
    "Wollen Sie diesen Kunden wirklich löschen?<br>\n";
                
    $sql "SELECT
                                SessionID,
                                Nickname,
                                Email,
                                Show_Email,
                                DATE_FORMAT(Registrierungsdatum, '%d.%m.%Y') as Datum,
                                Letzte_Aktion,
                                Letzter_Login
                        FROM
                                User
                        WHERE
                                ID = '"
    .mysql_real_escape_string($_POST['ID'])."'
                       "
    ;
                
    $result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
                
    $row mysql_fetch_assoc($result);
                echo 
    "<table>\n";
                echo 
    " <tr>\n";
                echo 
    "  <td>\n";
                echo 
    "Nickname :\n";
                echo 
    "  </td>\n";
                echo 
    "  <td>\n";
                echo 
    htmlentities($row['Nickname'], ENT_QUOTES)."\n";
                echo 
    "<input type=\"text\" name=\"Kunde\" value=\"".htmlentities($row['Nickname'], ENT_QUOTES)."\">\n";
                echo 
    " (";
                if(
    $row['SessionID'] AND (time()-60*$row['Letzte_Aktion']))
                    echo 
    "<span style=\"color:green\">online</span>\n";
                else
                    echo 
    "<span style=\"color:red\">offline</span>\n";
                echo 
    ")";
                echo 
    "  </td>\n";
                echo 
    " </tr>\n";
                echo 
    " <tr>\n";
                echo 
    "  <td>\n";
                echo 
    "Email-Adresse :";
                echo 
    "  </td>\n";
                echo 
    "  <td>\n";
                echo 
    htmlentities($row['Email'], ENT_QUOTES)."\n";
                echo 
    "<input type=\"text\" name=\"KundenMail\" value=\"".htmlentities($row['Email'], ENT_QUOTES)."\">\n";
                echo 
    "  </td>\n";
                echo 
    " </tr>\n";
                echo 
    " <tr>\n";
                echo 
    "  <td>\n";
                echo 
    "Registrierungsdatum :\n";
                echo 
    "  </td>\n";
                echo 
    "  <td>\n";
                echo 
    $row['Datum']."\n";
                echo 
    "  </td>\n";
                echo 
    " </tr>\n";
                echo 
    " <tr>\n";
                echo 
    "  <td>\n";
                echo 
    "Letzter Login :\n";
                echo 
    "  </td>\n";
                echo 
    "  <td>\n";
                echo 
    date('d.m.Y H:i \U\h\r'$row['Letzter_Login'])."\n";
                echo 
    "  </td>\n";
                echo 
    " </tr>\n";
                echo 
    " <tr>\n";
                echo 
    "</table>\n";

                echo 
    "<form ".
                     
    "action=\"index.php?section=admin&page=user&action=delete\" ".
                     
    "method=\"post\">\n";
                echo 
    "<input type=\"hidden\" name=\"ID\" value=\"".$_POST['ID']."\">\n";
                echo 
    "<input type=\"submit\" name=\"submit\" value=\"Kunden löschen\">\n";
                echo 
    "</form>\n";
            }
        }
        else {
            
    $sql "SELECT
                            ID,
                            Nickname
                    FROM
                            User
                    ORDER BY
                            Nickname ASC
                   "
    ;
            
    $result mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
            if(!
    mysql_num_rows($result))
                echo 
    "Es befinden sich keine Kunden in der Datenbank\n";
            else {

                echo 
    "<form ".
                     
    " action=\"index.php?page=user&action=delete\" ".
                     
    " method=\"post\" ".
                     
    " accept-charset=\"ISO-8859-1\">";
                echo 
    "<select name=\"ID\">\n";
                echo 
    " <option value=\"0\">Bitte einen Kunden wählen</option>\n";
                while(
    $row mysql_fetch_assoc($result)) {
                    echo 
    " <option value=\"".$row['ID']."\">\n";
                    echo 
    $row['Nickname']."\n";
                    echo 
    " </option>\n";
                }
                echo 
    "</select>\n";
                echo 
    "<input type=\"submit\" name=\"submit\" value=\"Kunden auswählen\">";
                echo 
    "</form>\n";
            }
        }
    ?>
    Was sehen wir? Nun, zunächst wird ein Benutzer ausgewählt, und seine Daten werden noch einmal ausgegeben. Und beim Klicken auf "Kunden löschen" läuft dann ein SQL-Befehl durch. Die Datensätze werden korrekt gelöscht. Sowohl die Rechte als auch die Daten des Kunden sind aus der Datenbank. Jedoch wollte ich eine Art Benachrichtigung einbauen, damit der gelöschte Kunde eine Nachricht bekommt. Damit ich mit $_POST['name'] arbeiten kann, habe ich Textfelder erzeugt, zumindest für den Nickname (Kunde) und die Mail-Adresse (KundenMail).

    Führe ich das Löschen durch, bekomme ich folgende Meldung:

    Notice: Undefined index: Kunde in /home/a9926458/public_html/LoginSystem/admin/user/delete.php on line 16

    Notice: Undefined index: KundenMail in /home/a9926458/public_html/LoginSystem/admin/user/delete.php on line 17

    Was übersehe ich hier?


  • #2
    1.: keine mysql_* Funktionen, besser PDO (http://php.net/manual/de/book.pdo.php)

    Statt gefühlten 837890 echo's ist es besser, Logik von View zu trennen

    Letztendlich wäre es noch ganz hilfreich, wenn du uns sagst, wo Zeile 16 ist...
    https://github.com/Ma27
    Javascript Logic is funny:
    [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

    Kommentar


    • #3
      Zeile 16 beginnt...

      ... gleich hier:

      PHP-Code:
                  // Nachricht den Kunden senden 
                  
      $nick_d $_POST["Kunde"]; 
                  
      $empfaenger_d $_POST["KundenMail"]; 
                  
      $absendername_d "Mustermann"
                  
      $absendermail_d "absender@mailprovider.de"
                  
      // $timet_d = date("d.m.Y");  
                  
      $betreff_d "Löschung Ihres Kontos"
                  
      $text_d "Hallo $nick_d
                  Ihr Konto wurde von einem Verwalter gelöscht."
      ;  
                  
      mail($empfaenger_d$betreff_d$text_d"From: $absendername_d <$absendermail_d>"); 
      Bei den Variablen $nick_d und $empfaenger_d scheint er Probleme zu haben.

      Kommentar


      • #4
        Die Fehlermeldung ist doch eindeutig. Wo ist denn z.B. dein Formularfeld Kundenmail welches du im Post-array erwartest?
        PHP-Klassen auf github

        Kommentar


        • #5
          Wo liegt das Problem? "Kunde" ist kein gültiger Index für $_POST. Klar, weil du auch kein Feld hast das "Kunde" heißt und einen Wert enthält. Du sendet lediglich der Wert "ID":
          PHP-Code:
          echo "<form "
              
          "action=\"index.php?section=admin&page=user&action=delete\" "
              
          "method=\"post\">\n"
          echo 
          "<input type=\"hidden\" name=\"ID\" value=\"".$_POST['ID']."\">\n"
          echo 
          "<input type=\"submit\" name=\"submit\" value=\"Kunden löschen\">\n"
          echo 
          "</form>\n"
          E: Da war ich wohl etwas zu langsam.

          PS: Du weißt, dass du nicht immer echo nutzen musst?
          Statt z. B.
          PHP-Code:
                   echo "  </td>\n"
                      echo 
          " </tr>\n"
                      echo 
          " <tr>\n"
                      echo 
          "  <td>\n"
                      echo 
          "Registrierungsdatum :\n"
                      echo 
          "  </td>\n"
                      echo 
          "  <td>\n"
                      echo 
          $row['Datum']."\n"
          // usw... 
          einfacher
          PHP-Code:
          ?>
          </td>
          </tr>
          <tr>
          <td>
          Registrierungsdatum :
          </td>
          <td>
          <?php  echo $row['Datum']."\n"?>
          Du kannst also zwischen PHP und HTML hin- und herwechseln (siehe dazu z. B. http://www.php-kurs.com/php-und-html-mischen.htm ). Das erspart dir unnötige echos.

          Kommentar


          • #6
            Schaut mal weiter unten....

            ...

            echo htmlentities($row['Nickname'], ENT_QUOTES)."\n";
            echo "<input type=\"text\" name=\"Kunde\" value=\"".htmlentities($row['Nickname'], ENT_QUOTES)."\">\n";


            Wir sehen hier das Feld mit dem Namen "Kunde". Und aus diesem Textfeld will ich eben den Wert entnehmen, denn dieser Textfeld ist ja gefüllt.

            Kommentar


            • #7
              Das Feld befindet sich aber nicht der Form, oder ist das nur zerhackstückelter Code, den Du postest?


              EDIT: Entschuldige bitte, monolith
              Competence-Center -> Enjoy the Informatrix
              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

              Kommentar


              • #8
                Dein input nützt dir wenig, wenn es nicht in der form ist.

                Jetzt war Arne schneller..
                PHP-Klassen auf github

                Kommentar


                • #9
                  Schön - aber dieses input-Feld ist nicht im (richtigen) Form... Es wird nur übertragen was innerhalb des Form-Tags ist.

                  EDIT: Immer diese Zwischenposter!
                  (Danke Arne Drews - endlich sieht mal einer ein dass nicht ich zu langsam bin sondern ihr zu schnell! )

                  Ansonsten, ich glaube du machst es dir unglaublich schwer. Dein Code ist schwer wartbar, er ist unübersichtlich und ich sehe viele Redundanzen. Ganz allgemein solltest du schauen ob du deinen Code nicht übersichtlicher und kürzer machen kannst. Bezüglich der echos habe ich dir ja schon etwas geschrieben, aber es gibt in deinem Code viele Beispiele von unnötigen Wiederholungen.
                  PHP-Code:
                   mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error()); 
                  Besser wäre die Fehlerbehandlung in eine eigene Funktion auszulagern anstatt jedes mal das da oben zu kopieren:
                  PHP-Code:
                  function query($sql)
                  {
                      return 
                  mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error())
                  }

                  $sql 'SELECT dieses FROM jenes WHERE irgendwas';
                  $result query($sql); // Ist doch viel kürzer! 
                  Und natürlich kann man so etwas dann Projekt-weit oder sogar ganz generell in allen eigenen Projekten nutzen (also eine z. B. Klasse die solche Funktionen anbietet und immer in alle Projekte eingebunden wird) und spart sich damit viel Arbeit.

                  Kommentar


                  • #10
                    Mhmhmh....

                    .... und ohne die Form komme ich nicht an den Inhalt des Textfeldes?

                    Kommentar


                    • #11
                      Das ist der Sinn einer Form ( = Formular )
                      Competence-Center -> Enjoy the Informatrix
                      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                      Kommentar


                      • #12
                        Noch einige „Standardsachen“, die glaube ich noch nicht genannt wurden:

                        - Nutze durchgängig UTF-8.
                        - Beachte bei URLs in HTML-Code den Kontextwechsel nach HTML (& → &amp;).
                        - Beachte allgemein immer den Kontextwechsel nach HTML (htmlspecialchars um nahezu jede PHP-Variable, die du in HTML ausgibst).
                        - Beachte immer den Kontextwechsel nach SQL (Stichwort: SQL-Injections).

                        Mich würde zudem mal – wirklich ernsthaft – interessieren, warum „ihr“ (die ihr das tut ) noch immer die veraltete mysql-Erweiterung verwendet. Wie kommt man darauf? Wie schafft man es, die Warnhinweise überall im Handbuch zu übersehen?

                        Kommentar


                        • #13
                          Wie süß! Du denkst sie lesen das Handbuch! Ach, wie goldig!

                          Meine Theorie ist, dass einfach zu viele alte und schlechte Tutorials im Umlauf sind auf die Anfänger immer wieder stoßen.

                          Kommentar


                          • #14
                            Meine Theorie ist, dass einfach zu viele alte und schlechte Tutorials im Umlauf sind auf die Anfänger immer wieder stoßen.
                            Nicht nur das, es gibt sogar aktuelle XTC-basierte Shops ( ohne hier bewusst den Namen Gambio zu nennen ), die ebenfalls auf mysql_* basieren.
                            Irgendwo verständlich, daß Neulinge das dann nicht so ernst nehmen, leider!
                            Competence-Center -> Enjoy the Informatrix
                            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                            Kommentar


                            • #15
                              Zitat von Arne Drews Beitrag anzeigen
                              Nicht nur das, es gibt sogar aktuelle XTC-basierte Shops ( ohne hier bewusst den Namen Gambio zu nennen ), die ebenfalls auf mysql_* basieren.
                              Kann ich gut verstehen. Mit 11 Entwicklern + 3 Azubis + 1 Praktikant ist es ein kaum zu bewältigender Aufwand, überall mysql durch mysqli zu ersetzen.

                              Kommentar

                              Lädt...
                              X