Avatar billede Asger Carlsen Nybegynder
14. juli 2012 - 16:51 Der er 30 kommentarer og
1 løsning

Vise navn i inputboks udfra et nummer i en <select>-dropdown

Jeg er ikke en haj til java, så muligvis det er lidt mere indviklet et problem end jeg forestiller mig.

Sagen er den at jeg har en <select>-boks/deopdown med en række sags-numre.

<select id="sagsnr">
<option> 567823 </select>
<option> 657912 </select>
<option> 457456 </select>
</select>

Alle disse numre hænger sammen med et navn. (Det hele ligger i en MySQL-database.)

Jeg vil gerne lave det sådan at når der vælges et sagsnr i <select>, så skrives det navn der hører til sagsnummeret i en <input> lige ved siden af.

Jeg har været lidt omkring for at lede efter noget brugbart, men uden så meget held. Er der nogen der vil hjælpe mig?
Avatar billede olebole Juniormester
14. juli 2012 - 17:05 #1
<ole>

Java og JavaScript er to vidt forskellige sprog med fire ting tilfælles: J, a, v og a. Da opgave bør løses med JavaScript, betyder det heldigvis ikke noget, du ikke er en haj til Java  =)

Bruger du i forvejen jQuery på siden?

/mvh
</bole>
Avatar billede olsensweb.dk Ekspert
14. juli 2012 - 17:13 #2
en løsning kunne være du laver en onchange på din selectbox der submitter til din serverside.

du kan enten submitter hele formen (den nemmeste) og få en helt ny side
eller anvende AjAX (det hurtigste), og kun få den data du efterspørger, du bliver på sammen side
Avatar billede Asger Carlsen Nybegynder
14. juli 2012 - 17:17 #3
#1 nej det gør jeg ikke. Bruger normalt kun php, og så meget enkelte primitive/enkle javascripts.

Beklager sammenblandingen af af java og JavaScripts :) - Er godt klar over det ikke er det samme.

#2 Uden jeg helt ved hvad jeg taler om vil jeg foretrække ajax-løsningen. Vil gerne have operationen sker på samme side, uden at der skal loades en side. Har pt. en løsning i php, men den er ret tidsineffektiv.
Avatar billede olebole Juniormester
14. juli 2012 - 17:24 #4
<script type="text/javascript">
function sendReq() {
    $.ajax({
        type: "POST",
        url: "response.php",
        data: {"context": "getName", "num": $("#sagsnr").val()}
    }).done(function(sName) {
        $("#myInput").val(sName);
    });
}

$(document).ready(function() {
    $("#sagsnr").change(sendReq);
});
</script>

<select id="sagsnr">
<option value="567823"> 567823 </select>
<option value="657912"> 657912 </select>
<option value="457456"> 457456 </select>
</select>

<input id="myInput" type="text">

Og response.php:

<?php
if (isset($_POST['context']) && $_POST['context']=='getName') {
    $num = $_POST['num'];
    $name = [MYSQL_QUERY];
    header('Content-Type: text/javascript; charset=utf-8');
    header('Content-Length: '.strlen($name));
    echo $name;
}
?>
Avatar billede olebole Juniormester
14. juli 2012 - 17:31 #5
- og så skal du selvfølgelig først importere jQuery  =)

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
Avatar billede Asger Carlsen Nybegynder
14. juli 2012 - 17:35 #6
Skal det forstås som der er tale om 2 sider? en med javascriptet, og en response.php ?

og så lige til nybegyneren, <script> bliver lagt i <head>? :)
Avatar billede olebole Juniormester
14. juli 2012 - 17:36 #7
1) Ja

2) Nej, det må også stå i BODY - hvor du har lyst
Avatar billede Asger Carlsen Nybegynder
14. juli 2012 - 17:38 #8
Så havde jeg da gjort det rigtigt. Min <input> forbliver tom når jeg ændrer i <select>'en.
Avatar billede Asger Carlsen Nybegynder
14. juli 2012 - 17:39 #9
Avatar billede Asger Carlsen Nybegynder
14. juli 2012 - 17:45 #10
Er min MySQL-forespørgsel korrekt udfyldt?
name = [mysql_query("select navn from sager where nr='$num'")];
Avatar billede olebole Juniormester
14. juli 2012 - 17:55 #11
Nej, de firkantede brackets var bare for at tydeliggøre, det var pseudokode. De skal naturligvis fjernes  =)
Avatar billede olebole Juniormester
14. juli 2012 - 17:59 #12
- og så bør du bede til din Gud og skaber om, at der ikke findes en person, som kunne finde på at sende en request med andet end et tal i $_POST['num']!

