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

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

  • [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

    Kommentar


    • #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");

      Kommentar


      • #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

        Kommentar


        • #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

          Kommentar


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

            Kommentar


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

              Kommentar


              • #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" 
                ?>

                Kommentar


                • #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?

                  Kommentar


                  • #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?
                    Zuletzt geändert von combie; 15.09.2009, 21:08.
                    Wir werden alle sterben

                    Kommentar


                    • #11
                      Hallo,

                      Zitat von timeout Beitrag anzeigen
                      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]

                      Kommentar


                      • #12
                        Zitat von combie Beitrag anzeigen
                        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!!!

                        Kommentar


                        • #13
                          Zitat von AmicaNoctis Beitrag anzeigen
                          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!

                          Kommentar


                          • #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

                            Kommentar

                            Lädt...
                            X