Oprettet lør. d. 14. juli 2012 kl. 16:51:16

coder_carl
coder_carl (10.240 point. Point ude: 100)

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?

Skrevet lør. d. 14. juli 2012 kl. 17:05:27| #1

olebole
olebole (216.738 point)
<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>

Skrevet lør. d. 14. juli 2012 kl. 17:13:18| #2

ronols
ronols (24.871 point)
olsensweb.dk/
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

Skrevet lør. d. 14. juli 2012 kl. 17:17:45| #3

coder_carl
coder_carl (10.240 point)
#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.

Skrevet lør. d. 14. juli 2012 kl. 17:24:38| #4

olebole
olebole (216.738 point)
<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;
}
?>

Skrevet lør. d. 14. juli 2012 kl. 17:31:18| #5

olebole
olebole (216.738 point)
- 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>

Skrevet lør. d. 14. juli 2012 kl. 17:35:00| #6

coder_carl
coder_carl (10.240 point)
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>? :)

Skrevet lør. d. 14. juli 2012 kl. 17:36:49| #7

olebole
olebole (216.738 point)
1) Ja

2) Nej, det må også stå i BODY - hvor du har lyst

Skrevet lør. d. 14. juli 2012 kl. 17:38:33| #8

coder_carl
coder_carl (10.240 point)
Så havde jeg da gjort det rigtigt. Min <input> forbliver tom når jeg ændrer i <select>'en.

Skrevet lør. d. 14. juli 2012 kl. 17:39:17| #9


Skrevet lør. d. 14. juli 2012 kl. 17:45:15| #10

coder_carl
coder_carl (10.240 point)
Er min MySQL-forespørgsel korrekt udfyldt?
name = [mysql_query("select navn from sager where nr='$num'")];

Skrevet lør. d. 14. juli 2012 kl. 17:55:48| #11

olebole
olebole (216.738 point)
Nej, de firkantede brackets var bare for at tydeliggøre, det var pseudokode. De skal naturligvis fjernes  =)

Skrevet lør. d. 14. juli 2012 kl. 17:59:48| #12

olebole
olebole (216.738 point)
- 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)

Skrevet søn. d. 15. juli 2012 kl. 11:49:41| #13

coder_carl
coder_carl (10.240 point)
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/ (...)
<html xmlns="http://www.w3.org/ (...) 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/ (...)

<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.

Skrevet søn. d. 15. juli 2012 kl. 11:57:01| #14

ronols
ronols (24.871 point)
olsensweb.dk/
@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/ (...) blot til inspiration

Skrevet søn. d. 15. juli 2012 kl. 12:15:55| #15

coder_carl
coder_carl (10.240 point)
#14 -> Ole's eksempel virker hvis jeg fjerner de 2 headere i reponse.php som du sagde. -> http://www.byg-ns.dk/ (...)


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.

Skrevet søn. d. 15. juli 2012 kl. 12:33:29| #16

ronols
ronols (24.871 point)
olsensweb.dk/
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/ (...)
You should use done, success is being deprecated in jQuery 1.8:

Skrevet søn. d. 15. juli 2012 kl. 12:45:18| #17

ronols
ronols (24.871 point)
olsensweb.dk/
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

Skrevet søn. d. 15. juli 2012 kl. 12:52:31| #18

coder_carl
coder_carl (10.240 point)
Collation:    utf8_danish_ci

CONNECTION. Hvad er det? - Vil mene værkstedet står korrekt.

Skrevet søn. d. 15. juli 2012 kl. 13:24:31| #19

ronols
ronols (24.871 point)
olsensweb.dk/
>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/ (...) #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

Skrevet søn. d. 15. juli 2012 kl. 16:38:36| #20

coder_carl
coder_carl (10.240 point)
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/ (...)) 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.

Skrevet søn. d. 15. juli 2012 kl. 16:57:57| #21

olebole
olebole (216.738 point)
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)

Skrevet søn. d. 15. juli 2012 kl. 17:08:22| #22

ronols
ronols (24.871 point)
olsensweb.dk/
prøvede lige at åbne http://www.byg-ns.dk/ (...), så kan jeg via side oplysninger i FF se den er ISO-8859-1 format.

gem response.php UTF-8 unden BOM

Skrevet søn. d. 15. juli 2012 kl. 17:17:03| #23

coder_carl
coder_carl (10.240 point)
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/ (...) 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?

Skrevet søn. d. 15. juli 2012 kl. 17:22:06| #24

olebole
olebole (216.738 point)
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."

Skrevet søn. d. 15. juli 2012 kl. 17:30:51| #25

coder_carl
coder_carl (10.240 point)
#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?

Skrevet søn. d. 15. juli 2012 kl. 17:36:13| #26

ronols
ronols (24.871 point)
olsensweb.dk/
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" />

Skrevet søn. d. 15. juli 2012 kl. 17:40:46| #27

coder_carl
coder_carl (10.240 point)
#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.

Skrevet søn. d. 15. juli 2012 kl. 17:44:01| #28

coder_carl
coder_carl (10.240 point)
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/ (...)

Hvilket også er det der udskrives på test.php Skal data laves om til utf-8 før de indsættes i DB'en?

Skrevet søn. d. 15. juli 2012 kl. 19:03:14| #29

olebole
olebole (216.738 point)
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

Skrevet man. d. 16. juli 2012 kl. 09:13:10| #30

coder_carl
coder_carl (10.240 point)
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

Skrevet man. d. 16. juli 2012 kl. 10:14:54| #31

olebole
olebole (216.738 point)
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)

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

Hjælp til verificering af FORM // JavaScript

Oprettet den 22. maj 2013 kl. 15.22
snestrup2000 giver 45 point for svar | Giv et svar »

JQuery skal hente indhold via AJAX

Oprettet den 21. maj 2013 kl. 12.51
cmplicity giver 60 point for svar | Giv et svar »

Første ID er tom ?

Oprettet den 11. maj 2013 kl. 11.54
ingeman giver 200 point for svar | Giv et svar »

Seneste guides

Slettet
Håndtering af tekstoversættelse i...
Parameteriseret tekstformatering i C#
C++ Historie og Programmering - Del 1







Tips & Tricks fra PC World

Teaser billede

Her er seks Google Labs-funktioner, som du skal slå til med det samme

Gmail Labs giver dig adgang til en masse smarte funktioner, som Googles ingeniører leger med i øjeblikket.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du få 1 terabyte gratis plads hos Flickr

Yahoo har relanceret sin fototjeneste Flickr med 1 terabyte gratis plads til brugernes billeder og videoer.


Nyheder fra Computerworld

Teaser billede

Galleri: Her er de vigtigste programmører

Computerhistorien har fra hulkort til JavaScript været drevet frem af mange forskellige typer programmører. Se de vigtigste typer her. Er du en af dem?


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger