0

How can I make update of all showed form lines (no whole table) just by one click?

by this code is made update of only one line of form.

    if(isset($_POST['update'])){

        $UpraveneQuery = "UPDATE uctovnictvo SET meno='$_POST[meno]', datum='$_POST[datum]', obchod='$_POST[obchod]', druh='$_POST[druh]', cena='$_POST[cena]', Poznamka='$_POST[poznamka]' WHERE  uct_id='$_POST[hidden]' ";   //--------------
        mysql_query($UpraveneQuery, $con);
    };

Here are data I work with

    $sql = "SELECT * FROM uctovnictvo WHERE meno IN ('" . implode('\', \'', $option_meno) . "') AND obchod IN ('" . implode('\', \'', $option_obchod) . "') AND druh IN ('" . implode('\', \'', $option_druh) . "') AND  datum BETWEEN '$date_start' AND '$date_end'  ORDER BY $order";                 
    $mojeData = mysql_query($sql,$con) or die($sql."<br/><br/> Chyba 1 je:".mysql_error());//run query a ulozit to premennej

Here you can see form where u can make only one update per line (ulozit zmenu).

    while($zaznam = mysql_fetch_array($mojeData)){
    echo "<form action=index-4.php method=post>";
    echo "<tr>";
    echo "<td>" . "<input type=text name=meno value=" . $zaznam['meno'] . ">" . "</td>";
    echo "<td>" . "<input type=date name=datum value=" . $zaznam['datum'] . ">" . "</td>";
    echo "<td>" . "<input type=text name=obchod value=" . $zaznam['obchod'] . ">" . "</td>";
    echo "<td>" . "<input type=text name=druh value=" . $zaznam['druh'] . ">" . "</td>";
    echo "<td>" . "<input step=any type=number name=cena value=" . $zaznam['cena'] . ">" . "</td>";
    echo "<td>" . "<input type=text name=poznamka value=" . $zaznam['poznamka'] . ">" . "</td>";
    echo "<td>" . "<input type=hidden name=hidden value=" . $zaznam['uct_id'] . ">" . "</td>";
    echo "<td>" . "<input type=text name=hidden value=" . $zaznam['uct_id'] . ">" . "</td>";
    echo "<td>" . "<input type=submit name=update value='ulozit zmenu'" . ">" . "</td>";
    echo "<td>" . "<input type=submit name=zmazat value=zmazat" . ">" . "</td>";
    echo "</tr>";
    echo "</form>";
    }

Thank you

Luxqs
  • 53
  • 10
  • 1
    i honestly don't understand the question... what is your use case? what are you trying to achieve? – benomatis Jul 29 '14 at 18:44
  • 1
    ...try to describe it a little more than just "many line update by one click"... – benomatis Jul 29 '14 at 18:44
  • Now in the code i can save change only in one line at time so if i make changes in multiple lines and press update only one line save changes. – Luxqs Jul 29 '14 at 19:39
  • I want make changes in multiple lines and update them at once by one click – Luxqs Jul 29 '14 at 19:40
  • `while($zaznam = mysql_fetch_array($mojeData)){` by that code I create more lines of form. By this `echo "" . "" . "";` I can save change of only one line of form. I would like to save more changed lines of form by one clink on submit button – Luxqs Jul 29 '14 at 20:03

2 Answers2

0

First of all I would advise you to use PDO prepared statements instead of mysql_queries http://php.net/manual/en/pdo.prepared-statements.php

Now to answer your initial question you have to change the name of your inputs in order to recover them as an array. This is well explained here : Multiple inputs with same name through POST in php

This is how your code should look like after changing the name of the inputs:

while($zaznam = mysql_fetch_array($mojeData))
{
    echo "<form action=index-4.php method=post>";
    echo "<tr>";
    echo "<td>" . "<input type=text name='meno[]' value='" . $zaznam['meno'] . "'>" . "</td>";
    echo "<td>" . "<input type=date name='datum[]' value='" . $zaznam['datum'] . "'>" . "</td>";
    echo "<td>" . "<input type=text name='obchod[]' value='" . $zaznam['obchod'] . "'>" . "</td>";
    echo "<td>" . "<input type=text name='druh[]' value='" . $zaznam['druh'] . "'>" . "</td>";
    echo "<td>" . "<input step=any type='number[]' name=cena value='" . $zaznam['cena'] . "'>" . "</td>";
    echo "<td>" . "<input type=text name='poznamka[]' value='" . $zaznam['poznamka'] . "'>" . "</td>";
    echo "<td>" . "<input type=hidden name='hidden[]' value='" . $zaznam['uct_id'] . "'>" . "</td>";
    echo "<td>" . "<input type=text name='hidden[]' value='" . $zaznam['uct_id'] . "'>" . "</td>";

    echo "</tr>";
}
echo "<input type=submit name="update" value='update'" . ">;
echo "</form>";

and then to recover the inputs you have to write something like that

$i=0;
while(isset($_POST['meno'][$i]))
{
    $meno = $_POST['meno'][$i];
    $datum = $_POST['datum'][$i];
    $obchod = $_POST['obchod'][$i];
    // etc....

    /*
    write your magic here in order to save the entries in the database
    */
}
Community
  • 1
  • 1
Jan Moritz
  • 2,145
  • 4
  • 23
  • 33
0

if this is how the second part should looklike then its not working:

    if(isset($_POST['update'])){
    $i=0;
    while(isset($_POST['meno'][$i]))
    {
        $meno = $_POST['meno'][$i];
        $datum = $_POST['datum'][$i];
        $druh = $_POST['druh'][$i];
        $number = $_POST['number'][$i];
        $poznamka = $_POST['poznamka'][$i];
        /*
        $UpraveneQuery = "UPDATE uctovnictvo SET meno='$_POST[meno]', datum='$_POST[datum]', obchod='$_POST[obchod]', druh='$_POST[druh]', cena='$_POST[cena]', Poznamka='$_POST[poznamka]' WHERE  uct_id='$_POST[hidden]' ";   //--------------
        mysql_query($UpraveneQuery, $con);}
        */
        $UpraveneQuery = "UPDATE uctovnictvo SET meno='$meno', datum='$datum', obchod='$obchod', druh='$druh', cena='$cena', Poznamka='$poznamka' WHERE  uct_id='$_POST[hidden]' ";   //--------------
        mysql_query($UpraveneQuery, $con);} 
    };
Luxqs
  • 53
  • 10