Du bør helt klart skifte det oldnordiske MySQL-API ud med MySQLI (I for improved) og prepared statements. Ellers står din applikation pivåben for angreb  *o)
Avatar billede Asger Carlsen Nybegynder
15. juli 2012 - 11:49 #13
Jeg kan ikke rigtigt få det til at virke, har prøvet nogle forskellige ting, men det virker til der er noget i javaScript-delen jeg ikke har fået tilpasset endnu. Ole kan du se noget jeg mangler at rette?

test.php (Sagsnumrene er blevet ændret, men er korrekte)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>New document</title>
    <meta name="generator" content="TSW phpCoder 2008" />
   
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<script type="text/javascript">
function sendReq() {
    $.ajax({
        type: "POST",
        url: "response.php",
        data: {"context": "getName", "num": $("#sagsnr").val()}
    }).done(function(sName) {
        $("#myInput").val(sName);
    });
}

$(document).ready(function() {
    $("#sagsnr").change(sendReq);
});
</script>

</head>

<body>


<select id="sagsnr">
<option value="129856"> 129856 </option>
<option value="453848"> 453848 </option>
<option value="894532"> 894532 </option>
</select>

<input id="myInput" type="text" name="navn" />



</body>
</html>

response.php

include ("admin_ny/db_ind.inc");
if(isset($_POST['context']) && $_POST['context'] == 'getName') // Fjernes denne linie + #2, udskrives sagens navn
{
    $num = $_POST['num'];
   
    $hent_data = mysql_query("select navn from sager where nr = '$num'") or die(mysql_query());
    while($data = mysql_fetch_array($hent_data))
    {
        extract($data);
        $name = $navn;
        header('Content-Type: text/javascript; charset=utf-8');
        header('Content-Length: ' . strlen($name));
        echo $name;
    }
} // #2

begge filer ligger i samme mappe.
Avatar billede olsensweb.dk Ekspert
15. juli 2012 - 11:57 #14
@coder_carl Jeg har ikke lige prøvet OleBole's code, men jeg kan huske jeg havede problemer med header retur
da jeg fjernede disse
header('Content-Type: text/javascript; charset=utf-8');
header('Content-Length: ' . strlen($name));
kom min vertion til at virke under jquery

her er et løsnings bud uden brug af jquery, som du skriver i #3 du ikke anvender, og der er ikke nogle grund til at anvende det bare for så lidt.
jquery fylder tråds alt 100K

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title></title>
    <style type="text/css">
    </style>
    <script type="text/javascript">
    function setinputname(Val){
        var url = "post_request.php";       
        var params = "id="+Val;       
        http = XMLHttpRequest();
        http.open("POST", url, true);
        //Send the proper header information along with the request
        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        http.setRequestHeader("Content-length", params.length);
        http.setRequestHeader("Connection", "close");
        http.send(params);
        http.onreadystatechange = function() {//Call a function when the state changes.
            if(http.readyState == 4 && http.status == 200) {
                document.getElementById('username').value = this.responseText;                
            }
        }       
    }   
    </script>
</head>
<body>
<form action="#" name="test">
<select id="sagsnr" onchange="setinputname(this.value)">
  <option value="567823">567823</option>
  <option value="657912">657912</option>
  <option value="457456">457456</option> 
</select>
<input type="text" name="username" id="username" value="" >
</form>
</body>
</html>


med tilhørende post_request.php
<?php
    function MySqlIConn(){
        $mysqli = new mysqli("localhost", "root", "", "test");
        // check connection
        if ($mysqli->connect_errno) {
            printf("Connect failed: %s\n", $mysqli->connect_error);
            exit();
        }
        mysqli_set_charset($mysqli, "utf8");
        return $mysqli;
    }
   
    $id = $_POST['id'];       
    $mysqli = MySqlIConn();
   
    $sql = "select name from tbl_users where id = ?";     
    if ($stmt = $mysqli->prepare($sql)){
        // Bind parametre
        $stmt->bind_param('i', $id);       
        // Eksekver forespørgslen
        $stmt->execute();       
        //'* Bind resultatet
        $stmt->bind_result($name);       
        // Hent rækker og udskriv data
        $stmt->fetch();
        $name = $name;       
        $stmt->close();       
       
       
        echo $name;   
    }
    else {
        // Der er opstået en fejl
        echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
    }       
?>


skal du have flere data retur skal de incodes ! CSV, JSON eller XML, mange AJAX tut på nettet retunerer desværrer HTML hvilke er en uskik

jeg har lavet et par forslag du kan kigge på http://experten.olsensweb.dk/966002/966002.zip blot til inspiration
Avatar billede Asger Carlsen Nybegynder
15. juli 2012 - 12:15 #15
#14 -> Ole's eksempel virker hvis jeg fjerner de 2 headere i reponse.php som du sagde. -> http://www.byg-ns.dk/test.php


Dit løsnings forslag var lige til at sætte ind, og virker. Skal så lige have kigget det lidt nøjere igennem for at se hvordan det virker. Tak for de andre løsningsforslag. Jeg lærer bedre ved at kigge på færdig kode.

Stor tak til jer begge i hvert fald. Det er altid rart at blive klogere, og dejligt der er nogen der gider tage sig tid til at hjælpe os der ikke kan selv :) Det må blive en deler, så smid et svar hvis I vil have point.
Avatar billede olsensweb.dk Ekspert
15. juli 2012 - 12:33 #16
du får et svar her

du har et tegnset problem, værkstedet står ikke korrekt

jeg lev også lidt klogere, jeg er ikke den store bruger af jquery, men undrede mig over Ole brugte done og ikke success i sendReq()

ref http://stackoverflow.com/questions/8840257/jquery-ajax-handling-continue-responses-success-vs-done
You should use done, success is being deprecated in jQuery 1.8:
Avatar billede olsensweb.dk Ekspert
15. juli 2012 - 12:45 #17
du mangler på din side at indsætte
<meta http-equiv="content-type" content="text/html; charset=utf-8">
i din head

står værkstedet korrekt i din db ??,
hvilke charset anvender du i COLLATION ??
og CONNECTION ??

hvilke tegnset er dine sider incode og gemt med ??

AJAX understøtter ikke andet end UTF-8

kort sagt kør UTF-8 hele vejen rundt så går det ikke galt
Avatar billede Asger Carlsen Nybegynder
15. juli 2012 - 12:52 #18
Collation:    utf8_danish_ci

CONNECTION. Hvad er det? - Vil mene værkstedet står korrekt.
Avatar billede olsensweb.dk Ekspert
15. juli 2012 - 13:24 #19
>Vil mene værkstedet står korrekt.
har du kontrolleret det ??

problemet har været oppe en del gange de sidste par år,

ref http://www.eksperten.dk/spm/965035 #3
Du skal sætte databsen til sat utf8_danish_ci - bruge en utf-8 meta - og sørge for, dine filer bliver gemt som utf-8. Det kan du i de fleste editorer, men det er forskelligt, hvordan.
Bemærk, at forkert encoded data, som allerede ligger i databasen, ikke bliver konverteret, når du skifter kollationer på tabellerne.

1) gem alle dokumenter som utf-8 (tjek, hvad din editor gemmer som)
2) din DB og tabeller er sat til utf8_danish_ci
3) din server sender dokumenterne som utf-8

set din db connection til utf-8 mysql
$conn = mysql_connect ("localhost", "root", "", true);    
if (! $conn) {   
    echo 'Der opsod en fejl';
    exit();
}
mysql_select_db("test") or die('Could not select database ');   
mysql_set_charset('utf8',$conn); // har ofte hjulpet
Avatar billede Asger Carlsen Nybegynder
15. juli 2012 - 16:38 #20
Hvad tænker du på når du siger kontrolleret? Det er stavet korrekt, hvis det er det du tænker på. Kan udskrive det som tekst (http://www.byg-ns.dk/test.php) Det er kun når den skriver det i <input>-feltet, at der er noget jeg ikke har lavet korret.

Min editor gemmer i utf-8.
Avatar billede olebole Juniormester
15. juli 2012 - 16:57 #21
Sorry, jeg skrev koden ovenfor lidt hurtigt og burde naturligvis have brugt success.

@coder_carl: Da du har problemer med specialtegn, er der noget i din opsætning, som er forkert - eller at de data, du har i din database, er forkert formateret (formateret i andet end utf-8).

Det, ronols mener med 'kontrolleret', er naturligvis, du skal kontrollere (= undersøge) de ting, han har nævnt.

Hvilket tegnsæt er din DB sat til at benytte? Det er du nødt til at være helt sikker på.

Hvilke kollationer er dine tabeller sat til? Det er du nødt til at være helt sikker på.

Kommer der data til dine tabeller udefra? Hvis det er tilfældet, hvad er disse data så formateret som - og hvad er oprindelsesdokumenterne gemt som? Det er du nødt til at være helt sikker på.

Selvom du på et tidspunkt har skiftet tegnsæt i DB'en - eller kollationer på tabellerne - betyder det ikke, at allerede bestående indhold bliver ændret. Er indholdet kodet som iso-8859-1, bliver det ikke ændret, ved at du skifter til utf-8.

Du bør faktisk heller ikke have brug for:

mysqli_set_charset($mysqli, "utf8");

- hvis alt er sat korrekt op, og data i databasen vel at mærke er indkodet korrekt.

Én ting er sikkert: Det roder på værkstedet  *o)
Avatar billede olsensweb.dk Ekspert
15. juli 2012 - 17:08 #22
prøvede lige at åbne http://www.byg-ns.dk/response.php, så kan jeg via side oplysninger i FF se den er ISO-8859-1 format.

