Jag kan inte uppdatera databasen

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • PollyJuice
    Medlem
    • 2006-03-11
    • 126

    #1

    Jag kan inte uppdatera databasen

    Hej,

    jag försöker skapa ett script som uppdaterar antal timmar man arbetat på ett projekt. Tyvärr så funkar inte det jag har skrivit. Kan någon tala om vad jag gjort för fel?

    Javascript-koden:

    Code:
    function redigeraTimmar()
    {
    	a = xmlhttp.responseXML.documentElement.getElementsByTagName("projekt");
    	for (i=0;i<a.length;i++)
    	{
    	namnet = a[i].getElementsByTagName("namn");
    	kalle = namnet[0].firstChild.nodeValue;
    	if(kalle == info)
    		{
    	tiden = a[i].getElementsByTagName("antaltimmar");
    	hej = "<form name='form2' method='post' action='sparatimmar.php'>";
    	hej += "<label>L&auml;gg till timmar:</label><br>";
    	hej += "<input id='namn' type='text' value='" + info + "' size='30'/>";
    	hej += "<input id='timmar' type='text' value='" + tiden[0].firstChild.nodeValue + "' size='30'/>";
    	hej += "<input id='send' type='submit' value='L&auml;gg till timmar' /></form>";
        document.getElementById('rightcontainer').innerHTML=hej;
    		}
    	}
    }
    och så PHP-koden:

    PHP Code:
    <?php
    $namnet= $_POST['namn'];
    $timmarna= $_POST['timmar'];
    
    $con = mysql_connect("host","användarnamn","lösenord");
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }
    
    mysql_select_db("databasnamn", $con);
    
    mysql_query("UPDATE projekt SET 'timmar' = $timmarna WHERE 'namn' = '$namnet'");
    
    mysql_close($con);
    
    ?>
  • The_Hulk
    Medlem
    • 2003-06-25
    • 1937

    #2
    du har inget name-attribut i dina input-taggar.
    t.ex
    HTML Code:
    <input id='namn' name='namn' type='text' value='" + info + "' size='30'/>";

    Comment

    • @nders
      Moderator
      Marsvin
      • 2000-06-30
      • 26914

      #3
      Och:

      1) Du ska inte ha apostrofer runt fältnamnen i SQL-frågan.
      2) Du får inte in värdena i SQL-frågan som du har det nu. Jag hade gjort så här:
      PHP Code:
      mysql_query("UPDATE projekt SET timmar = " . $timmarna . " WHERE namn = '" . $namnet . "'"); 
      
      3) Du måste skydda dig mot SQL injection.

      mvh
      @aviddevguy

      Comment

      • PollyJuice
        Medlem
        • 2006-03-11
        • 126

        #4
        Tack, änglar! Nu funkar det!
        Last edited by PollyJuice; 2012-05-10, 13:53.

        Comment

        • @nders
          Moderator
          Marsvin
          • 2000-06-30
          • 26914

          #5
          Får du något felmeddelande?

          Skriv ut SQL-frågan så du kan se om det är något knas med värdena.
          Last edited by @nders; 2012-05-10, 14:01.
          @aviddevguy

          Comment

          • drew
            Medlem
            • 2007-03-12
            • 748

            #6
            Jag hade skrivit SQL-frågan så här.
            PHP Code:
            mysql_query("UPDATE projekt SET timmar = $timmarna WHERE namn = '$namnet'"); 
            
            Om du använder vanliga citationstecken (") runt strängen så tolkar php innehållet och du får dit innehållet i variablerna.
            Om du använder enkla citationstecken ('), apostrofer, så tolkas strängen inte utan strängen skickas som den är, med variabelnamnen istället för innehållet.
            http://tumba25.net

            Comment

            • @nders
              Moderator
              Marsvin
              • 2000-06-30
              • 26914

              #7
              Bra där, drew. Jag kan inte php egentligen - jag bara fuskar.
              @aviddevguy

              Comment

              • nitro2k01
                Forumvärd
                • 2003-08-26
                • 7630

                #8
                PHP Code:
                $timmarna = mysql_real_escape_string($timmarna);
                $namnet = mysql_real_escape_string($namnet);
                
                mysql_query("UPDATE projekt SET timmar = '$timmarna' WHERE namn = '$namnet'"); 
                
                Använd mysql_real_escape_string för att skydda dig mot SQL-injektioner, på alla fält, även sådana som du antar bara kommer innehålla nummer, såsom $timmarna i detta fall! Sätt enkel-fnuttar runt alla strängar i frågan, även sådana som du antar bara kommer innehålla nummer!

                Kontrollera utöver det att $timmarna är ett nummer, och be användaren fylla i ett annat värde annars.
                Gameboy Genius - Foto: Gatukonst och elektronikporr
                Internklippning:
                1) Snaggning av fångar.
                2) Klippning frisörer emellan.

                Comment

                • PollyJuice
                  Medlem
                  • 2006-03-11
                  • 126

                  #9
                  Kan man skriva

                  $namnet= mysql_real_escape_string($_POST['namn']);

                  ?

                  Jag har inte tänkt på säkerhetsfrågorna överhuvudtaget, men det skulle definitivt kunna knuffa upp mitt betyg.

                  Comment

                  • drew
                    Medlem
                    • 2007-03-12
                    • 748

                    #10
                    Man ska inte köra mysql_real_escape_string() på fält som ska innehålla nummer. Man ska använda intval() om det är ett heltal eller floatval() om den har decimaler.
                    Enkelfnuttar runt tal kan ge felmess från databasen eller hela frågan kan ignoreras. Sätt inte fnuttar runt tal, försäkra dig om att det verkigen är siffror istället.

                    Säkerheten är mycket viktig, frågan är inte om någon försöker hacka sig in utan när det händer.
                    http://tumba25.net

                    Comment

                    Working...