WOW! Thank you very, very much! This is so good! Thanks to all of you for spending time to learning me programming! Karl 2013/6/23 Maciek Sokolewicz <maciek.sokolewicz@xxxxxxxxx> > On 23-6-2013 17:11, Karl-Arne Gjersøyen wrote: > >> Hello again. I Got the solution for my last mention problem. Now I can >> update several rows at once by one single submit action. >> >> [...] > > I have tried to search in google and on PHP.net but can't fine anything >> that explain my problem. >> I like to have new $sql = SELECT queries for every given serialnumber >> ($snr) >> >> Thanks for your help. >> >> Karl >> >> > Ok, Karl, I've seen quite a few messages from you to this list with > various questions; from all these questions it becomes clear that you're > trying to work with lists in a single form without understanding the basics > of a form in the first place. You also seem to not understand what an array > is exactly, or how to process it. > > So let's answer all these questions at once; I will attempt to explain (in > short) how to do all this, using a custom form here. I don't speak > Norwegian, and I find your variable names to be horribly long and complex, > so let's not use them :) > > Say you want a simple form online which gives you a product name and asks > you to update the amount of it in stock. > <form action="..." method="post"> > <input type="text" name="number_in_stock" value="0"> > <input type="submit" name="submit" value="store"> > </form> > > When you submit this simple form, the PHP script defined in the action > property is called, and the $_POST array looks like: > $_POST = array( > 'number_in_stock' = '0' > ); > > You can then run your simple query > mysql_query("UPDATE some_table SET stock='" . $_POST['number_in_stock']); > // note: you should always sanitize these values; i.e. make sure it is > EXACTLY what you expect, and CAN NOT possibly be anything else. So if you > expect it to be a number, check if it IS a number before running this > query!!! > > Now, you said you wanted to update multiple items. > Imagine you have a form showing multiple items: > <form action="..." method="post"> > Item A: <input type="text" name="number_in_stock" value="8"> > Item B: <input type="text" name="number_in_stock" value="2"> > Item C: <input type="text" name="number_in_stock" value="258"> > <input type="submit" name="submit" value="store"> > </form> > > If you do this, PHP will have no idea what is what, and it will just keep > overwriting the number_in_stock value until it reaches the last one. So you > would end up with a $_POST array looking like this: > $_POST = array( > 'number_in_stock' = '258' > ); > > Obviously, you don't want that. The solution would be to tell PHP to turn > all recieved values into an array. This can be done by manually specifying > the key for each array item; or letting PHP do it automatically. This > automatic way was suggested earlier, like so: > <form action="..." method="post"> > Item A: <input type="text" name="number_in_stock[]" value="8"> > Item B: <input type="text" name="number_in_stock[]" value="2"> > Item C: <input type="text" name="number_in_stock[]" value="258"> > <input type="submit" name="submit" value="store"> > </form> > > This then results in a $_POST array like this: > $_POST = array( > 'number_in_stock' = array( > 0 => '8', > 1 => '2', > 2 => '258' > ) > ); > > So now, do you have any idea what is what? No. You don't. Why? because you > don't supply a link between the value and the meaning. Instead, you could > decide to supply a certain unique key per item, like so: > <form action="..." method="post"> > Item A: <input type="text" name="number_in_stock['ItemA']**" value="8"> > Item B: <input type="text" name="number_in_stock['ItemB']**" value="2"> > Item C: <input type="text" name="number_in_stock['ItemC']**" value="258"> > <input type="submit" name="submit" value="store"> > </form> > > This results in: > $_POST = array( > 'number_in_stock' = array( > 'ItemA' => '8', > 'ItemB' => '2', > 'ItemC' => '258' > ) > ); > > Wow, now you can actually use this info when updating your table in the DB! > foreach($_POST['number_in_**stock'] as $item=>$number) { > mysql_query("UPDATE table SET stock='".$number."' WHERE > itemId='".$item); > } > This will run over each element in the $_POST['number_in_stock'] array. It > will (for that single loop-run) stick the key in $item and the value in > $number. For each run, it will run the update query. Then in the next run, > a new set of values is supplied, and a new query is ran. > > If you want to expand this to give you the ability to define which items > should be updated and which should not, you could add checkboxes. When > checked, the item will be updated; otherwise it won't. Checkboxes have a > great feature where if they are checked, they have the value supplied in > their value attribute. If they are not checked, they have no value. So, you > could add something like: > <form action="..." method="post"> > <input type="checkbox" name="item_list['ItemA'] value="1"> Item A: <input > type="text" name="number_in_stock['ItemA']**" value="8"> > <input type="checkbox" name="item_list['ItemB'] value="1">Item B: <input > type="text" name="number_in_stock['ItemB']**" value="2"> > <input type="checkbox" name="item_list['ItemC'] value="1">Item C: <input > type="text" name="number_in_stock['ItemC']**" value="258"> > <input type="submit" name="submit" value="store"> > </form> > > When you submit this form, and have only the first checkbox ticked, the > $_POST array will look like this: > $_POST = array( > 'item_list' = array( > 'itemA' => '1', > 'itemB' => '', > 'itemC' => '' > ), > 'number_in_stock' = array( > 'ItemA' => '8', > 'ItemB' => '2', > 'ItemC' => '258' > ) > ); > > You now know that only itemA should be updated. For this, you could run a > foreach on item_list, check which value == 1 and then for those, run the > query: > > foreach($_POST['item_list'] as $item=>$value) { > if($value == 1) { > // apparently we want to update this item > $number = $_POST['number_in_stock'][$**item]; // $item = 'ItemA' or > 'ItemB' or whatever name was selected > mysql_query("UPDATE table SET stock='".$number."' WHERE > itemId='".$item); > } > } > > Simple as that :) > Don't start unsetting, and doing I don't know what, just KISS (Keep It > Stupidly Simple) > > - Tul >