Avatar billede labisama Nybegynder
02. november 2011 - 14:50 Der er 19 kommentarer og
1 løsning

Insert af flere felter fra samme form

Hej med jer

Jeg tror jeg har kigget mig blind på mit problem og søger derfor hjælp her.

Jeg prøver at få udskrevet en liste over brugere som følgende i en tabel som ala:

Navn  |  Fremmødt (Drop-down liste)
Navn1  |    Ja
Navn2  |    Nej
Navn3  |  Delvist

[Gem oplysninger]

Jeg har intet problem med at udskrive ovenstående liste af navne fra mySQL databasen, men problemet ligger i at gemme/indsætte værdien under fremmødt. Brugerne har selvfølgelig hver deres unikke id fra tabellen hvor de bliver hentet fra.

Så alt i alt. Hvordan indsætter jeg dataen fra denne form? Problemet for mig lige nu er at gemme "fremmøde-valget" til den specifikke bruger.

Håber det gav mening og en kan hjælpe mig.
Avatar billede morpheus Nybegynder
02. november 2011 - 15:31 #1
INSERT INTO tabel (navn,fremmodt) VALUES('".$_POST['navn']."','".$_POST['fremmodt']."')

Ellers må du lige komme med nogen flere oplysninger om dit tabel layout
Avatar billede labisama Nybegynder
02. november 2011 - 15:49 #2
Tak for dit svar.

Tabellen som dataen skal indsættes i er:

id, bruger_id, fremmoedt

Hvordan kan jeg få gemt så brugerens svar fra formen kommer til at passe i tabellen?

Altså fx. skal der jo under navn1 stå "ja" under fremmødt. Men hvordan "kæder" jeg de to ting sammen når det er i en form?

Jeg har selv tænkt på noget foreach eller lign.?

Håber det gav mere mening.
Avatar billede morpheus Nybegynder
02. november 2011 - 15:57 #3
Du må lave et opslag i din bruger tabel, eller hente ID på brugeren ved evt. login?
Avatar billede labisama Nybegynder
02. november 2011 - 16:09 #4
Mit problem er overhoved ikke at få udskrevet brugerne. Men problemet er at gemme værdien i dropdownen hos den rette bruger.

Problemet med denne:
INSERT INTO tabel (navn,fremmodt) VALUES('".$_POST['navn']."','".$_POST['fremmodt']."')

Er jo at der er, i mit eksempel, 3 forskellige værdier af $_POST['fremmodt'], tilknyttet hver bruger. Så hvordan "linker" jeg de to sammen?
02. november 2011 - 17:38 #5
tabel Navn.  Fra den tabel trækker du navnene for at komme til den præsentation du viser.  Når der så er valgt ja/nej/delvis for hvert navn indsættes oplysningerne i en tabel jeg skal kalde Fremmøde.

Så det jeg foreslår (koden er IKKE testet - jeg har skrevet den ned hurtigt som illustration som du kan bruge til selv at finpusse en løsning) er for hvert navn at lave en form med navnet og drop downen.  Når der så for et navn er valgt værdi forfremmøde sendes formen til en side jeg skal kalde insert.php hvor værdierne bliver insat i tabellen Fremmøde.  Således:

echo "<table><th>Navn</th><th>Fremmødt</th>";
$result = mysql_query(SELECT * FROM navnetabel);
while($row = mysql_fetch_array($result))
{
  $navn = $row['navn'];
  echo "<form action='insert.php' method='POST'>";
  echo "<tr>";
  echo "<td><input type = 'text' name = 'navn' value = $navn</td>";
  echo "<td>";
  echo "<select name = 'fremmde' onclick='this.form.submit();'>";
  echo "<option value = 'Ja'>Ja</option>";
  echo "<option value = 'Nej'>Nej</option>";
  echo "<option value = 'Delvis'>Delvis</option>";
  echo "</select>";
  echo "</td>";
  echo "</tr>";
  echo "</form>";
}
echo "</table>";

insert.php

<?php
$navn = $_POST['navn'];
$fremmøde = $POST['fremmøde'];
INSERT INTO Fremmøde (navn,fremmoedt) VALUES('".$_POST['navn']."','".$_POST['fremmodt']."')
?>

Jeg håber du kan bruge det.
Avatar billede olebole Juniormester
02. november 2011 - 17:42 #6
<ole>

Det er ikke udfra det oplyste muligt at anvise en præcis løsning. Generelt kan man dog sige, at du ikke bør indsætte data på baggrund af et navn - da dette ikke nødvendigvis er unikt.

Når du udskriver navne, må du tilknytte personens ID i tabellen - og sende dette ID med tilbage til serveren, når databasen skal opdateres. Hvordan det skal gøres, afhænger helt af opbygningen af din applikation

/mvh
</bole>
02. november 2011 - 17:42 #7
Nå, den kom ikke godt afsted.  Jeg havde skrevet teksten i notepad og åbenbart ikke fået kopieret de første linier.  Jeg ville have sagt følgende:

"Det handler nok om, at du ikke skal inserte flere felter fra en form, men at du skal lave en form for hvert navn.  Hver form har to felter, det pågældende navn og så drop-downen med ja/nej/delvis.  Jeg går i det følgende ud fra at du har navnene siddende i en tabel Navn."  Og så følger teksten fra #5.
Avatar billede olebole Juniormester
02. november 2011 - 17:52 #8
Kan man ikke bare skrive:


<label>OleBole <input name="present[]" value="123" type="checkbox"></label>

