Avatar billede thomasfricke Juniormester
29. januar 2012 - 13:06 Der er 24 kommentarer

Java søgemaskine

Jeg har denne kode, men har nu lagt alle Array i en MySQL Database.

Hvordan for jeg scriptet til at hente oplysningerne?

<script language="JavaScript">
stelnr = new Array();
stelnr['VF1'] = "Renault";
stelnr['VF3'] = "Peugeot";
stelnr['YV1'] = "Volvo";

function findBrand() {
  nr = document.pnr.stel.value.substring(0,3);
  if (stelnr[nr]) {
      document.pnr.brand.value = stelnr[nr];
      udfyldt("stel");
  }
  }
</script>
Avatar billede Kaa85 Praktikant
29. januar 2012 - 14:18 #1
Titlen burde være JavaScript søgemaskine, da Java er et helt andet sprog ;-)

Mens javascript bliver afviklet på client siden, er MySql et serverside sprog, derfor kan du ikke direkte kommunikere mellem disse to. Dog kan du lave async (ajax) postbacks i javascript, så du på denne måde kan hente informationer fra serveren, uden at "refreshe" siden. Google "Ajax Javascript", så skal du nok kunne finde mange gode guides. Det er den "pæne" løsning.

En anden kunne være at "gemme" dit array i et skjult input felt på siden, som fyldes når denne indlæses. Herefter vil du kunne tilgå dette felt fra dit javascript.
Avatar billede olsensweb.dk Ekspert
29. januar 2012 - 14:33 #2
jeg vil mene AJAX er den rigtige løsning som Kaa85 også er inde på.

advarsel: en del ajax tut på netttet retunerer html formateret data, hvilkeer i modstrid med ajax princippet, ajax skal kun retunerer rå data, og man skal så behandle det js

@Kaa85 Google "Ajax Javascript", så skal du nok kunne finde mange gode guides. Det er den "pæne" løsning.
har du nogle eks på gode guides ??, jeg har kun set tut der misbruger ajax
Avatar billede heinzdmx Nybegynder
29. januar 2012 - 14:34 #3
Et eksempel på en løsning kan findes her:
http://www.w3schools.com/php/php_ajax_livesearch.asp

Personligt bruger jeg jQuery, som kan løses med:
http://www.finalwebsites.com/forums/topic/using-ajax-to-build-a-live-search

eller

http://www.technabled.com/2009/03/how-to-build-animated-ajax-search-with.html

Som Kaa85 nævner findes der utallige løsningsforslag på nettet, så hvis du ikke kan lide den ene, så er der masser af andre.

Vil ikke anbefale dig at bruge et skjult inputfelt til at have alle stelnumre i - specielt ikke hvis der er mange, det sløver din side unødvendigt
Avatar billede Kaa85 Praktikant
29. januar 2012 - 14:59 #4
Har ikke nogle konkrete eksempler nej, men da jeg selv skulle lære om Ajax (Udover det jeg fik at vide på skolebænken), synes jeg google, som sædvanligt, gav mig meget god information. Men det er jo som med alt andet, man skal være kritisk og ikke stole på informationer fra f.eks. kun en side.

Vil heller ikke anbefale et skjult felt på siden, men det er trods alt en løsning, der bliver anvendt rundt omkring. Men nej, hvis der skal gemmes/hentes stelnr, er det nok ikke den vej man skal gå.
Avatar billede olebole Juniormester
29. januar 2012 - 16:33 #5
<ole>

@heinzdmx: w3schools.com er et af WWW's allermindst troværdige sites om webkode. Det skader mere end det nogensinde har gavnet og burde ikke linkes til på seriøse sider.

Hans såkaldte 'Ajax tutorial' er således skoleeksemplet på, hvordan Ajax ikke bruges. Den har stort set intet med Ajax at gøre!

Det tredie link viser en fremgangsmåde, der ikke kan være mere ineffektiv. Det er ikke bare komplet misforstået Ajax - men også generelt elendig PHP-kode!

Ja, der er oceaner af eksempler på nettet at vælge imellem. Problemet er bare at finde noget, der er skrevet af en, der faktisk kan kode

/mvh
</bole>
Avatar billede thomasfricke Juniormester
29. januar 2012 - 19:28 #6
#olebole.

Kan du den rigtige kode?, og vil du hjælpe mig med at sætte den sammen til noget brugbart?
Avatar billede thomasfricke Juniormester
29. januar 2012 - 19:28 #7
Og tak for alles komentarer :)
Avatar billede olebole Juniormester
29. januar 2012 - 21:10 #8
Der er en hel del at lære omkring Ajax i forhold til, hvad en E-tråd kan rumme, men helt skrabet kan du skrive dette i HTML-filen:

<script type="text/javascript">
function getBrand() {
    var oXHR = new XMLHttpRequest(),
    nr = document.pnr.stel.value.substring(0,3),
    sQuery = "context=get_brand&nr="+encodeURIComponent(nr);
    oXHR.open("post", "http://domain.dk/response.php", true);
    oXHR.setRequestHeader("Content-Type: application/x-www-form-urlencoded; charset=utf-8");
    oXHR.onreadystatechange = function() {
        if (this.readyState<4) return;
        insertBrand(this.responseText);
    }
    oXHR.send(sQuery);
}
function insertBrand(sJson) {
    var obj = null;
    try {
        obj = JSON.parse(sJson);
    }
    catch(e){};
    if (obj) {
        if (obj.error) {
            alert(obj.error);
            return;
        }
        alert(obj.brand);
    }
}
</script>

- og i response.php kan du skrive:

<?php
/*      Different functions for different tasks      */

function getBrand() {
    $res = [MYSQL_QUERY SELECT WHERE ? = $_POST['nr']];
    return $res;
}

/* ***************  Functions End  ***************** */

header('Content-Type: application/json; charset=utf-8');
$json = new stdClass();

if (!empty($_POST)) {
    if (isset($_POST['context'])) {
        switch ($_POST['context']) {
            case 'get_brand':
                $json->brand = getBrand();
            break;
            default:
                $json->error = '';
        }
    }
    else $json->error = 'No context ID found.';
}
else $json->error = 'No POST variables found.';

$sJson = json_encode($json);
header('Content-Length: '.strlen($sJson));

echo $sJson;
?>

Så kan du selv føje flere cases til switch'en med tilhørende funktioner. Desuden kan du selv udbygge fejlhåndteringen, så evt. MySQL-fejl også kan aflæses på klienten, hvis du ønsker.

I det hele taget er dette som sagt et yderst skrabet eksempel. God Ajax kræver, du er rigtig god i HTML, JavaScript, DOM, CSS og et serversprog.
Avatar billede olebole Juniormester
29. januar 2012 - 21:12 #9
- skrevet 'fra hoften' og aldeles utestet, så fejl kan ikke helt udelukkes  =)
Avatar billede olebole Juniormester
29. januar 2012 - 21:14 #10
Der skulle f.eks. stå:

            default:
                $json->error = 'Unknown context ID.';
Avatar billede thomasfricke Juniormester
29. januar 2012 - 21:19 #11
Takker, ser på det imorgen...
Avatar billede thomasfricke Juniormester
30. januar 2012 - 20:08 #12
<script type="text/javascript">
function getBrand() {
    var oXHR = new XMLHttpRequest(),
    nr = document.pnr.stel.value.substring(0,3),
    sQuery = "context=get_brand&nr="+encodeURIComponent(nr);
    oXHR.open("post", "http://******.dk/test/response.php", true);
    oXHR.setRequestHeader("Content-Type: application/x-www-form-urlencoded; charset=utf-8");
    oXHR.onreadystatechange = function() {
        if (this.readyState<4) return;
        insertBrand(this.responseText);
    }
    oXHR.send(sQuery);
}
function insertBrand(sJson) {
    var obj = null;
    try {
        obj = JSON.parse(sJson);
    }
    catch(e){};
    if (obj) {
        if (obj.error) {
            alert(obj.error);
            return;
        }
        alert(obj.brand);
    }
}
</script>

<form name="pnr">
    <input type="text" name="stel" value="VF37ALFYE" onblur="getBrand()">
    <br>
    <input type="text" name="type" value="">
</form>


og

response.php
<?php
$db_username="***"; //Brugernavn...
$db_password="***"; //Kode...
$db_database="***"; //Database...

$connection = mysql_connect('******.dk.mysql',$db_username,$db_password); //Logger på server...
@mysql_select_db($db_database) or die(mysql_error()); //Kontakter Database...

/*      Different functions for different tasks      */

function getBrand() {
    $res = [MYSQL_QUERY SELECT vin_brand WHERE vin = $_POST['nr']];
    return $res;
}

/* ***************  Functions End  ***************** */

header('Content-Type: application/json; charset=utf-8');
$json = new stdClass();

if (!empty($_POST)) {
    if (isset($_POST['context'])) {
        switch ($_POST['context']) {
            case 'get_brand':
                $json->brand = getBrand();
            break;
            default:
                $json->error = '';
        }
    }
    else $json->error = 'No context ID found.';
}
else $json->error = 'No POST variables found.';

