Meddelande

Minska
No announcement yet.

Uppdatera flera rader?

Minska
X
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • Uppdatera flera rader?

    Hej!
    Jag försöker skapa en tidrapport som ska sparas i databas.
    Php, mysql används.

    Hur löser man detta enklast? Mina försök ser ni nedan.

    Jag loopar ut datan så att det blir så här.
    [kod]
    <input type="hidden" name="postidet" value="1"><input type="text" name="1timmar">
    <input type="hidden" name="postidet" value="2"><input type="text" name="2timmar">
    <input type="hidden" name="postidet" value="3"><input type="text" name="3timmar">
    [/kod]

    Försöker att uppdatera alla rader, men lyckas inte. Provat med följande, men bara sista posten uppdateras.
    Sökte och hittade med foreach, men det blev fel.
    [kod]
    if (isset($_POST['uppd_tidrapport'])){
    //$in_timmar = $_POST["timmar"];
    //$in_idet = $_POST["postidet"];
    $result=mysqli_query($db,"UPDATE tidrapporter_dagar SET timmar='$in_timmar' WHERE ID='$in_idet'");



    foreach ( $_REQUEST['postidet'] as $id => $details ) {
    $rid = addslashes ($id);
    $in_timmar = addslashes ($details($_REQUEST['postidet']));

    $sql = "UPDATE `tidrapporter_dagar`
    SET `timmar`='$in_timmar'
    WHERE `ID`='$rid'";
    if ( !$result = mysql_query($sql) ) {
    die("Det gick inte spara!<br /><b>ID: $rid</b>");
    }
    }

    echo $_POST["timmar"];
    echo $_POST["postidet"];
    echo "--Postat!";
    }
    [/kod]

  • #2
    Döp dina input-fält till postidet[] så kommer PHP att behandla dem som en array och du kommer kunna loopa igenom dem med foreach.

    Kod:
    <input type="hidden" name="postidet[]" value="1"><input type="text" name="1timmar">
    <input type="hidden" name="postidet[]" value="2"><input type="text" name="2timmar">
    <input type="hidden" name="postidet[]" value="3"><input type="text" name="3timmar">
    "Det finns tre sorters lögn; vanlig lögn, förbannand lögn och statistik" - Mark Twain

    Kommentera


    • #3
      Lite off-topic kanske, men mysql_-funktionerna kommer inom kort att försvinna från PHP. Dessutom är de förlegade och kan innebära en säkerhetsrisk, särskilt eftersom du här inte har skyddat dig mot SQL injections.

      Du bör titta närmare på mysqli_ eller PDO. Personligen föredrar jag PDO.
      Avundas aldrig någon det sken av lycka han har för du känner inte hans hemliga sorger.

      Kommentera


      • #4
        Tack för svar. Ska prova under dagen.
        Men hur ska det se ut med mysqli då?

        Kommentera


        • #5
          mysqli_ fungerar lite annorlunda än mysql_, men är fortfarande proceduralt (men går att köra ojektorienterat om man vill) medan PDO enbart är objektorienterat (om jag inte trasslat till något i huvudet). Båda två har stöd för prepared statements vilket eliminerar risken för SQL injections.

          Kika på PHP Docs. Det finns jättebra förklaringar och exempel där.

          MySQLi
          PDO
          Avundas aldrig någon det sken av lycka han har för du känner inte hans hemliga sorger.

          Kommentera


          • #6
            Nu har jag provat med detta, men det händer ingenting. Här testar jag om det går att ändra datumet den uppdaterades senast.
            [kod]
            // Start nya

            $link = new mysqli('localhost', 'root', '', 'tider');
            if ($link->connect_error) die (
            'Connect Error (' . $link->connect_errno . ') ' . $link->connect_error
            );

            if (
            $_SERVER['REQUEST_METHOD']=="POST" &&
            isset($_POST['submit'])
            ) {
            $stmt = $link->prepare('UPDATE tidrapporter_dagar SET uppdaterad = NOW() WHERE id = ? ');
            $stmt->bindParam('i', $_POST['postidet']--);
            $stmt->execute();
            }

            // Slut nya
            [/kod]

            Kommentera


            • #7
              Blir aldrig din if-sats sann? Alltså, körs aldrig rad 12-14 i koden du visade?
              Avundas aldrig någon det sken av lycka han har för du känner inte hans hemliga sorger.

              Kommentera


              • #8
                prplxr skrev: Visa inlägg
                Blir aldrig din if-sats sann? Alltså, körs aldrig rad 12-14 i koden du visade?
                Jo, det är ju mer kod. Bara jag som slaktar dåligt.
                Har gett upp detta. Kör med att man får spara rad för rad istället.

                Kommentera


                • #9
                  Fel post
                  Last edited by harry_boy; 2015-04-18, 01:04. Anledning: Fel post

                  Kommentera


                  • #10
                    Har funnit att PDO har en fördelen att du kan namnge dina params. Så istället för att lägga dem i ordning och ange korrekt datatyp i MySQLI ("ssd", "Daniel", "Olsson","2016-03-11" så kan du i PDO sätta $params[]=name=>"Daniel" osv osv i params.

                    Sen kan skippa att köra en prepare för varje gång du skall lägga in en tidrapport. Det räcker att loopa bindParam (med nya värden för varje loop) och sen execute.
                    Med vänlig hälsning

                    Clownen

                    Kommentera

                    Working...
                    X