<label>Christian <input name="present[]" value="234" type="checkbox"></label>


Så checker man bare de fremmødte af. På serveren løber man arrayet $_POST['present'] igennem og opdaterer de DB-poster, der svarer til de fundne ID'er
Avatar billede olebole Juniormester
02. november 2011 - 17:53 #9
- tallene 123 henholdsvis 234 er naturligvis vores ID'er i databasen  =)
Avatar billede labisama Nybegynder
02. november 2011 - 20:05 #10
olebole du er inde på noget af det rigtige, som jeg havde tænkt på.

Altså en lang liste der ned ad hvor der er en fælles "submit" knap når man er færdig.

Som jeg ser christian's forslag, så opretter den mange forms derned ad?

Men Ole jeg har nok desværre brug for hvordan jeg skal lave INSERT-sætningen, så jeg får informationerne ind i databasen.
Avatar billede labisama Nybegynder
02. november 2011 - 20:12 #11
Og problemet er også at det ikke bare skal være en checkbox... men en dropdown select.
Avatar billede olebole Juniormester
02. november 2011 - 21:55 #12
Du må lige forklare, hvorfor det er en select. Hvordan er interfacet cirka udformet?
Avatar billede labisama Nybegynder
02. november 2011 - 22:02 #13
Det kan godt være at det kan laves på en anden måde. Men som jeg ser det, så skal det være en select da jeg i fremtiden måske gerne vil kunne redigere (tilføje/fjerne) valgene på listen.

Giver det ikke meget god mening så?
Avatar billede olsensweb.dk Ekspert
02. november 2011 - 23:59 #14
her er lidt du kan lege med

<?php
    // gider ikke lave en db, men det skal selvføgelig være en db
    $users = array(
        array("id"=>"3", "navn"=>"Ronols"),
        array("id"=>"6", "navn"=>"olebol"),
        array("id"=>"1", "navn"=>"Christian_Belgien")       
    );   
?>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title></title>
    <style type="text/css">
    .hidden{
        visibility: hidden;   
        width: 0px;
    }
   
    #usertable{
        width: 100%;
        border: 0px;
    }
    </style>
    <script type="text/javascript">
    </script>
</head>
<body>
<form action='insert.php' method='POST'>
  <table id="usertable">
    <tr>
      <td class="hidden">id</td>
      <td>navn</td>
      <td>mødt</td>
    </tr>
<?php   
    $lng = count($users);   
    for($i=0;$i<$lng; $i++){
        $user[] = $users[$i]["id"];
        echo '<tr>';
            echo '<td class="hidden">'.$users[$i]["id"].'</td>';
            echo '<td>'.$users[$i]["navn"].'</td>';
            echo '<td>
                <select name="select[]">
                <option value = "0">vælg</option>
                <option value = "mødt">mødt</option>
                <option value = "afbud">afbud</option>
                <option value = "udeblevet">udeblevet</option>
                </select></td>';
            echo '</tr>';
    }
?>
  </table>
    <input type="hidden" name="user" value="<?php print_r($user);?>" />
    <input type="submit" name="navn"/>
</form>
</body>
</html>


insert.php
<?php
print_r($_REQUEST);
?>


insert.php udskriver
Array
(
    [select] => Array
        (
            [0] => mødt
            [1] => udeblevet
            [2] => afbud
        )

    [user] => Array
(
    [0] => 3
    [1] => 6
    [2] => 1
)

    [navn] => Send forespørgsel
)


som du kan se er:
personen med id = 3 mødt.
personen med id = 6 udeblevet.
personen med id = 1 meldt afbud.

om du så vil lave en sql update eller en sql insert er op til dig
Avatar billede olsensweb.dk Ekspert
03. november 2011 - 07:04 #15
jeg var vist lidt træt ved sidste indlæg
slet følgende linjer
$user[] = $users[$i]["id"];
...
<input type="hidden" name="user" value="<?php print_r($user);?>" />


denne linje
echo '<td class="hidden">'.$users[$i]["id"].'</td>';

rettes til
echo '<td class="hidden"><input type="hidden" name="user[]" value="'.$users[$i]["id"].'" /> </td>';
Avatar billede labisama Nybegynder
03. november 2011 - 08:50 #16
Hej Ronols

Tusind tak for dit svar. Nu er vi inde på det rigtige. Det er faktisk præcis det jeg mente.

Jeg er bare lidt i tvivl om hvordan min INSERT-sætning skal være?

Kan du hjælpe med det? Så vil jeg lukke spørgsmålet.
Avatar billede labisama Nybegynder
03. november 2011 - 08:57 #17
Jeg skal vel bruge noget "for"-løkke med INSERT sætning i?
Avatar billede olsensweb.dk Ekspert
03. november 2011 - 11:20 #18
Jeg skal vel bruge noget "for"-løkke med INSERT sætning i?
ja

insert.php kunne se ca sådan ud (utested)
<?php
require_once("db_conn.php");
$userid = $_POST['user'];
$select = $_POST['select'];
$lng = count($userid);
for($i=0;$i<$lng; $i++){   
    $sql = "INSERT INTO tabel (bruger_id,fremmodt) VALUES('$userid[$i]','$select[$i]')";   
    $rs = mysql_query($sql, $conn);
}
?>
Avatar billede labisama Nybegynder
03. november 2011 - 12:01 #19
Tusind tak ronols.

Det virker upåklageligt.

Kom med svar så får du points.
Avatar billede olsensweb.dk Ekspert
03. november 2011 - 14:40 #20
får du her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester