Avatar billede Thomsen11 Nybegynder
09. marts 2010 - 19:23 Der er 7 kommentarer og
2 løsninger

Dropdown i php

Hej eksperter.

Jeg har en hjemmeside hvor folk skal tilmelde sig til et arrangement. De skal oplyse nogle informationer som bliver smidt ind i en database. Jeg printer så, på en anden side, informationerne ud så man kan se hvilke der er tilmeldt.
Da det er et arrangement for tidligere elever skal de oplyse hvilke år de har gået på skolen. Som det er nu skal de bare skrive årstal ind, men jeg ville gerne have så de kan vælge mellem dropdown årstal, så de ikke selv skal skrive dem. Problemet ligger ikke i at lave et dropdown, men jeg aner ikke hvordan det skal sættes sammen så det indsættes i databasen.

Min nuværende kode ser sådan ud:

<?php
require_once("config.php");
if($_GET['do'] == "insert" && isset($_POST['Brugernavn']))
{
    $todb['Brugernavn'] = mysql_real_escape_string($_POST['Brugernavn']);
    $todb['Navn'] = mysql_real_escape_string($_POST['Navn']);
    $todb['Email'] = mysql_real_escape_string($_POST['Email']);
    $todb['Year'] = mysql_real_escape_string($_POST['Year']);
    $todb['Comment'] = mysql_real_escape_string($_POST['Comment']);
    $insert_data = mysql_query("INSERT INTO tilmeld(
                                                Brugernavn,
                                                Navn,
                                                Email,
                                                Year,
                                                Comment)VALUES(
                                                '".$todb['Brugernavn']."',
                                                '".$todb['Navn']."',
                                                '".$todb['Email']."',
                                                '".$todb['Year']."',
                                                '".$todb['Comment']."')");
    if($insert_data)
    {
        print"Du er tilmeldt. Vi glæder os til at se dig. <br /><br />";
    }
    else
    {
        print "<b>FEJL:</b> ".mysql_error();
    }
}
?>
<center>
<form action="?do=insert" method="post">
Navn:<br> <input type="text" name="Navn" value="<?=$_POST['Navn'];?>" /><br />
Email:<br> <input type="text" name="Email" value="<?=$_POST['Email'];?>" /><br />
Year:<br> <input type="text" name="Year" value="<?=$_POST['Year'];?>" /><br />
Kommentar:<br> <input type="text" name="Comment" value="<?=$_POST['Comment'];?>" /><br />
<input type="submit" value="Tilmeld" />
</form>


Hvis I vil hjælpe mig med det ville det være dejligt. Forstår I ikke mit spørgsmål så skriv endelig en kommentar, så jeg kan uddybe det bedre.

PS. Hvis I ved hvordan man gør så siden kun kan ses af de der er logget ind (Brugerne logges ind i session) vil det være dejligt hvis I vil vise mig det.

På forhånd tak!!!
Avatar billede Slettet bruger
09. marts 2010 - 19:32 #1
W3schools er generelt ikke en hjemmeside man skal give alt for meget tillid, men i denne situation er den glimrende:
http://www.w3schools.com/tags/tag_select.asp
Hvad der står mellem start- og afslutnings-option-tag'et er, hvad der bliver vist til brugeren, og attributen value bestemmer hvad der bliver sendt til brugeren?

Hvordan logger brugerne ind på din side?
Avatar billede expnet Seniormester
09. marts 2010 - 21:04 #2
Her har du din formular med select box
------------------

