[PHP] Dynamische waarde van een form overnemen in ander form

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

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok, lange titel, maar geeft wel het probleem aan.

Ik wil de gegevens van een gebruiker laten zien op een pagina. Deze gegevens staan in een database. De gebruiker moet eerst dmv een dropdown menu een gebruiker selecteren, op selecteer klikken en dan verschijnt daaronder, in een andere formuliertje alle waarden van deze gebruiker.

formulier 1 =
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
     <form id="selecteer" name="selecteer" method="post" action="pagina.php"> 
            <p>Selecteer een gebruiker: 
            <select>
                <?php
                $query = "SELECT * FROM `gebruikers`";
                $sql = mysql_query($query);
                while($record = mysql_fetch_object($sql))
                {
                echo"<option value='".$record->id."'>".$record->identiteit."</option>";
                }
                ?>
            </select>
            <input name="selecteer" type="submit" id="selecteer" value="Selecteer gebruiker" />
            <br />
            </p>
      </form>

Dit formulier geeft dus in een dropdown-menu alle bestaande gebruikers weer, dit werkt.

formulier 2=
PHP:
1
2
3
4
5
6
<form id="wijzig" name="wijzig" method="post" action="update.php">     
              <table width="500" height="150" border="0" cellpadding="0" cellspacing="0">
          <tr>
            <td height="20%" align="left" valign="top"><input name="identiteit" type="text" id="identiteit" value="<?php $query = "SELECT * FROM `gebruikers` WHERE `identiteit` = '".$record->id."'"; $sql = mysql_query($query); while($record = mysql_fetch_object($sql)){           echo $record->id;} ?>" size="15" /></td>
        </table>
         </form>

Nu moeten hier de gegevens verschijnen van de geselecteerde gebruiker uit het eerst formulier. Deze 2 formulieren bevinden zich op 1 pagina (pagina.php)

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

AJAX. :)

Je zal met behulp van Javascript iets moeten regelen. Ofwel je doet een tussentijdse post naar de server, waarna je de form met PHP kunt vullen, ofwel je doet een request naar de server (een PHP-script) middels JS en bouwt daarna met JS je form op. Met beide oplossingen zul je met Javascript aan de gang moeten. Mijn persoonlijke voorkeur gaat uit naar de tweede optie, aangezien dat de gebruiker een zichtbare post naar de server scheelt.

'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!

  • lammert
  • Registratie: Maart 2004
  • Laatst online: 03-09 11:50
Dat kan toch veel makkelijker dan met javascript???

Je doet sowieso al een post naar de server door die gebruiker te selecteren, die variabele kan je vervolgens gewoon in je 2e formulier plakken.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<form id="selecteer" name="selecteer" method="post" action="pagina.php"> 
    <p>Selecteer een gebruiker: 
        <select name="selecteer">
            <option value="voorbeeld">voorbeeld</option>
        </select>
        <input name="selecteer2" type="submit" id="selecteer" value="Selecteer gebruiker" />
    </p>
</form>


<?php
    echo $_POST['selecteer'];
    if (isset ($_POST['selecteer'])){$selecteer=$_POST['selecteer'];}
?>

<form id="wijzig" name="wijzig" method="post" action="update.php">     
    <table width="500" height="150" border="0" cellpadding="0" cellspacing="0">
        <tr>
            <td height="20%" align="left" valign="top">
                <input name="identiteit" type="text" id="identiteit" value="<?php echo $selecteer;?> " size="15" />
            </td>
        </tr>
        </table>
</form>

