Avatar billede sorensen_123 Nybegynder
18. juni 2006 - 13:17 Der er 18 kommentarer og
1 løsning

Gemme/læse indhold fra select box

Hejsa, hvordan kan man gemme indhold fra en select box i en mysql database?

Det jeg gerne vil have er, at man markere nogle felter i en select, og de markerede felter bliver så gemt i mysql databasen.

F.eks.:

<select size="6 name="genre" style="font-family: Verdana; font-size: 11; width: 160; background-color:#F1F1F1;" multiple>
<option value="rock" >Rock</option>
<option value="pop" >Pop</option>
<option value="dancetrance" >Dance & Trance</option>
<option value="housedownbeat" >House & Downbeat</option>
<option value="elektronisk" >Elektronisk</option>
<option value="hiphop" >Hip Hop</option>
<option value="rbsoul" >R&B & Soul</option>
<option value="metal" >Metal</option>
<option value="blues" >Blues</option>
<option value="jazz" >Jazz</option>
<option value="verdensmusik" >Verdensmusik</option>
<option value="komedie" >Komedie</option>
<option value="country" >Country</option>
<option value="folkemusik" >Folkemusik</option>
<option value="klassisk" >Klassisk</option>
</select></td><br>

Så hvis man har markeret Klassisk, Dance + Trance og Metal, så går den ind i mysql databasen, og skriver det her til en tabel:

klassisk;dancetrance;metal

Hvordan gør jeg det???

Nu kommer der nok noget der er sværere...

Nu går vi så ind i databasen og ser hvikle felter man markerede, altså "klassisk;dancetrance;metal", nu skal den så markere de felter, altså Klassisk, Dance + Trance og Metal.

Det var en svær en eller hvad?

