[gelöst] Änderung in der Datenbank wird nicht ausgeführt!

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [gelöst] Änderung in der Datenbank wird nicht ausgeführt!

    Hallo zusammen,

    ich möchte gerne über ein Formular eine Änderung in einer Datenbank vornehmen,
    so das man auf das Script von mehreren Rechnern zugreifen
    kann. Da wir ein sehr großes Gebäude haben und ich nicht immer den halben
    Tag unterwegs sein möchte um nachzufragen ob gewisse Aufgaben erledigt
    worden sind, möchte ich gerne das die Leute über das Script, sobald eine
    Aufgabe abgeschlossen ist, dieses als erledigt Kennzeichen.

    Soweit habe ich ein Script auch fertig doch leider wird beim Eintrag der Status in der Datenbank nicht verändert.

    Vielleicht kann mir jemand kurz weiterhelfen und sagen wo ich einen Fehler eingebaut habe.
    Die Verbindung zur Datenbank steht, bekomme auch keine Fehlermeldung,
    auch die Datensätze in der Datenbank vorhanden!

    HTML Code:
    <?php
    $verbindung = mysql_connect("$MySQL_Host","$MySQL_User","$MySQL_Passw");
    if($verbindung)
    {
    	$ergebnis = mysql_select_db($db, $verbindung);
    	if($ergebnis)
    	{
    		$sql = "SELECT  aufgabe, erledigt FROM aufgaben";
    		$ergebnis = mysql_query($sql, $verbindung);
    		{
    		echo "
            <table width='500'>
            <tr>
            <td>
            <form action=' '.$PHP_SELF.'?pw='.$pw.' 'method='post'>
              <br>Aufgaben abgleichen:<br>
    		  <input type='text' name='aufgabe' size='70' value='Bitte Auftrags-Nr. eingeben!'>
              <input type='text' name='erledigt' size='7' value='ja'>
              <input type='submit' name='aendern' value='Status Ändern'>
            </form>
            </td>
            </tr>
            </table>
            ";
    		}
    		if($ergebnis) {mysql_query("UPDATE aufgaben SET aufgabe='$aufgabe', erledigt='$erledigt' where aufgabe=$aufgabe");
    		}
    		else echo "Abfrage $sql konnte nicht " .
    		"ausge&uuml;hrt werden.<br>\n";
    	}
    	else echo "Die Datenbank " .
    	"wurde nicht gefunden.<br>\n";
    	mysql_close();
     }
    else echo "Die Verbindung zur Datenbank " . 
    	"konnte nicht hergestellt werden.<br>\n" 
    ?> 
    Wäre euch sehr dankbar.

    Danke!

  • #2
    Versuchs mal mit error_reporting() und mysql_error(). diese sollten dir was melden.
    Auch basiert dein Code auf der veralteten register_globals=on Einstellung. Andere das bitte.

    PS:
    PHP_SELF kann XSS Attacken ermöglichen. Lass es doch einfach ganz weg, also das action Attribut leer lassen.
    Wir werden alle sterben

    Comment


    • #3
      Wenn ich Dich richtig verstanden habe, soll es jetzt so aussehen, wenn ich auf die selbe Datei zugreifen möchte!

      HTML Code:
      <form action='' 'method='get'>
      Dann habe ich nachgearbeitet:
      HTML Code:
      echo "Fehler: ".mysql_error();
      Bekomme keine Fehleranzeige!

      Dannach habe ich den Befehl eingarbeitet
      HTML Code:
      ini_set('error_reporting', E_ALL);
      Dort bekomme ich dann folgende Aussage!
      [COLOR="Red"]Notice: Undefined variable: aufgabe[/COLOR]
      und das Betrifft folgende Zeile:
      HTML Code:
      if($ergebnis) {mysql_query("UPDATE aufgaben SET aufgabe='$aufgabe', erledigt='$erledigt' where aufgabe=$aufgabe");

      Comment


      • #4
        HTML Code:
        <form action='' method='get'>
        Ein Anführungszeichen war da zu viel.

        ----------
        PHP Code:
        echo "Fehler: ".mysql_error(); 
        Naja...
        Doch ehr so:
        PHP Code:
        $ergebnis mysql_query($sql$verbindung) or die(mysql_error()); 
        ----------------
        PHP Code:
        ini_set('error_reporting'E_ALL); 
        Auch naja... schon nicht schlecht, aber naja..
        (ich mache es anders)
        Am Anfang der Datei steht bei mir sowas:
        PHP Code:
        <?php
        error_reporting
        (-1);
        ini_set('display_errors'TRUE); 
        ?>
        ------------
        Notice: Undefined variable: aufgabe
        Wo soll denn $aufgabe herkommen...?
        Wir werden alle sterben

        Comment


        • #5
          Hallo,

          ja danke man sieht irgendwann den Wald vor Bäume nicht mehr.

          Habe jetzt die folgenden Teil nachgepflegt!
          HTML Code:
          $aufgabe = $_GET["aufgabe"];
          $erledigt = $_GET["erledigt"];
          ... und es funzt!!!


          Darauf trinke ich jetzt einen

          Comment


          • #6
            Wenn du jetzt noch was gegen SQL Injections unternimmst, dann beglückwünsche ich dich auch.
            Wir werden alle sterben

            Comment


            • #7
              ich kann die update nachvollziehen, aber wofür hat man hier ein select und zwar über die ganze Tabelle?
              Slava
              bituniverse.com

              Comment


              • #8
                PHP Code:
                <?php
                $verbindung 
                mysql_connect("$MySQL_Host","$MySQL_User","$MySQL_Passw");
                if(
                $verbindung)
                {
                    
                $ergebnis mysql_select_db($db$verbindung);
                    if(
                $ergebnis)
                    {
                       
                // das würde mich auch Interessieren ? 
                 
                $sql "SELECT  aufgabe, erledigt FROM aufgaben";
                        
                $ergebnis mysql_query($sql$verbindung);
                        {
                        echo 
                "
                        <table width='500'>
                        <tr>
                        <td>
                        <form action=' '.
                $PHP_SELF.'?pw='.$pw.' 'method='post'>
                          <br>Aufgaben abgleichen:<br>
                          <input type='text' name='aufgabe' size='70' value='Bitte Auftrags-Nr. eingeben!'>
                          <input type='text' name='erledigt' size='7' value='ja'>
                          <input type='submit' name='aendern' value='Status Ändern'>
                        </form>
                        </td>
                        </tr>
                        </table>
                        "
                ;
                        }
                // was ist mit dem Hier ?
                       
                if($ergebnis)  {mysql_query("UPDATE aufgaben SET aufgabe='$aufgabe', erledigt='$erledigt' where aufgabe=$aufgabe");
                        }
                        else echo 
                "Abfrage $sql konnte nicht " .
                        
                "ausge&uuml;hrt werden.<br>\n";
                    }
                    else echo 
                "Die Datenbank " .
                    
                "wurde nicht gefunden.<br>\n";
                    
                mysql_close();
                 }
                else echo 
                "Die Verbindung zur Datenbank " 
                    
                "konnte nicht hergestellt werden.<br>\n" 
                ?>

                Comment


                • #9
                  nochmals überarbeitet!

                  PHP Code:
                  <?php
                  error_reporting
                  (-1);
                  ini_set('display_errors'TRUE); 
                  ?> 
                  <?php
                  $verbindung 
                  mysql_connect("$MySQL_Host","$MySQL_User","$MySQL_Passw");
                  if(
                  $verbindung)
                  {
                      
                  $ergebnis mysql_select_db($db$verbindung);
                          {
                          echo
                  "
                          <table width='500'>
                          <tr>
                          <td>
                          <form action='' method='get'>
                            <br>Aufgaben:<br>
                            <input type='text' name='aufgabe' size='70' value='Bitte Auftrags-Nr. eingeben!'>
                            <input type='text' name='erledigt' size='1' value='nein'>
                      
                            <input type='submit' name='aendern' value='Status Ändern'>
                          </form>
                          </td>
                          </tr>
                          </table>
                          "
                  ;
                          }
                  // Hier habe ich jedoch noch ein Problem: Fehlermeldung = Undefined index: aufgabe
                  // Sobald ich eine Eingabe mache verschwindet die Fehlermeldung!
                          
                  $aufgabe $_GET["aufgabe"];
                          
                  $erledigt $_GET["erledigt"];
                          if(
                  $ergebnis) {mysql_query ("UPDATE aufgaben SET aufgabe='$aufgabe', erledigt='$erledigt' where aufgabe=$aufgabe");
                          }
                          
                      else echo 
                  "Die Datenbank " .
                      
                  "wurde nicht gefunden.<br>\n";
                      
                  mysql_close();
                   }
                  else echo 
                  "Die Verbindung zur Datenbank " 
                      
                  "konnte nicht hergestellt werden.<br>\n" 
                  ?>
                  Die SQL Injections werde ich über ein abgesichertes Verzeichnis schützen,
                  So das nur die Mitarbeiter den Zugang wissen. Müsste doch ausreichen oder?

                  Comment


                  • #10
                    Müsste doch ausreichen oder?
                    Nein.
                    Die 5 Minuten Arbeit werden doch wohl noch dran sitzen!

                    Und wieso sehe ich da immer noch kein mysql_error() ?
                    Wo prüfst du denn, ob das Formular überhaupt abgesendet wurde?
                    Last edited by combie; 15-09-2009, 20:08.
                    Wir werden alle sterben

                    Comment


                    • #11
                      Hallo,

                      Originally posted by timeout View Post
                      Die SQL Injections werde ich über ein abgesichertes Verzeichnis schützen,
                      So das nur die Mitarbeiter den Zugang wissen. Müsste doch ausreichen oder?
                      ich glaube, du hast noch nicht verstanden, was SQL Injections sind.

                      Beispiel Benutzeranmeldung:

                      PHP Code:
                      $user $_GET["user"];
                      $pass $_GET["pass"];
                      $query "select * from user where username='$user' and password='$pass'"
                      Wenn jetzt aber jemand als Benutzername und als Passwort ' or '1'='1 eingibt, entsteht folgende Abfrage:
                      Code:
                      select * from user where username='' or '1'='1' and password='' or '1'='1'
                      Das Ergebnis enthält alle Benutzer und daher ist der Angreifer ohne Zugangsdaten eingeloggt.

                      Das sind also SQL Injections, mit Verzeichnissen hat das gar nichts zu tun.

                      Gruß,

                      Amica
                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Comment


                      • #12
                        Originally posted by combie View Post
                        Nein.
                        Die 5 Minuten Arbeit werden doch wohl noch dran sitzen!
                        Aus den 5 Minuten werden dann wieder Stunden. Bin jetzt schon ein Stunde lang im Web am lesen und komme nicht so recht weiter, wie es funktionieren soll.

                        Aber ich werde nicht aufgeben!!!

                        Comment


                        • #13
                          Originally posted by AmicaNoctis View Post
                          Hallo,



                          ich glaube, du hast noch nicht verstanden, was SQL Injections sind.

                          Beispiel Benutzeranmeldung:

                          PHP Code:
                          $user $_GET["user"];
                          $pass $_GET["pass"];
                          $query "select * from user where username='$user' and password='$pass'"
                          Wenn jetzt aber jemand als Benutzername und als Passwort ' or '1'='1 eingibt, entsteht folgende Abfrage:
                          Code:
                          select * from user where username='' or '1'='1' and password='' or '1'='1'
                          Das Ergebnis enthält alle Benutzer und daher ist der Angreifer ohne Zugangsdaten eingeloggt.

                          Das sind also SQL Injections, mit Verzeichnissen hat das gar nichts zu tun.

                          Gruß,

                          Amica
                          Das habe ich schon verstanden, doch wenn das Verzeichnis geschützt ist,
                          in dem die Datei liegt, kann doch keiner auf die Datei zugreifen.

                          Man merkt ich winde mich, nein ich werde versuchen eine Lösung zu finden.
                          Es gibt ja vielleicht irgendwann mal Bereich die nicht geschützt sind.

                          Also ran an die Arbeit!

                          Comment


                          • #14
                            Du verwendest die Formulardaten ungeprüft.
                            Das kann klappen, aber ein ' kann schon zu kaputten Statements führen.
                            Von den möglichen Angriffen ganz zu schweigen.

                            Tipp: mysql_real_escape_string()
                            Und achte auf die magic_quotes
                            Wir werden alle sterben

                            Comment

                            Working...
                            X