[ Voor 93% gewijzigd door lammert op 27-03-2006 19:15 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb zelf geprobeerd om het eerste formulier een GET te laten posten en dan naar zichzelf laten returnen en dan het 2 formulier de waardes uit de navigatiebalk te laten halen, maar het eerste formulier geeft een rare waarde door: 'gebruiker+selecteer' ipv een value.

Iemand hier een idee over?

Trouwens, een refresh ofzo is geen probleem.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Lammert schreef op maandag 27 maart 2006 @ 00:19:
Dat kan toch veel makkelijker dan met javascript???

Je doet sowieso al een post naar de server door die gebruiker te selecteren, die variabele kan je vervolgens gewoon in je 2e formulier plakken.
Dat lijkt mij ook, maar ik kan die variable uit het eerste formulier niet zomaar overnemen, aangezien deze dynamisch is, deze wordt ook weer uit de database gehaald. In mijn code heb ik dit geprobeerd...

value uit dropdown-menu =
PHP:
1
echo"<option value='".$record->id."'>".$record->identiteit."</option>";


waarde voor het 2e formulier =
PHP:
1
<input name="identiteit" type="text" id="identiteit" value="<?php $query = "SELECT * FROM `gebruikers` WHERE `identiteit` = '".$record->identiteit."'"; $sql = mysql_query($query); while($record = mysql_fetch_object($sql)){          echo $record->identiteit;} ?>" size="15" />


Je ziet in beide forms: '$record->identiteit' staan, maar dat werkte dus niet

Acties:
  • 0 Henk 'm!

  • lammert
  • Registratie: Maart 2004
  • Laatst online: 03-09 11:50
Verwijderd schreef op maandag 27 maart 2006 @ 00:22:
Ik heb zelf geprobeerd om het eerste formulier een GET te laten posten en dan naar zichzelf laten returnen en dan het 2 formulier de waardes uit de navigatiebalk te laten halen, maar het eerste formulier geeft een rare waarde door: 'gebruiker+selecteer' ipv een value.

Iemand hier een idee over?

Trouwens, een refresh ofzo is geen probleem.
Zie nog ff mn code hierboven. Ik heb hem net zelf ff getest en het werkt. Tenminste ik denk dat het doet wat je bedoelt. Het kan nog wat brak zijn want ik het het ff snel uit mn duim gezogen.

Je kreeg niet de goede waarde terug omdat je de input waar het om ging (de waarde van de <select> tag dus), geen naam mee hebt gegeven. Jij kreeg waarschijnlijk de waarde terug van de submit knop.

[ Voor 13% gewijzigd door lammert op 27-03-2006 00:28 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Lammert schreef op maandag 27 maart 2006 @ 00:27:
[...]
Je kreeg niet de goede waarde terug omdat je de input waar het om ging (de waarde van de <select> tag dus), geen naam mee hebt gegeven. Jij kreeg waarschijnlijk de waarde terug van de submit knop.
Eh, ik krijg nu juist de waarde terug van de submitknop, namelijk 'Selecteer gebruiker'.

Is dit een tiepvout: name="selecteer2"?

[ Voor 8% gewijzigd door Verwijderd op 27-03-2006 00:33 ]


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Lijkt me kinderspel. In je form1 geef je de select een name & onchange:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     <form id="selecteer" name="selecteer" method="post" action="pagina.php"> 
              <p>Selecteer een gebruiker: 
              <select name="namen" onchange="this.form.submit();">
                <?php
                $query = "SELECT * FROM `gebruikers`";
                $sql = mysql_query($query);
                while($record = mysql_fetch_object($sql))
                {
                echo"<option value='".$record->id."'>".$record->identiteit."</option>";
                }
                ?>
               </select>
            <br />
            </p>
      </form>


Door onchange="this.form.submit()" kan je de submit button weglaten (niet dat dat moet, maar vind ik wel handiger zo).
In pagina.php doe je dan iets als:

PHP:
1
2
3
4
5
6
7
8
9
if (isset($_POST['namen']) && $_POST['namen'] != '')
{
   // user gegevens ophalen, userid haal je uit $_POST['namen']
 
   if (user gevonden)
   {
     // 2de form afdrukken
   }
}


Maar persoonlijk zou ik dit liever met AJAX doen.

[ Voor 90% gewijzigd door XWB op 27-03-2006 00:52 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

Verwijderd

Dit soort dingen deed ik eerst altijd met behulp van een volledige POST-aanroep, waarbij de gehele pagina opnieuw (en zichtbaar) werd opgevraagd en ingeladen. Met behulp van JavaScript zette ik dan eerst een hidden parameter om de code te laten weten dat het om een 'update' POST gaat. Werkt prima verder, maar sinds ik AJAX heb ontdekt zal ik het nooit meer op die manier doen :).

Super joh, dat AJAX!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ben nu bezig geweest met dat PHP voorbeeld met onchange="this.form.submit();

Maar hij vangt nu helemaal geen waarde af. Het ziet er nu zo uit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
     <form id="gebruikers" name="gebruikers" method="post" action="deze_pagina.php"> 
            <p>Selecteer een gebruiker: 
            <select name="gebruiker" id="gebruiker" onchange="this.form.submit();">
                <?php
                $query = "SELECT * FROM `gebruikers`";
                $sql = mysql_query($query);
                while($record = mysql_fetch_object($sql))
                {
                echo"<option value='".$record->id."'>".$record->identiteit."</option>";
                }
                ?>
            </select>
            <br />
            </p>
      </form>
      
    <?php
        echo $_POST['gebruiker'];
    ?>


Ik wil dus dat ie na het selecteren van een gebruiker, hij deze gebruiker onder het formulier weergeeft.

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Werkt perfect hier?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<form id="gebruikers" name="gebruikers" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
      <p>Selecteer een gebruiker: 
      <select name="gebruiker" id="gebruiker" onchange="this.form.submit();">
        <option value="1">Gebruiker 1</option>
        <option value="2">Gebruiker 2</option>
        <option value="3">Gebruiker 3</option>
       </select>
      <br />
    </p>
</form>
<?php
if (isset($_POST['gebruiker']) && $_POST['gebruiker'] != '')
{
    echo $_POST['gebruiker'];
}
?>

[ Voor 29% gewijzigd door XWB op 27-03-2006 19:11 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dit werkt idd prima, omdat de opties in het optiemenu statisch zijn. Bij mij zijn deze dynamisch, gegenereert uit de database. Dan geeft ie ineens geen waarde meer door.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
     <form id="gebruikers" name="gebruikers" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
            <p>Selecteer een gebruiker: 
            <select name="gebruiker" id="gebruiker" onchange="this.form.submit();">
                <?php
                $query = "SELECT * FROM `gebruikers`";
                $sql = mysql_query($query);
                while($record = mysql_fetch_object($sql))
                {
                echo"<option value='".$record->id."'>".$record->identiteit."</option>";
                }
                ?>
                <option value="static">static</option>
            </select>
            <br />
            </p>
      </form>


Als ik static selecteer geeft ie dat netjes weer, maar als ik de dynamische waardes selecteer geeft ie nix weer. 8)7 8)7

[ Voor 68% gewijzigd door Verwijderd op 27-03-2006 19:20 ]


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Dat is juist hetzelfde hoor, lijkt me dat jouw options verkeerd zijn? Duik even je html bron in, en kijk even wat daar juist staat.

March of the Eagles


Acties:
  • 0 Henk 'm!

  • lammert
  • Registratie: Maart 2004
  • Laatst online: 03-09 11:50
Hacku schreef op maandag 27 maart 2006 @ 19:11:
Werkt perfect hier?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<form id="gebruikers" name="gebruikers" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
      <p>Selecteer een gebruiker: 
      <select name="gebruiker" id="gebruiker" onchange="this.form.submit();">
        <option value="1">Gebruiker 1</option>
        <option value="2">Gebruiker 2</option>
        <option value="3">Gebruiker 3</option>
       </select>
      <br />
    </p>
</form>
<?php
if (isset($_POST['gebruiker']) && $_POST['gebruiker'] != '')
{
    echo $_POST['gebruiker'];
}
?>
Werkt goed, op 1 klein dingetje na: maak van "gebruiker 1" iets als "kies een gebruiker", anders kan je gebruiker 1 niet selecteren (form wordt pas gepost bij een verandering en aangezien de optie al default op gebruiker 1 staat verandert er niets als je die selecteert).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hacku schreef op maandag 27 maart 2006 @ 19:19:
Dat is juist hetzelfde hoor, lijkt me dat jouw options verkeerd zijn? Duik even je html bron in, en kijk even wat daar juist staat.
Goeie opmerking :P
Dit staat er idd als opties in mijn HTML bron:
[HTML]
<option value=''>testuser1</option>
<option value=''>testuser2</option>
[/HTML]

Daar staan geen values???? 8)7 8)7 8)7 Hoe kan dat nu weer