<?php
require_once("config.php");
if($_GET['do'] == "insert" && isset($_POST['Brugernavn']))
{
    $todb['Brugernavn'] = mysql_real_escape_string($_POST['Brugernavn']);
    $todb['Navn'] = mysql_real_escape_string($_POST['Navn']);
    $todb['Email'] = mysql_real_escape_string($_POST['Email']);
    $todb['Year'] = mysql_real_escape_string($_POST['Year']);
    $todb['Comment'] = mysql_real_escape_string($_POST['Comment']);
    $insert_data = mysql_query("INSERT INTO tilmeld(
                                                Brugernavn,
                                                Navn,
                                                Email,
                                                Year,
                                                Comment)VALUES(
                                                '".$todb['Brugernavn']."',
                                                '".$todb['Navn']."',
                                                '".$todb['Email']."',
                                                '".$todb['Year']."',
                                                '".$todb['Comment']."')");
    if($insert_data)
    {
        print"Du er tilmeldt. Vi glæder os til at se dig. <br /><br />";
    }
    else
    {
        print "<b>FEJL:</b> ".mysql_error();
    }
}
?>
<center>
<form action="?do=insert" method="post">
Navn:<br> <input type="text" name="Navn" value="<?=$_POST['Navn'];?>" /><br />
Email:<br> <input type="text" name="Email" value="<?=$_POST['Email'];?>" /><br />
Year:<br> <select name="Year" size="1">
    <option selected="selected" value="">Vælg årstal</option>
    <option value="1983">1983</option>
    <option value="1982">1982</option>
    <option value="1981">1981</option>
</select><br>
Kommentar:<br> <input type="text" name="Comment" value="<?=$_POST['Comment'];?>" /><br />
<input type="submit" value="Tilmeld" />
</form>
Avatar billede Thomsen11 Nybegynder
09. marts 2010 - 21:34 #3
Tak til jer begge for jeres hurtige svar.
Det er ikke problemet for mig at lave en dropdown men at få den sammen med scriptet så den sender til databasen.
expnet jeg har prøvet dit script men når jeg trykker på Tilmeld sker der ikke noget, den printer hverken svaret (Du er tilmeldt. Vi glæder os til at se dig.) eller fejlmeldingen.
Jeg har prøvet at rette lidt på det men kan ikke få det til at fungere. Tror måske fejlen er at den ikke sender value="<?=$_POST['Email'];?>" ligesom de andre.
Avatar billede repox Seniormester
09. marts 2010 - 21:44 #4
I din første if-condition betinger du også at $_POST["Brugernavn"] også er sat, men den sender du ikke med fra din form, hvorfor der så ikke sker noget.
Forslaget fra #2 ser rigtigt ud, bortset fra din if-condition som evalueres til falsk og derfor ikke kommer videre.
Avatar billede expnet Seniormester
10. marts 2010 - 09:38 #5
Hvis du ikke har et felt med name="Brugernavn" skal du tjekke på andet eks. navn el. email
------------------

<?php
require_once("config.php");
if($_GET['do'] == "insert" && isset($_POST['Brugernavn']))
{
    $todb['Brugernavn'] = mysql_real_escape_string($_POST['Brugernavn']);
    $todb['Navn'] = mysql_real_escape_string($_POST['Navn']);
    $todb['Email'] = mysql_real_escape_string($_POST['Email']);
    $todb['Year'] = mysql_real_escape_string($_POST['Year']);
    $todb['Comment'] = mysql_real_escape_string($_POST['Comment']);
    $insert_data = mysql_query("INSERT INTO tilmeld(
                                                Brugernavn,
                                                Navn,
                                                Email,
                                                Year,
                                                Comment)VALUES(
                                                '".$todb['Brugernavn']."',
                                                '".$todb['Navn']."',
                                                '".$todb['Email']."',
                                                '".$todb['Year']."',
                                                '".$todb['Comment']."')");
    if($insert_data)
    {
        print"Du er tilmeldt. Vi glæder os til at se dig. <br /><br />";
    }
    else
    {
        print "<b>FEJL:</b> ".mysql_error();
    }
}
?>
<center>
<form action="?do=insert" method="post">
Brugernavn:<br> <input type="text" name="Brugernavn" value="<?=$_POST['Brugernavn'];?>" /><br />
Navn:<br> <input type="text" name="Navn" value="<?=$_POST['Navn'];?>" /><br />
Email:<br> <input type="text" name="Email" value="<?=$_POST['Email'];?>" /><br />
Year:<br> <select name="Year" size="1">
    <option selected="selected" value="">Vælg årstal</option>
    <option value="1983">1983</option>
    <option value="1982">1982</option>
    <option value="1981">1981</option>
