Ankündigung

Einklappen
Keine Ankündigung bisher.

Löschversuch aus Datenbank

Einklappen

Neue Werbung 2019

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

  • Löschversuch aus Datenbank

    Halli Hallo, bin neu hier

    also ich habe auch ganz brav die Forensuche benutzt bin sogar fündig geworden! Aber Ihr wisst ja wie das ist, man verbringt stunden an einem Fehler und übersieht ihn... was ich möchte ist ganz einfach:
    Es sollen via "id" datensätze aus der MYSQL datenbank gelöscht werden! Alle steht in eine Datei ich Poste den Text mal hier vllt findet von euch jemand den Fehler ich bin fertig mit den Nerven... Vielen dank im vorraus
    PHP-Code:
    <?php 
    session_start
    ();
    require_once(
    'login_config.php');
    require_once(
    'login_include.php');
    if(!isset(
    $_SESSION['user'], $_SESSION['pw']) )
    { die(
    "Du hast keinen Zugriff auf diese Datei"); }
    if(
    $_SESSION['IP'] != $_SERVER['REMOTE_ADDR'])
    { die(
    "Du hast keinen Zugriff auf diese Datei"); }
    if(!
    login_right($_SESSION['user'], $_SESSION['pw']))
    { die(
    "Du hast keinen Zugriff auf diese Datei"); }

      
    $abfrage "SELECT * FROM login_gruss ORDER BY id";
      
    $ergebnis mysql_query($abfrage);
      while(
    $row mysql_fetch_object($ergebnis))
        {
        echo 
    "<table border=0 cellpadding=0 width=100% id=table1>
    <tr>
    <td><table border=0 cellpadding=0 width=100% id=table2>
    <tr>
    <td><table border=0 cellpadding=0 width=100% id=table3>
    <tr>
    <td><font face=Verdana size=2>Zeit</font></td><td><font face=Verdana size=2>
    $row->datum</font></td>
    <td><a href=gruss_admin.php?id=
    $row->id>loeschen</a></td>
    </tr>
    </table>
    </td>
    </tr>
    <tr>
    <td><table border=0 cellpadding=0 width=100% bordercolor=#C0C0C0 bordercolorlight=#C0C0C0 bordercolordark=#660066 id=table4><tr><tr>
    </tr>
    <td width=127><font face=Verdana><b>
    $row->nickname</b>($row->galter)</font></td>
    <td><font face=Verdana><b>
    $row->gruss</b></font></td></tr></table></td></tr></table></td></tr></table><hr>";
        }
    $id $HTTP_GET_VARS["id"];
    $loeschen "DELETE FROM login_gruss WHERE id = '$id'";
    $loesch mysql_query($loeschen);
      
    ?>

  • #2
    echo $id mal gemacht?

    sicher ist das aber nicht | mysql angriffe

    Kommentar


    • #3
      PHP-Code:
      // mysql_connect/mysql_select_db steht vermutlich
      // in einer der beiden eingebundenen Dateien
      $mysql mysql_connect('...''...''...') or die(mysql_error());
      mysql_select_db('...'$mysql) or die(mysql_error());

      $abfrage "SELECT * FROM login_gruss ORDER BY id";
      echo 
      '<pre>Debug: 'htmlspecialchars($abfrage), '</pre>';
      ...

      // $HTTP_GET_VARS ist veraltet und wird nur mit register_long_arrays=On noch von PHP gesetzt
      if ( isset($_GET['id'] ) ) {
        
      // keine Parameter ohne entsprechende Behandlung in die Abfrage einfließen lassen
        
      $id mysql_real_escape_string($_GET['id']);
        
      $loeschen "DELETE FROM login_gruss WHERE id = '$id'";
        echo 
      '<pre>Debug: 'htmlspecialchars($loeschen), '</pre>';
        
      mysql_query($loeschen) or die(mysql_error());

      Kommentar


      • #4
        wozu das htmlspecialchars bei den abfragen? wenn man keinen Schadcode in die Datenbank lässt

        ich mein was ist üblicher beim Abfragen die sicherungen vornehmen oder beim einfügen in die db
        beides mal halte ich es ein bischen für übertrieben oder?

        mfg

        Kommentar


        • #5
          Zitat von Dominik Beitrag anzeigen
          wozu das htmlspecialchars bei den abfragen? wenn man keinen Schadcode in die Datenbank lässt

          ich mein was ist üblicher beim Abfragen die sicherungen vornehmen oder beim einfügen in die db
          beides mal halte ich es ein bischen für übertrieben oder?

          mfg
          willst du grün und blau geschlagen werden, oder was soll das?

          @dominic: ein mysql_real_escape_string auf int? warum? lieber richtig validieren.
          [B]PHP4?!?[/B]>>>[B]Aktuelle[/B] PHP Version: [B]5.2.11 || 5.3.0
          [URL="http://en.opensuse.org/Factory/News"]Suse 11.2 *vorfreude*[/URL]
          [/B]

          Kommentar


          • #6
            Danke David, deine Antwort hat weitergeholfen, das löschen funktioniert nun, leider muss ich aber 2 mal draufklicken ?!? Komisch also einmal klicken würde mir genügen, ist das machbar?

            Kommentar


            • #7
              hö nein ich wollte eigentlich fragen ob ihr den den Schadcode in die DB schreibt und nur beim Abfragen sichert

              oder ob ich die eingaben sicher macht so das kein schadcode in die db kommt und dafür beim abfragen nicht mehr sichert

              Kommentar


              • #8
                @skietz bei einmal klicken löscht es schon

                mach mal eine header location hin

                mfg

                Kommentar


                • #9
                  es ist schon spät sitze schon seid heute morgen 9 uhr davor :P... Wie bekomm ich das denn hin, das ich auf löschen klicke und der datensatz sofort weh ist? Geht doch bestimmt irgendwie... Ich bedanke mich für eure rasche hilfe, schade nur das ich wohl nie genug weiss um euch mal Helfen zu könne

                  Kommentar


                  • #10
                    Zitat von Dominik Beitrag anzeigen
                    wozu das htmlspecialchars bei den abfragen? wenn man keinen Schadcode in die Datenbank lässt

                    ich mein was ist üblicher beim Abfragen die sicherungen vornehmen oder beim einfügen in die db
                    beides mal halte ich es ein bischen für übertrieben oder?

                    mfg
                    Beim Schreiben in die Datenbank sichert man die Parameter gegen Code ab, die der SQL Abfrage "schaden" kann.
                    Bei der Ausgabe als HTML sichert man die Parameter gegen Code ab, der dem HTML "schaden" kann.
                    Das ist nicht deckungsgleich.
                    Zum Beispiel stört die SQL Abfrage ein < innerhalb einer Zeichenkette nicht. Die HTML Ausgabe allerdings schon.
                    Andersherum ist in HTML ein ' an den meisten Stellen völlig harmlos, in einer SQL Abfrage muss es maskiert werden.
                    PHP-Code:
                    $raw "xyz ' <> 123";

                    $x mysql_real_escape_string($raw$mysql);
                    // $x == xyz \' <> 123

                    $x htmlspecialchars($raw);
                    // $x == xyz ' &lt;&gt; 123 

                    Natürlich kannst Du die Eingabeparameter auch schon vor dem Eintragen in die Datenbank für die HTML Ausgabe sicher machen
                    PHP-Code:
                    $x mysql_real_escape_stringhtmlentities($raw), $mysql ); 
                    Aber dann hast Du "html-only" Code in der Datenbank. Wenn das htmlspecialchars/htmlentities ein (unglaubliches) Performance-Problem bei Dir darstellt, kannst Du das gerne tun. Ansonsten bringt das keine Vorteile.

                    Kommentar


                    • #11
                      @David

                      das ich die ' maskieren muss da man sonst ja nen angriff starten kann ist mir klar

                      die <> soll man wohl dann maskieren wegen zb xss?

                      @
                      skietz

                      ich sagte doch bereits

                      nach dem
                      mysql_query($loeschen) or die(mysql_error());
                      }

                      machst du mal:
                      mysql_query($loeschen) or die(mysql_error());
                      header("Location: diedatei.php");
                      }

                      Kommentar


                      • #12
                        Zitat von Dominik Beitrag anzeigen
                        die <> soll man wohl dann maskieren wegen zb xss?
                        Ja, oder weil es einfach Dein HTML kaputt macht.
                        Es kann natürlich auch sein, dass Du HTML oder sonst irgendein Markup in der Datenbank speichern und auch als solches ausgeben willst, durchaus möglich. Aber in der Regel musst Du in irgendeiner Form dafür sorgen, dass Benutzer nicht beliebiges HTML/Javascript/sonstwas in Deine Seite einbringen können.

                        Kommentar


                        • #13
                          Du kannst das Lösch-Statement auch einfach ausführen lassen, bevor die (verbliebenen) Datensätze abgefragt und angezeigt werden
                          PHP-Code:
                          if($_SESSION['IP'] != $_SERVER['REMOTE_ADDR'])
                          { die(
                          "Du hast keinen Zugriff auf diese Datei"); }

                          // Jedes Mal neu gegen die Session-Werte vergleichen?
                          // Gibt es dafür einen guten Grund?
                          if(!login_right($_SESSION['user'], $_SESSION['pw']))
                          { die(
                          "Du hast keinen Zugriff auf diese Datei"); }


                          // Erst löschen...
                          if ( isset($_GET['id']) ) {
                            
                          $id mysql_real_escape_string($_GET['id']);
                            
                          $loeschen "DELETE FROM login_gruss WHERE id = '$id'";
                            echo 
                          '<pre>Debug: 'htmlspecialchars($loeschen), '</pre>';
                            
                          mysql_query($loeschen) or die(mysql_error());
                            echo 
                          '<p>Anzahl gelöschter Datensätze:'mysql_affected_rows(), "</p>\n";
                          }  

                          // ...dann anzeigen
                          $abfrage "SELECT * FROM login_gruss ORDER BY id";
                          $ergebnis mysql_query($abfrage) or die(mysql_error());
                          while(
                          $row mysql_fetch_object($ergebnis)) ... 
                          Wenn Du die Löschaktion über _GET anstoßen lässt, reicht es übrigens, wenn man Dir (oder dem eingeloggten Benutzer) eine HTMl Seite mit einem "hinterhältigen" <img> unterjubelt.
                          Code:
                          <img src="http://xyz/dein/script.php?id=5" />
                          und weg ist der Eintrag.

                          Kommentar


                          • #14
                            So geschafft, nach dem ausschlafen war mein Verstand wieder zurückgekommen Ich bendanke mich vielmals für eure Hilfe... Jetzt kommt für mich wieder ein langer Tag, denn nach dem Grußsystem werd ich mich jetzt ran machen und einen Sendeplan proggen... Man lernt ja nie aus. Die ganze Zeit hab ich mich gegen MYSQL gewehrt ;P...

                            LG Stefan

                            Edit
                            Brauche nochmals eure Hilfe... Das Formular, das in die Datenbank schreibt funktioniert zu gut!!! es schreibt direckt beim Öffnen´schon einen Datensatz in die Datenbank... Wieso dass denn?

                            PHP-Code:
                            <?php 
                            session_start
                            ();
                            require_once(
                            'login_config.php');
                            require_once(
                            'login_include.php');
                            ?>
                            <style type="text/css">
                            <!--
                            .Stil1 {
                                font-family: Verdana, Arial, Helvetica, sans-serif;
                                font-size: 11px;
                            }
                            body,td,th {
                                font-family: Verdana, Arial, Helvetica, sans-serif;
                                font-size: 11px;
                            }
                            body {
                                background-image: url(../img/index_r44_c11.jpg);
                                background-repeat: repeat;
                                margin-left: 5px;
                                margin-right: 0px;
                                margin-top: 5px;
                                margin-bottom: 0px;
                            }
                            -->
                            </style>


                            <form method="post" action="gruss.php">

                              <span class="Stil1">Nickname:<br /> 
                              <input name="nickname" type="text" size="22">
                              <br />
                              <br>
                              Dein Gruss:<br />
                              <textarea name="gruss" cols="22" rows="10"></textarea>
                              </span><br>

                            <input type="submit" name="Button" value="Abschicken">

                            </form>

                            <?php
                              $nickname 
                            $_POST["nickname"];
                              
                            $gruss $_POST["gruss"];


                            $eintrag "INSERT INTO login_gruss (nickname, gruss) VALUES ('$nickname', '$gruss')";


                            $eintragen mysql_query($eintrag);
                            ?>

                            Kommentar


                            • #15
                              weil du eine if bruachst


                              <?php
                              $nickname
                              = $_POST["nickname"];
                              $gruss = $_POST["gruss"];
                              if($nickname!="" && $gruss !="")
                              {

                              $eintrag = "INSERT INTO login_gruss (nickname, gruss) VALUES ('$nickname', '$gruss')";


                              $eintragen = mysql_query($eintrag);
                              }
                              ?>


                              aber achtung $nickname und $grus mit mysql real string sichern

                              Kommentar

                              Lädt...
                              X