[ Voor 9% gewijzigd door Verwijderd op 27-03-2006 19:22 ]


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Lammert schreef op maandag 27 maart 2006 @ 19:22:
[...]


Werkt goed, op 1 klein dingetje na: maak van "gebruiker 1" iets als "kies een gebruiker", anders kan je gebruiker 1 niet selecteren (form wordt pas gepost bij een verandering en aangezien de optie al default op gebruiker 1 staat verandert er niets als je die selecteert).
Weet ik, het ging hier even om het principe ;)
Verwijderd schreef op maandag 27 maart 2006 @ 19:22:
[...]


Goeie opmerking :P
Dit staat er idd als opties in mijn HTML bron:
[HTML]
<option value=''>testuser1</option>
<option value=''>testuser2</option>
[/HTML]

Daar staan geen values???? 8)7 8)7 8)7 Hoe kan dat nu weer
Moet je even debuggen, bevat $record->id wel een waarde?

Zet bovenaan je script ook even error_reporting(E_ALL);

[ Voor 9% gewijzigd door XWB op 27-03-2006 19:27 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • lammert
  • Registratie: Maart 2004
  • Laatst online: 03-09 11:50
Probeer deze regel in te voegen ipv wat er eerst stond:

PHP:
1
echo "<option value=\"".$record->id."\">".$record->identiteit."</option>";

[ Voor 25% gewijzigd door lammert op 27-03-2006 19:31 ]


Acties:
  • 0 Henk 'm!

  • marko77
  • Registratie: Februari 2002
  • Laatst online: 06-05 19:41
In het algemeen zou ik als EERSTE altijd de bron checken. Als die correct lijkt te zijn, dan pas de scripting debuggen.

als die values leeg blijven zou ik even je database nalopen om te kijken of die id's wel een waarde hebben gekregen.

Mijn rig


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok het werkt nu. Voor de mensen die het interesseren is hier de code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
     <form id="gebruikers" name="gebruikers" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
            <p>Selecteer een gebruiker: 
            <select name="gebruiker" id="gebruiker" onchange="this.form.submit();">
                <option value="">-selecteer een gebruiker-</option>
                <?php
                $query = "SELECT * FROM `gebruikers`";
                $sql = mysql_query($query);
                while($record = mysql_fetch_object($sql))
                {
                echo"<option value='".$record->identiteit."'>".$record->identiteit."</option>";
                }
                ?>
                </select>
            <br />
            </p>
      </form>
      
            <?php
            if (isset($_POST['gebruiker']) && $_POST['gebruiker'] != '')
            {
                echo $_POST['gebruiker'];
                $gebruiker = $_POST['gebruiker'];
            }
            ?>[s][/s]

Acties:
  • 0 Henk 'm!

  • lammert
  • Registratie: Maart 2004
  • Laatst online: 03-09 11:50
Je hebt ons de hele dag bezig gehouden omdat je 1 kolomnaam verkeerd had? :+
Pagina: 1