</select><br>
Kommentar:<br> <input type="text" name="Comment" value="<?=$_POST['Comment'];?>" /><br />
<input type="submit" value="Tilmeld" />
</form>
Avatar billede Thomsen11 Nybegynder
10. marts 2010 - 10:21 #6
Godt set repox. Jeg havde helt overset at jeg ikke havde den i min form. Nu virker det.
Hvis du smider et svar må dig og expnet dele om pointene, hvis det er ok?

Men er der nogle der ved hvordan man gør så man bliver sendt videre til en anden side når man har trykket på Tilmeld?
Avatar billede repox Seniormester
10. marts 2010 - 11:42 #7
Der var et svar fra mig her.

Angående dit tillægsspørgsmål...
Det normale at gøre er at videresende personen ved hjælp af en header med informationen Location.
header("Location: http://example.org/tak.php");


For god ordens skyld anbefales det at du dræber scriptet, så resten af koden ikke eksekveres uhensigtsmæssigt:
header("Location: http://example.org/tak.php");
exit;


Problemet er bare at en header ikke kan sendes, hvis du har haft output. Output er tomme linier, html, tekst, osv...

En nem og god fremgangsmåde at komme udover de generelle problemer på er noget ala:
<?php

  if( isset($_POST) )
  {
    if( alle data er som de skal være og alt er gået godt )
    {
      //indsæt i databasen, send mail eller hvad man nu lige er til
      header("Location: http://example.org/tak.php");
      exit;
    }
    else
    {
      $errorMessage = "Ikke alle felter var udfyldt";
    }
  }
?>
<!DOCTYPE...>
<html>
  <head>
    <title>...
  </head>
  <body>

    blah blah blah

    <form ...>
     
      <?php if( isset($errorMessage) ): ?>
      <p class="error">
        <?php echo $errorMessage; ?>
      </p>
      <?php endif; ?>
    </form>
  </body>
</html>


Bemærk at det PHP der skal reagere på brugerens input sker som de første.
Avatar billede Thomsen11 Nybegynder
15. marts 2010 - 19:59 #8
Kan det lade sig gøre at dele pointene? For mig ser det ikke ud som om det er muligt. Ellers må i lige hjælpe mig med hvordan vi for fordelt pointene.

Men er der nogle der ved hvordan man gør så det kun er brugere der kan se siden? Mine brugere logger ind i sessions. Dvs. at de logger ind på forsiden og fra den bliver sendt ind på "loginsiden". Her er lidt kode fra den:

<?php
session_start();
require_once("config.php");

if(!isset($_POST['Submit'])) {
    echo "Du skal komme fra forsiden";
    }else{
        $postbruger = $_POST['Brugernavn'];
        $postpass = $_POST['Password'];
       
        $resultat = mysql_query("SELECT Id FROM `brugere` WHERE Brugernavn = '$postbruger' AND Password = '$postpass'");

        $number = mysql_num_rows($resultat);
        if($number == 1) {
        $_SESSION['loget_in'] = 1;
        $_SESSION['Brugernavn'] = $postbruger;
        $_SESSION['Password'] = $postpass; //Sætter session variablerne
        echo "<center>Du er nu logget ind</center>
             
";

        }else echo"De indtastede oplysninger er ikke korrekte";
        }
?>
Avatar billede Thomsen11 Nybegynder
18. marts 2010 - 17:28 #9
Grundet point er det er nok mest fair hvis jeg opretter en ny tråd med det sidste spørgsmål, om det er muligt kun at brugerne kan se siden. Det er hermed gjordt. Link: http://www.eksperten.dk/spm/904879
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

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