[PHP] Verwerken multiple inputs formulier

Pagina: 1
Acties:
  • 128 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hi Mensen,

ik ben al een poosje aan het zoeken naar het volgende.
Ik wil een aantal rijen uit mijn tabel editen.
Dat geef ik op de volgende manier weer


HTML:
1
2
<input name="id[]" type="checkbox" value="1" class="form" checked>1 <input name="type[]" type="text" value="type 1" size="30" /><br />
<input name="id[]" type="checkbox" value="2" class="form" checked>2 <input name="type[]" type="text" value="type 2" size="30" />


Dat verwerk ik vervolgens via php:
PHP:
1
2
3
4
5
6
7
8
    $input = array();

    foreach( $_POST['id'] as $key => $value){
        $input[$key][id] = $value;
    }
    foreach( $_POST['type'] as $key => $value){
        $input[$key][type] = $value;
    }


Zodoende heb ik alle waarden in een array zitten die ik vervolgens met de volgende php-code kan aanroepen:
PHP:
1
2
3
    foreach( $input as $key => $value){
"UPDATE tabel SET id='$value[type]' WHERE id='$value[id]'";
                }


Hierover heb ik twee vragen:
Bovenstaande manier lijkt me niet efficient maar eerlijk gezegd krijg ik het niet gevonden hoe het wel efficienter moet. Hebben jullie enig idee?

Stel dat ik de eerste rij 'uitvink' maar ik wil wel de tweede rij updaten, hoe zorg ik er dan voor dat de input van rij 1 geskipped wordt? Want nu krijg ik voor ID: 2 de waarden van Type: 1

Ik hoop dat iemand me verder kan helpen.

Thanks

[ Voor 5% gewijzigd door Verwijderd op 28-04-2007 02:50 ]


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Je kan gewoon je row id meegeven in je html input name. PHP ziet dat automagisch als array key value :)

HTML:
1
<input name="id[1]" type="checkbox" value="1" class="form" checked>1 <input name="type[]" type="text" value="type 1" size="30" /><br />

PHP:
1
2
3
4
<?php
    foreach( $_POST['id'] as $key => $value){
"UPDATE tabel SET id='{$value}' WHERE id='{$key}'";
                 }


Lees ook even een stukje over SQL injections trouwens ;)

[ Voor 13% gewijzigd door SchizoDuckie op 28-04-2007 03:02 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thanks SchizoDuckie voor je snelle reactie maar volgens mij sluit het niet helemaal aan bij mijn wens.

Stel ik heb 2 rijen:

Id | Type | Kleur
5 | Fiets | rood
8 | Auto | geel

dan krijg ik op mijn manier:

$array[0][iD]= 5 $array[0][Type]= Fiets $array[0][Kleur]= rood
$array[1][iD]= 8 $array[1][Type]= Auto $array[1][Kleur]= geel

Dat krijg ik niet op jouw manier toch?

Maar als ik rij 1 uitvink dan krijg ik op mijn manier
$array[0][iD]= 8 $array[0][Type]= Fiets $array[0][Kleur]= rood
$array[1][iD]= bestaat niet $array[1][Type]= Auto $array[1][Kleur]= geel

Terwijl ik dan dit wil:
$array[0][iD]= 8 $array[0][Type]= Auto $array[0][Kleur]= geel

Oftewel, dan wil ik eigenlijk dat de gehele rij niet wordt opgenomen.
't komt neer op het editen van een aantal rijen uit een tabel waarbij ik wil kunnen aan/uitvinken welke rijen geupdate moeten worden.

Dat krijg ik dus niet voor elkaar..

Injecten heb ik hier ff achterwege gelaten maar toch bedankt. :-)

[ Voor 24% gewijzigd door Verwijderd op 28-04-2007 03:40 ]


Acties:
  • 0 Henk 'm!

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 19-09 16:51

LauPro

Prof Mierenneuke®

Sowieso zal je per rij een query moeten doen dus je eerste aanpak is voor dit doel niet verkeerd. Gezien de eenvoud van je applicatie lijkt het me overkill om het verder te optimaliseren. Als dat wel een doel is, begin eens met een goed datamodel waar bijvoorbeeld de id's automatisch gegenereerd worden.

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik besef dat het qua applicatie niet al te briljant hoeft te zijn, maar heb toch de intentie om alles zo efficient mogelijk te programmeren... (binnen mijn eigen grenzen natuurlijk want ik heb geen it-achtergrond) 8)7

Dus tips zijn altijd welkom
Ik brei er een einde aan vandaag, morgen is er weer een dag! eeh.. over een paar uurtjes dus :-)

[ Voor 16% gewijzigd door Verwijderd op 28-04-2007 03:40 ]


Acties:
  • 0 Henk 'm!

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 19-09 16:51

LauPro

Prof Mierenneuke®

Dit soort theoretische optimalisaties zijn leuk maar je hebt er in de praktijk geen hol aan. Sowieso omdat er nooit veel input van zo'n pagina af komt (welke malloot gaat er in een stateless applicatie 100+ velden invullen?) plus dat de performance niet in de PHP code zit maar in je databasemodel/filesystem.

Meer kan ik er eigenlijk niet van maken, zoals gezegd zul je per rij altijd 1 query moeten hebben en hoe je die nu van een formulier af trekt maakt niet zoveel uit. Zolang je maar bij dit soort constructies uit de buurt blijft :P .

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

offtopic:
Jij moet nodig eens gaan programmeren met error_reporting op E_ALL. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Apparently incorrect?

Zoals ik al zei, ik heb onvoldoende achtergrond en dus zal mijn code ook wel niet de schoonheidsprijs verdienen. Het werkt, maar niet optimaal, dat besef ik ook wel!

Wat is dan een beter alternatief?

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Zoek je dit?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
error_reporting ( E_ALL );

if ( ! empty ( $_POST['send'] ) )
{
    $checkboxes = ( ! empty ( $_POST['id'] ) ) ? $_POST['id'] : array ();
    $types = ( ! empty ( $_POST['type'] ) ) ? $_POST['type'] : array ();
    
    foreach ( $types as $key => $type )
    {
        if ( isset ( $checkboxes[$key] ) )
            mysql_query ( "UPDATE tabel SET id='$type' WHERE id='$key'" );
    }
}

<form action="" method="post">
    <input name="id[1]" type="checkbox" value="1" checked="checked">1 <input name="type[1]" type="text" value="type 1" size="30" />
    <br />
    <input name="id[2]" type="checkbox" value="2" checked="checked">2 <input name="type[2]" type="text" value="type 2" size="30" />
    <input type="submit" name="send" />
</form>

March of the Eagles


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thanks Hacku,

jouw code gaf me een goede richting.
Ik draai m alleen andersom aangezien ik nog meer waarden wil posten:

PHP:
1
2
3
4
5
6
    foreach ( $checkboxes as $key => $id )
    {
        if ( isset ( $types[$key] )  && isset ( $anderetypes[$key] ) ) {
            echo "UPDATE tabel SET types='$types[$key]' , andertypes = '$anderetypes[$key]' WHERE id='$id'<br />";
        }
    }
Pagina: 1