Mvh. Elias Sørensen
Avatar billede iss Novice
18. juni 2006 - 13:28 #1
Har lavet lidt om i din kode, så du måske selv kan se hvad der sker...
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<select size="6" name="genre[]" style="font-family: Verdana; font-size: 11; width: 160; background-color:#F1F1F1;" multiple>
<option value="rock" >Rock</option>
<option value="pop" >Pop</option>
<option value="dancetrance" >Dance & Trance</option>
<option value="housedownbeat" >House & Downbeat</option>
<option value="elektronisk" >Elektronisk</option>
<option value="hiphop" >Hip Hop</option>
<option value="rbsoul" >R&B & Soul</option>
<option value="metal" >Metal</option>
<option value="blues" >Blues</option>
<option value="jazz" >Jazz</option>
<option value="verdensmusik" >Verdensmusik</option>
<option value="komedie" >Komedie</option>
<option value="country" >Country</option>
<option value="folkemusik" >Folkemusik</option>
<option value="klassisk" >Klassisk</option>
</select>
<input type="submit">
</form>
<? print_r($_POST);?>
Avatar billede sorensen_123 Nybegynder
18. juni 2006 - 15:31 #2
Det blev jeg ikke klogere af..Vil helst have den færdige kode..
Avatar billede sorensen_123 Nybegynder
18. juni 2006 - 15:59 #3
Har fundet ud af det her:
foreach ($_POST['genre'] as $noegle => $value) {
mysql_query("INSERT INTO brugere SET genre='$value'");

Men den melder den her fejl:
Warning: Invalid argument supplied for foreach() in C:\WM\www\*****\tilmeld.php on line 65
Avatar billede iss Novice
18. juni 2006 - 16:42 #4
Ja, jeg ville også helst have folk lavede mine hjemmesider uden jeg skulle gøre noget.

<?
if (!empty($_POST)) {
    foreach ($_POST['genre'] as $genre) {
        echo $genre."<br>";
    }
}?>
Avatar billede sorensen_123 Nybegynder
18. juni 2006 - 18:19 #5
Kan du ikke bare finde ud af hvad fejlen er i den kode jeg har?
Avatar billede hmortensen Nybegynder
18. juni 2006 - 18:36 #6
iss $_POST['genre'] kan vel godt være tom, selvom $_POST ikke er.

Nok bedre sådan her:
if (count($_POST['genre']) > 0)
{
  foreach ($_POST['genre'] as $val)
  {
    mysql_query(...);
  }
}
Avatar billede iss Novice
18. juni 2006 - 22:47 #7
hmortensen, kan den? I mit eksempel vil den så bare være en tom array, og foreach vil ikke fejle, så det er skam det eneste den er der for...
Avatar billede showsource Seniormester
18. juni 2006 - 23:47 #8
Når der bruges [] som afslutning på navnet, (genre[]), får du et array.

if(isset($_POST["genre"])) {
    if(is_array($_POST["genre"])) {
    $streng = implode(",", $_POST["genre"]);
    echo $streng;
    }else{
    echo"'genre' er ikke et array!";
    }
}


Går ud fra du kun vil ha' et row opdateret/indsat i din DB ???
Derfor implode()
Avatar billede sorensen_123 Nybegynder
19. juni 2006 - 11:50 #9
Helt forvirret. Kan i ikke gøre sådan at den laver den her query: mysql_query("INSERT INTO brugere SET genre='$value'"); og så udskriver den f.eks. metal;dance;hiphop ?
Avatar billede iss Novice
19. juni 2006 - 11:55 #10
Går ud fra du vel gemme mere end det du skriver her, det du skriver i databasen er jo mere eller mindre ubrugligt hvis du vil kunne gøre så det er for hver bruger, så skal du huske at gemme brugeren også, og hvis det er noget du vil kunne søge på vil du få det rimeligt svært med det, så ville det nemmeste hvis du ikke har så meget styr på det at oprette et felt for hver genere.
Avatar billede sorensen_123 Nybegynder
19. juni 2006 - 12:04 #11
Jaja..Men altså.. Jeg har en database med de her tabeller: Id, brugernavn, password, email, genre.

Den skriver den i når de gemmer, erko så kommer de jo også ind i genre.
Avatar billede iss Novice
19. juni 2006 - 12:08 #12
Ja, men du siger ikke hvilken record der skal ænderes på ved at lave det du gør, du skal fortælle den hvilken record der skal ændres, ellers får du bare en ny record kun med genre uden alle de andre felter.
Avatar billede sorensen_123 Nybegynder
19. juni 2006 - 12:10 #13
Tror hellere lige at jeg må give jer hele filen:

<?
if($action == "" AND !$_POST[B1]){
echo "
<form action=\"?side=tilmeld\" method=\"POST\">
    Brugernavn:  <input type=\"text\" name=\"ed_user\"><br>
    Kodeord:    <input type=\"text\" name=\"ed_password1\"><br>
    Kodeord igen:<input type=\"text\" name=\"ed_password2\"><br>
    Email:      <input type=\"text\" name=\"ed_email\"><br>
    Musikgenre (Hold CTRL nede for at vælge flere end en.):<br>
    <td width=\"33%\">
<select size=\"6\ name=\"genre\" style=\"font-family: Verdana; font-size: 11; width: 160; background-color:#F1F1F1;\" multiple>
<option value=\"rock\" >Rock</option>
<option value=\"pop\" >Pop</option>
<option value=\"dancetrance\" >Dance & Trance</option>
<option value=\"housedownbeat\" >House & Downbeat</option>
<option value=\"elektronisk\" >Elektronisk</option>
<option value=\"hiphop\" >Hip Hop</option>
<option value=\"rbsoul\" >R&B & Soul</option>
<option value=\"metal\" >Metal</option>
<option value=\"blues\" >Blues</option>
<option value=\"jazz\" >Jazz</option>
<option value=\"verdensmusik\" >Verdensmusik</option>
<option value=\"komedie\" >Komedie</option>
<option value=\"country\" >Country</option>
<option value=\"folkemusik\" >Folkemusik</option>
<option value=\"klassisk\" >Klassisk</option>
</select></td><br>
Hvor kan i spille i danmark (Hold CTRL nede for at vælge mere end en.):<br>
    <td width=\"33%\">
<select size=\"16\ name=\"steder\" style=\"font-family: Verdana; font-size: 11; width: 160; background-color:#F1F1F1;\" multiple>
<option value=\"heleland\" >Hele Landet</option>
<option value=\"slf\" >Sjælland, Lolland, og Falster</option>
<option value=\"storkbh\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Storkøbenhavn</option>
<option value=\"frederiksborg\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Frederiksborg Amt</option>
<option value=\"roskilde\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Roskilde Amt</option>
<option value=\"vestsjae\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vestsjællands Amt</option>
<option value=\"storstroem\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Storstrøms Amt</option>
<option value=\"lollandfalster\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lolland, Falster</option>
<option value=\"jylland\" >Jylland</option>
<option value=\"søenderjylland\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sønderjyllands Amt</option>
<option value=\"ribe\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ribe Amt</option>
<option value=\"ringkoebing\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ringkøbing Amt</option>
<option value=\"aarhus\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Århus Amt</option>
<option value=\"viborg\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Viborg Amt</option>
<option value=\"nordjylland\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nordjyllands Amt</option>
<option value=\"fyn\" >Fyn og omliggende øer</option>
</select></td><br>
<input type=\"submit\" value=\"Login\" name=\"B1\"></td>
</form>";
}
include("mysql/mysql.php");
if($_POST[B1] AND $action == ""){
$res = mysql_query("SELECT * FROM brugere WHERE brugernavn='$_POST[ed_user]'");
$num = mysql_num_rows($res);

if($_POST[ed_password1] != $_POST[ed_password2]){
  echo "<a href=\"?side=tilmeld\">De to kodeord er ikke ens</a>";
}elseif(!$_POST[ed_password1] OR !$_POST[ed_password2] OR !$_POST[ed_user] OR !$_POST[ed_email]){
  echo "<a href=\"?side=tilmeld\">Du mangler at udfylde et eller flere felter</a>";
}elseif($num >= 1){
  echo "<a href=\"?side=tilmeld\">Brugernavnet er allerede taget.</a>";
}else{

mysql_query("INSERT INTO brugere SET email='$_POST[ed_email]', password='$_POST[ed_password1]', brugernavn='$_POST[ed_user]'");
foreach ($_POST['genre'] as $noegle => $value) {
mysql_query("INSERT INTO brugere SET genre='$value'");
}
echo "<center><b><a href=\"index.php\">Din profil er nu oprettet .</b><br>Tilbage</a>";
}


}
?>

Forstår du nu?
Avatar billede iss Novice
19. juni 2006 - 12:15 #14
Jeg kan forstå at jeg havde ret, og at du burde lære at holde PHP og HTML hver for sig. Du skal ikke lave en INSERT for hver genre, så får du det jeg skrev til dig... Lav din INSERT om til også at lave INSERT på genre (og hvis genre skal bruges til at kunne søge på senere, ville jeg anbefale at lave et felt til hver genre).
Avatar billede sorensen_123 Nybegynder
19. juni 2006 - 12:24 #15
Forstår ikke?
Avatar billede iss Novice
19. juni 2006 - 12:43 #16
<?
if(empty($_POST['B1']) {?>
<form action="?side=tilmeld" method="POST">
    Brugernavn:  <input type="text" name="ed_user"><br>
    Kodeord:    <input type="text" name="ed_password1"><br>
    Kodeord igen:<input type=\"text\" name="ed_password2"><br>
    Email:      <input type="text" name="ed_email"><br>
    Musikgenre (Hold CTRL nede for at vælge flere end en.):<br>
    <td width="33%">
<select size="6" name="genre[]" style="font-family: Verdana; font-size: 11; width: 160; background-color:#F1F1F1;" multiple>
<option value="rock" >Rock</option>
<option value="pop" >Pop</option>
<option value="dancetrance" >Dance & Trance</option>
<option value="housedownbeat" >House & Downbeat</option>
<option value="elektronisk" >Elektronisk</option>
<option value="hiphop" >Hip Hop</option>
<option value="rbsoul" >R&B & Soul</option>
<option value="metal" >Metal</option>
<option value="blues" >Blues</option>
<option value="jazz" >Jazz</option>
<option value="verdensmusik" >Verdensmusik</option>
<option value="komedie" >Komedie</option>
<option value="country" >Country</option>
<option value="folkemusik" >Folkemusik</option>
<option value="klassisk" >Klassisk</option>
</select></td><br>
Hvor kan i spille i danmark (Hold CTRL nede for at vælge mere end en.):<br>
    <td width=\"33%\">
<select size="16" name="steder[]" style="font-family: Verdana; font-size: 11; width: 160; background-color:#F1F1F1;" multiple>
<option value="heleland" >Hele Landet</option>
<option value="slf" >Sjælland, Lolland, og Falster</option>
<option value="storkbh" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Storkøbenhavn</option>
<option value="frederiksborg" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Frederiksborg Amt</option>
<option value="roskilde" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Roskilde Amt</option>
<option value="vestsjae" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vestsjællands Amt</option>
<option value="storstroem" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Storstrøms Amt</option>
<option value="lollandfalster" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lolland, Falster</option>
<option value="jylland" >Jylland</option>
<option value="søenderjylland" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sønderjyllands Amt</option>
<option value="ribe" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ribe Amt</option>
<option value="ringkoebing" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ringkøbing Amt</option>
<option value="aarhus" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Århus Amt</option>
<option value="viborg" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Viborg Amt</option>
<option value="nordjylland" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nordjyllands Amt</option>
<option value="fyn" >Fyn og omliggende øer</option>
</select></td><br>
<input type="submit" value="Login" name="B1"></td>
</form>
<?
}
include("mysql/mysql.php");
if(isset($_POST['B1'])) {
    $res = mysql_query("SELECT * FROM brugere WHERE brugernavn='".$_POST['ed_user']."'");
    $num = mysql_num_rows($res);
    if($_POST['ed_password1'] != $_POST['ed_password2']) {?>
<a href="?side=tilmeld">De to kodeord er ikke ens</a><?
    }
    elseif(empty($_POST['ed_password1'] || empty($_POST['ed_password2']) || empty($_POST['ed_user']) || empty($_POST['ed_email'])) {?>
<a href="?side=tilmeld">Du mangler at udfylde et eller flere felter</a>
<?    }
    elseif($num >= 1) {?>
<a href="?side=tilmeld">Brugernavnet er allerede taget.</a>
<?    }
    else {
        $genre = implode(";", $_POST["genre"]);
        $steder = implode(";", $_POST["steder"]);
        mysql_query("INSERT INTO brugere SET email='".$_POST['ed_email']."', password='".$_POST['ed_password1']."', brugernavn='".$_POST['ed_user']."', genre='".$genre."', steder='".$steder."'");?>
<center><b><a href="index.php">Din profil er nu oprettet .</b><br>Tilbage</a></center>
<?    }
}
?>


Farvel...
Avatar billede sorensen_123 Nybegynder
19. juni 2006 - 13:51 #17
Hvor henne tilføjer jeg flere points? Du skal have 100 for den hjælp du har givet.
Avatar billede sorensen_123 Nybegynder
19. juni 2006 - 14:56 #18
Hvordan kan jeg gøre sådan at den finder ud af hvilken radio knap der er markeret, og så gemmer alle dem der er markeret i databasen? Så får du 200 point.
Avatar billede sorensen_123 Nybegynder
27. september 2006 - 14:02 #19
Nå..Der kom ikke noget svar, så lukker ;)
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