$sJson = json_encode($json);
header('Content-Length: '.strlen($sJson));

echo $sJson;
?>


Der sker ikke noget, og hvis jeg kører response.php alene. er der fejl i denne linje...
$res = [MYSQL_QUERY SELECT vin_brand WHERE vin = $_POST['nr']];


Fejl koden lyder:
Parse error: syntax error, unexpected '[' in /****/***.dk/cramersauto.dk/httpd.www/kontor/test/response.php on line 12
Avatar billede olebole Juniormester
30. januar 2012 - 20:31 #13
Ja, naturligvis fejler den linje. Det er jo pseudokode  =)

Det er selvfølgelig meningen, du skal lave en MySQL forespørgsel. Jeg kan umuligt have indsigt i din databases opbygning, så det er kun dig, der ved, hvordan det skal gøres
Avatar billede thomasfricke Juniormester
30. januar 2012 - 20:37 #14
Hmm, men okay...
Hvis jeg nu siger:

SELECT vin, brand(*) FROM `vin_brand`

Kan du så hjælpe lidt mere..
Avatar billede olebole Juniormester
30. januar 2012 - 20:44 #15
Nej, jeg kan ikke se, det, du skriver, giver mening. Kan du ikke lave et alm. select statement?
Avatar billede thomasfricke Juniormester
30. januar 2012 - 20:48 #16
$query = "SELECT vin, brand FROM vin_brand WHERE vin='stel.value';
Avatar billede olebole Juniormester
30. januar 2012 - 20:57 #17
$query = "SELECT vin, brand FROM vin_brand WHERE vin='stel.value'";
$res = mysql_query($query);
$arrRet = array();
while ($row=mysql_fetch_object($res)) {
    $arrRet[$row];
}

- og så lader du funktionen rturnere $arrRet
Avatar billede olebole Juniormester
30. januar 2012 - 20:58 #18
Ooooops ... =)

while ($row=mysql_fetch_object($res)) {
    $arrRet[] = $row;
}
Avatar billede thomasfricke Juniormester
30. januar 2012 - 21:10 #19
/*      Different functions for different tasks      */

function getBrand() {
    $query = "SELECT vin, brand FROM vin_brand WHERE vin='pnr.stel.value'";
    $res = mysql_query($query);
    $arrRet = array();
while ($row=mysql_fetch_object($res)) {
    $arrRet[] = $row;
}

/* ***************  Functions End  ***************** */

header('Content-Type: application/json; charset=utf-8');
$json = new stdClass();

if (!empty($_POST)) {
    if (isset($_POST['context'])) {
        switch ($_POST['context']) {
            case 'get_brand':
                $json->brand = getBrand();
            break;
            default:
                $json->error = '';
        }
    }
    else $json->error = 'No context ID found.';
}
else $json->error = 'No POST variables found.';

$sJson = json_encode($json);
header('Content-Length: '.strlen($sJson));

echo $sJson;
?>


og der er i starten.
<?


men alligevel:
Parse error: syntax error, unexpected $end in *** on line 45 (sidste linje)
Avatar billede thomasfricke Juniormester
30. januar 2012 - 21:13 #20
Burde WHERE vin='pnr.stel.value'
ikke være med $_POST ?
Avatar billede olebole Juniormester
30. januar 2012 - 21:19 #21
Jo, det ville nok være en rigtig god idé. Du må få en fejl længe før. Jeg kan i hvertfald ikke se, du slutter funktionen noget sted.

Måske, det var bedre, om du en tid endnu koncentrerer dig om helt grundlæggende programmerings principper?
Avatar billede thomasfricke Juniormester
30. januar 2012 - 21:28 #22
Ved godt jeg ikke er nogen haj, og ja bør nok vide mere på grundniveu. Men lige pt. har jeg brug for hjælp :)

Er sendte kode, helt ude i hampen ?
Avatar billede olebole Juniormester
30. januar 2012 - 21:39 #23
Jamen, det er ikke realistisk. Ajax er en kompleks teknik, og det er nødvendigt at have rigtig godt styr på HTML, JavaScript, XMLHttpRequest, DOM og CSS - foruden et serversprog og et database sprog. Derudover er det vigtigt, du kan håndtere XML eller JSON.

P.t. har du helt tydeligt mest brug for at lære noget grundlæggende i ovennævnte teknologier
Avatar billede thomasfricke Juniormester
02. februar 2012 - 00:04 #24
Har oprettet ny spgm, nogen foreslag til bog om dette.
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