Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Ajax ääkkös ongelma

Sivun loppuun

laurii [27.07.2010 12:39:32]

#

Hei, olen väsäillyt ajax hakua joka siis hakee reaaliaikaisesti dataa mysql:ästä, olen onnistuneesti saanut koodin hakemaan ääkköset mysql:ästä, mutta jos laitan haku lomakkeeseen jonkun ääkkösen se ei löydä yhtään tulosta. Haun teen käyttäen jqueryä apuna.

Uskon että tätä on kysytty ennenkin mutta en löytänyt haulla heti mitään tähän viittaavaa.

Ja sanokaa jos tarvitsette koodia.

pake10 [27.07.2010 12:47:33]

#

Luultavasti tiedon hakevassa koodissa on virhe. Koodia voisit laittaa, nyt on vähän paha sanoa mitään.

laurii [27.07.2010 13:02:33]

#

function lookup(inputString) {
		if(inputString.length == 0) {
			// Hide the suggestion box.
			$('#suggestion').show();
			$('#suggestions').hide();
		}
		else {
			$.post("js/kuntot.php", {queryString: escape(""+inputString+"")}, function(data){
				if(data.length >0) {
				$('#suggestion').hide();
					$('#suggestions').show();
					$('#autoSuggestionsList').html(data);
				}
			});
		}
	}
<input type="text" size="30" name = "inputString" value="<?php echo $string;?>" id="inputString" onkeyup="lookup(this.value);" />
<div class="suggestionsBox" id="suggestions" style="display: none;">
<div class="suggestionList" id="autoSuggestionsList">
&nbsp;
</div>
</div>
<?php
 header('Content-type: text/plain; charset=ISO-8859-1');
	$db = new mysqli('localhost', 'blö' ,'blö', 'www');
	if(!$db) {
		echo 'Ei tietokanta yhteyttä';
	} else {
		if(isset($_POST['queryString'])) {
			$queryString = $db->real_escape_string($_POST['queryString']);
			if(strlen($queryString) >0) {

				$query = $db->query("SELECT otsikko FROM kuntot WHERE otsikko LIKE '%$queryString%' LIMIT 20");
				if($query) {

					while ($result = $query ->fetch_object()) {
	         			echo '<div>'.$result->otsikko.'</div>';
	         		}
				} else {

				}
			} else {

			}
		} else {
			echo 'Back off!';
		}
	}
?>

Metabolix [27.07.2010 13:21:14]

#

AJAX-pyynnössä ääkköset kulkevat UTF-8-enkoodattuina. Kaikkein järkevin vaihtoehto olisi muuttaa sivut kokonaan UTF-8-enkoodaukseen, mutta jos tämä ei jostain syystä käy päinsä, joudut vain aina AJAX-pyyntöä käsittelevillä sivuilla muuttamaan pyynnön datan käyttämääsi ISO-8859-1-enkoodaukseen funktiolla iconv tai utf8_decode.

laurii [27.07.2010 13:30:24]

#

onko ideoita miten tuon voisin pistää, logiikkani mukaan sen pitöisi olla tuossa mutta lopputulos on sama..

	$queryString = $db->real_escape_string($_POST['queryString']);
			  $queryString = utf8_decode($queryString);

Metabolix [27.07.2010 13:58:07]

#

Oho, suurempi virhe olikin toisessa paikassa. Älä käytä itse escape-funktiota, koska jQuery (tai melkein mikä tahansa muukin AJAX-kirjasto) hoitaa tämän puolestasi.

Jos olisit käyttänyt normaaleja debug-menetelmiä eli tulostanut echolla, mitä teksti PHP-skriptissä sisältää, olisit heti itsekin huomannut tämän.

laurii [27.07.2010 14:15:59]

#

otin tuon pois, mutta ei korjannut tätä ongelmaa tuo

Metabolix [27.07.2010 14:24:23]

#

No mitä jos sitten noudattaisit ehdotusta eli tutkisit echolla, mitä tuolla PHP-puolella oikeasti tapahtuu?

laurii [28.07.2010 11:59:24]

#

nyt on kokeiltu echottamista ja echottaa näitä hienoja ä merkkejä, koitin str replacella muuttaa noita mutta ei auttanut

B_R_H [28.07.2010 12:13:39]

#

Voisikos olla kyseessä tämä sama, jonka piirissa joskus puuhastelin?
https://www.ohjelmointiputka.net/keskustelu/19966-ajax-skandit-parametririvillä

laurii [28.07.2010 12:45:15]

#

tällä hetkellä miniulla on sillätavoin että kanta on utf-8 unicodena, kaikki sieltä hakevat tiedostot ovat myös utf-8, kirjaimet näkyvät oikein kannasta haettavaa dataa lukuun ottamatta.

Metabolix [28.07.2010 13:32:02]

#

Kuten sanoin, helpointa olisi muuttaa koko järjestelmä UTF-8:ksi ja myös asettaa tietokantayhteyden merkistö ($db->set_charset("utf8")) heti yhdistämisen jälkeen. Käytetystä merkistöstä riippumatta on yleensä huono idea sekoittaa eri merkistöjä järjestelmän eri osissa, ja AJAXin kanssa tämä tarkoittaa, että UTF-8 on viisain valinta.

pistemies [28.07.2010 13:52:12]

#

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

pistemies [28.07.2010 20:08:53]

#

Hoksasin ihan mielenkiintoisen jutun, kun kannassa ääkköset on utf-8 muodossa, niin tämä toimii ainakin minulla:

 echo utf8_encode(utf8_decode($row['teksti']));

Teuro [28.07.2010 20:33:32]

#

Pekka Mansikka kirjoitti:

 echo utf8_encode(utf8_decode($row['teksti']));

No mutta eihän tuossa ole mitään tolkkua. enkoodaat dekoodatun tekstin ja tulostat sen. Minusta tuon pitäisi toimia identtisesti, jos nuo muunnosfunktiot jättää pois.

pistemies [28.07.2010 21:56:40]

#

Joo :)

laurii [29.07.2010 10:52:10]

#

Kiitos kaikille avusta, homma selvisi :)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta