Avatar billede Kallesen Juniormester
27. april 2017 - 09:10 Der er 9 kommentarer og
1 løsning

Value i stedet for texten

Kære Eksperter!

Jeg sidder lidt med noget af en virkelig dum hovedpine, og jeg synes efterhånden slet ikke det er sjovt længere.

Jeg har set mig blind på det, for jeg tror nu nok at jeg selv ville kunne finde løsningen, men lige nu ser det ud som om den ligger meget langt væk. Men her er min kode:

<?php
if (isset($_POST['submit'])) {
## connect til mysql server
    $mysqli = new mysqli("localhost", "kenneth", "m65128", "q-tracker");
    # check connection
    if ($mysqli->connect_errno) {
        echo "<p>MySQL error no {$mysqli->connect_errno} : {$mysqli->connect_error}</p>";
        exit();
    }
## query database
    # prepare data for insertion
    $mnummer = $_POST['mnummer'];
    $owner = $_POST['owner'];
    $kategori = $_POST['kategori'];
    $spm = $_POST['spm'];
    $Fejl = $_POST['Fejl'];
    $bemrk = $_POST['bemrk'];
   
    # insert data into mysql database
    $sql = "INSERT  INTO `databilling` (`id`, `owner` , `kategori` , `mnummer`, `spm`, `Fejl`, `bemrk`) VALUES (NULL, '{$owner}', '{$kategori}', '{$mnummer}', '{$spm}', '{$Fejl}', '{$bemrk}')";
    if ($mysqli->query($sql)) {
        echo "
        <h3><span class='label label-default'>Vi har modtaget din registring!</span></h3>";
        // redirect_to("reg.php?msg=Registeret uden fejl!");
    } else {
        echo "<p>MySQL error no {$mysqli->errno} : {$mysqli->error}</p>";
        exit();
    }
}
?>

Den gør sit arbejde som den skal, smider data ind i mysql databasen, men jeg ville meget gerne have TEKSTEN fra mine select bokse som ser således ud:


<select id="kategori" name="kategori" class="form-control" data-live-search="true">
  <option value="1">Frugt</option>
  <option value="2">Dyr</option>
  <option value="3">Skibe</option>
  <option value="4">Bil</option>
</select>

<br>
<select id="spm" name="spm" class=" form-control" data-live-search="true">
  <option value="1">Banan</option>
  <option value="1">Æbler</option>
  <option value="1">Melon</option>
  <option value="2">Hund</option>
  <option value="2">Kat</option>
  <option value="2">Hamster</option>
  <option value="3">Fugl</option>
  <option value="3">bjørn</option>
  <option value="4">Speedbåd<option>
</select>


Hjælp! :) Jeg er sikker på den er nem, men jeg er blind, og må ty til jer denne gang :) Happy Coding! :)
Avatar billede Kallesen Juniormester
27. april 2017 - 09:12 #1
Overskriften fejlede sgu også for mig! Der skulle stå: Tekst i stedet for value :D
Avatar billede acore Ekspert
27. april 2017 - 10:19 #2
Så vidt jeg kan se, så bruger du den samme "value" værdi for flere options i den anden select. for eksempel:

<option value="1">Banan</option>
<option value="1">Æbler</option>
<option value="1">Melon</option>

Det gør det umuligt at komme fra "value" til "tekst".

Så punkt 1 er at ændre det, så hver value er forskellig.

Punkt 2 kunne være at lægge data i arrays, så du har dem, når du skal finde teksten. For den første:

$kategorier = array(
1 => "Frugt",
2 => "Dyr",
3 => "Skibe",
4 => "Bil"
);

Punkt 3 kunne være at lave en funktion til at generere dine selects ud fra dine data arrays:

function generateselect($id, $elements)
{
  echo("<select id='".$id."' name='".$id."' class='form-control' data-live-search='true'>");
  foreach($elements as $id => $text)
    echo("<option value='".$id."'>".$text."</option>");
  echo("</select>");
 
Nu kan du generere din select med

generateselect($kategorier);

Punkt 4 er så at hente teksten ud fra value med:

$kategoritekst = $kategorier[$kategori];
Avatar billede acore Ekspert
27. april 2017 - 10:20 #3
Fejl - der skal står:

generateselect("kategori", $kategorier);
Avatar billede Rune1983 Ekspert
27. april 2017 - 10:38 #4
Hvis du gerne vil have selve teksten sendt med i formen kan det gøres lidt ala dette eksempel nedenfor.
Selv lige skrevet det. Utestet. Men håber det kan bruges alligevel.
<select id="kategori" name="kategori" class="form-control" data-live-search="true" onchange="GetSelectedOptionText('kategori','ValgtComboboxTekstKategori');">
  <option value="1">Frugt</option>
  <option value="2">Dyr</option>
  <option value="3">Skibe</option>
  <option value="4">Bil</option>
</select>
<input type="hidden" id="ValgtComboboxTekstKategori" name="ValgtComboboxTekstKategori" />

<select id="spm" name="spm" class=" form-control" data-live-search="true" onchange="GetSelectedOptionText('spm','ValgtComboboxTekstSpm');">
  <option value="1">Banan</option>
  <option value="1">Æbler</option>
  <option value="1">Melon</option>
  <option value="2">Hund</option>
  <option value="2">Kat</option>
  <option value="2">Hamster</option>
  <option value="3">Fugl</option>
  <option value="3">bjørn</option>
  <option value="4">Speedbåd<option>
</select>
<input type="hidden" id="ValgtComboboxTekstSpm" name="ValgtComboboxTekstSpm" />

<script type="text/javascript">
    function GetSelectedOptionText(comboboxID,hiddenInputFelt){
        var comboboxID = document.getElementById(comboboxID);
        var hiddenInputFelt = document.getElementById(hiddenInputFelt);
        hiddenInputFelt.value = comboboxID.options[comboboxID.selectedIndex].text;
    }
</script>
Avatar billede Kallesen Juniormester
27. april 2017 - 13:28 #5
acore - Jeg er ikke heeelt med på hvor du vil hen?

Rune1983 - Den gør reelt det samme som min tidligere kode, og smider kun value ind i min db. Desværre.
Avatar billede Rune1983 Ekspert
27. april 2017 - 13:46 #6
Lavede 2 ekstra input felter du kunne anvende til dit database insert.
Men du kan også bare bytte rundt på navngivningen af name felterne.
Prøv eksempel nedenfor hvor navne er byttet rundt.

<select id="kategori" name="ValgtComboboxTekstKategori" class="form-control" data-live-search="true" onchange="GetSelectedOptionText('kategori','ValgtComboboxTekstKategori');">
  <option value="1">Frugt</option>
  <option value="2">Dyr</option>
  <option value="3">Skibe</option>
  <option value="4">Bil</option>
</select>
<input type="hidden" id="ValgtComboboxTekstKategori" name="kategori" />

<select id="spm" name="ValgtComboboxTekstSpm" class=" form-control" data-live-search="true" onchange="GetSelectedOptionText('spm','ValgtComboboxTekstSpm');">
  <option value="1">Banan</option>
  <option value="1">Æbler</option>
  <option value="1">Melon</option>
  <option value="2">Hund</option>
  <option value="2">Kat</option>
  <option value="2">Hamster</option>
  <option value="3">Fugl</option>
  <option value="3">bjørn</option>
  <option value="4">Speedbåd<option>
</select>
<input type="hidden" id="ValgtComboboxTekstSpm" name="spm" />

<script type="text/javascript">
    function GetSelectedOptionText(comboboxID,hiddenInputFelt){
        var comboboxID = document.getElementById(comboboxID);
        var hiddenInputFelt = document.getElementById(hiddenInputFelt);
        hiddenInputFelt.value = comboboxID.options[comboboxID.selectedIndex].text;
    }
</script>
Avatar billede Kallesen Juniormester
27. april 2017 - 14:10 #7
Jeg kan sagtens se hvor du vil hen med de gemte boxe, og fin idé - Men jeg får stadig kun stillet value ind i min DB, og det irritere mig :D
Avatar billede Rune1983 Ekspert
27. april 2017 - 14:30 #8
Rettet dit database insert kald til nedenfor.
Kontroller. Går ud fra dine kolonner "kategori" og "spm" er til tekst.

Sammensætter value og tekst nedenfor.
<?php
$mnummer = $_POST['mnummer'];
$owner = $_POST['owner'];
$kategori = $_POST['kategori'];
$spm = $_POST['spm'];
$Fejl = $_POST['Fejl'];
$bemrk = $_POST['bemrk'];
$ValgtComboboxTekstKategori = $_POST['ValgtComboboxTekstKategori'];
$ValgtComboboxTekstSpm = $_POST['ValgtComboboxTekstSpm'];

# insert data into mysql database
$sql = "INSERT  INTO `databilling` (`id`, `owner` , `kategori` , `mnummer`, `spm`, `Fejl`, `bemrk`)
        VALUES (NULL, '$owner', CONCAT('$kategori',' - ','$ValgtComboboxTekstKategori'), '$mnummer', CONCAT('$spm',' - ','$ValgtComboboxTekstSpm'), '$Fejl', '$bemrk')";
?>
Avatar billede jakobdo Ekspert
27. april 2017 - 14:54 #9
Altså...
En select med denne form:

<select...>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
...
</select>

Vil "aldrig" sende teksten Option 1 eller Option 2.
hvis det virkelig er hvad du ønsker, så kan du jo "bare" rette din select til:

<select...>
<option>Option 1</option>
<option>Option 2</option>
...
</select>

Men hvis du skal gemme info i en tabel og gemme det i forhold til andet, vil det altid være en fordel at gemme id og ikke selve teksten.
Avatar billede acore Ekspert
27. april 2017 - 15:06 #10
Hvis du vil arbejde videre med min #2: Hvad er det første af mine 4 punkter, som du ikke er med på?
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