gem response.php UTF-8 unden BOM
Avatar billede Asger Carlsen Nybegynder
15. juli 2012 - 17:17 #23
Rod er der i hvert fald :)

Som glad amatør koder man bare derudaf indtil tingene virker, så er man glad og tilfreds. Så går det bare galt når eksperterne begynder at kigge det efter i krogene. Har altid bare brugt standart kollisionen, og alt har været godt indtil nu. Nu bør det hele været sat korrekt sammen.

- og så alligevel. Så er der stadig lidt bøvl på min test-side: http://www.byg-ns.dk/test.php Nu er der bare byttet rundt på hvor den ikke vil acceptere specialtegnene. På selvesiden vil den dog gerne acceptere det hele. Kan jeg ikke lige se hvad der er galt på test-siden.

Nu jeg har lavet min DB om til utf8_danish_ci. Når jeg så går ind i DB'en via phpMyadmin, når jeg så kigger i tabellerne skriver den Værkstedet. Er det pga. jeg ændret kollisionen? og er det korrekt den skriver det sådan?
Avatar billede olebole Juniormester
15. juli 2012 - 17:22 #24
Kollisioner er præcist, hvad du har (mellem tegnsæt) - og det, du undgår ved at bruge de korrekte kollationer  *o)

"Nu jeg har lavet min DB om til utf8_danish_ci. Når jeg så går ind i DB'en via phpMyadmin, når jeg så kigger i tabellerne skriver den Værkstedet. Er det pga. jeg ændret kollisionen? og er det korrekt den skriver det sådan? "

Læs, hvad både ronols og jeg skriver:

"Selvom du på et tidspunkt har skiftet tegnsæt i DB'en - eller kollationer på tabellerne - betyder det ikke, at allerede bestående indhold bliver ændret. Er indholdet kodet som iso-8859-1, bliver det ikke ændret, ved at du skifter til utf-8."
Avatar billede Asger Carlsen Nybegynder
15. juli 2012 - 17:30 #25
#24 - Jeg slettede tabellen, og lavede en ny, med den korrekte opsætning, og indskrev data'en igen. Det lod også til umiddelbar at have løst problemet.

men hvordan styrer jeg hvordan indholdet er kodet?
Avatar billede olsensweb.dk Ekspert
15. juli 2012 - 17:36 #26
hvorfor har du denne linje 2 gange i din test.php ??
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="content-type" content="text/html; charset=utf-8">  <--- slet denne linje



og denne linje
<input id="myInput" type="text" name="navn" readonly/>

bør se sådan ud
<input id="myInput" type="text" name="navn" readonly="readonly" />
Avatar billede Asger Carlsen Nybegynder
15. juli 2012 - 17:40 #27
#26 - dobbelt-linien var for at om "/" gjorde nogen forskel. Min editor foreslog den skulle med, og så skulle jeg lige af ren nysgerrighed prøve om det gjorde en forskel. mht. readonly troede jeg man bare kunne skrive det som jeg havde gjort.
Avatar billede Asger Carlsen Nybegynder
15. juli 2012 - 17:44 #28
En sidste lille ting (i denne omgang i hvert fald) er når jeg kigger i min DB, ser mine data sådan her ud: http://www.byg-ns.dk/db.png

Hvilket også er det der udskrives på test.php Skal data laves om til utf-8 før de indsættes i DB'en?
Avatar billede olebole Juniormester
15. juli 2012 - 19:03 #29
Det er formodentlig phpMyAdmin, der er sat forkert op. Det er temmelig risikabelt at bruge den til at håndtere sine databaser med, da udbydere alt for ofte bare installerer uden at sørge for korrekt opsætning - og mange udviklere gør det heller ikke, når de installerer en lokal server
Avatar billede Asger Carlsen Nybegynder
16. juli 2012 - 09:13 #30
Så længe det virker på siden, så er det vel også ligegyldigt hvordan det ser ud i databasen. Så kan jeg vist heller ikke finde på mere at spørge om i denne omgang.

Ole kan jeg nok ikke stoppe nogle point ned i halsen på, så de går til .ronols
Avatar billede olebole Juniormester
16. juli 2012 - 10:14 #31
Så længe det virker på siden, så er det vel også ligegyldigt hvordan det ser ud i databasen. >> Ja, så længe du ikke indsætter data med phpMyAdmin og i det hele taget passer på, hvad du bruger den til, gør det måske ikke noget.

Og du har ret, jeg samler ikke  *o)
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