Error: c00ce56e IE - Ajax, Php
Sziasztok!
Rengeteget olvastam és kerestem a neten de nem jutottam elörébb a problémámal!
Szóval van az oldalnak amin dolgozok egy regisztrációt aktiváló része, ahol meg kell adni a lakhelyet is. Ezt szeretném úgy megoldani hogy egy select elemben benne vannak a megyék és ha választ egy megyét akkor az alatta lévö select elemben már csak az adott megyéhez tartozó települések lennének. Nos az oldalon lightboxos fénykép galéria van így prototype-al próbálkoztam!
A city.php tartalma:
Nos FF, Opera és Chorme alatt kifogástalanul müködik! Viszont az IE c00ce56e hibával megáll és nem hozza a megyéhez tartozó településeket!
Olvastam neten hogy ez karakterkódolási probléma miatt van az oldal és az adatbázis is UTF-8. Számtalan módon próbálkoztam már, de valahogy nem jutottam eredményre.
Ez talán még segíthet a probléma felderítésében az IE azt írja hogy a prototype 1362-es sorában van a hiba!
Az 1362-es sor a:
Várom mielöbbi segítségetek! Elöre is köszönöm!
■ Rengeteget olvastam és kerestem a neten de nem jutottam elörébb a problémámal!
Szóval van az oldalnak amin dolgozok egy regisztrációt aktiváló része, ahol meg kell adni a lakhelyet is. Ezt szeretném úgy megoldani hogy egy select elemben benne vannak a megyék és ha választ egy megyét akkor az alatta lévö select elemben már csak az adott megyéhez tartozó települések lennének. Nos az oldalon lightboxos fénykép galéria van így prototype-al próbálkoztam!
<script type="text/javascript">
function dynamic_select_city() {
var sId = document.getElementById("megyeId").value;
var oOptions = {
method: "GET",
parameters: "id=" + sId
};
var oRequest = new Ajax.Updater("varosok", "files/city.php", oOptions);
}
</script>
<select name="megye" id="megyeId" onChange="dynamic_select_city()" style="width:180px">
<option value="0">Válassz!</option>
<?php
$megyek = @mysql_query('SELECT * FROM megyek');
while ($egy_sor = @mysql_fetch_array($megyek)) {
print('<option value="'.$egy_sor['MegyeID'].'">'.$egy_sor['MegyeNev'].'</option>');
}
?>
</select>
<select name="varos" id="varosok" style="width:180px">
<option value="0">Válassz megyét...</option>
</select>
function dynamic_select_city() {
var sId = document.getElementById("megyeId").value;
var oOptions = {
method: "GET",
parameters: "id=" + sId
};
var oRequest = new Ajax.Updater("varosok", "files/city.php", oOptions);
}
</script>
<select name="megye" id="megyeId" onChange="dynamic_select_city()" style="width:180px">
<option value="0">Válassz!</option>
<?php
$megyek = @mysql_query('SELECT * FROM megyek');
while ($egy_sor = @mysql_fetch_array($megyek)) {
print('<option value="'.$egy_sor['MegyeID'].'">'.$egy_sor['MegyeNev'].'</option>');
}
?>
</select>
<select name="varos" id="varosok" style="width:180px">
<option value="0">Válassz megyét...</option>
</select>
A city.php tartalma:
<?php
header('Content-Type', 'text/html; charset=UTF-8');
$kapcsolat = @mysql_connect('localhost', 'xxx', 'xxx');
if ($kapcsolat) {
@mysql_select_db('xxx');
if (array_key_exists('id', $_GET)) {
if ($_GET['id'] == 0) {
print('<option value="0">Válassz megyét...</option>');
}
else {
$varosok = @mysql_query('SELECT * FROM varosok WHERE MegyeID = \''.$_GET['id'].'\'');
print('<option value="0">Válassz!</option>');
while ($egy_sor = @mysql_fetch_array($varosok)) {
print('<option value="'.$egy_sor['VarosID'].'">'.$egy_sor['VarosNev'].'</option>');
}
}
}
}
?>
header('Content-Type', 'text/html; charset=UTF-8');
$kapcsolat = @mysql_connect('localhost', 'xxx', 'xxx');
if ($kapcsolat) {
@mysql_select_db('xxx');
if (array_key_exists('id', $_GET)) {
if ($_GET['id'] == 0) {
print('<option value="0">Válassz megyét...</option>');
}
else {
$varosok = @mysql_query('SELECT * FROM varosok WHERE MegyeID = \''.$_GET['id'].'\'');
print('<option value="0">Válassz!</option>');
while ($egy_sor = @mysql_fetch_array($varosok)) {
print('<option value="'.$egy_sor['VarosID'].'">'.$egy_sor['VarosNev'].'</option>');
}
}
}
}
?>
Nos FF, Opera és Chorme alatt kifogástalanul müködik! Viszont az IE c00ce56e hibával megáll és nem hozza a megyéhez tartozó településeket!
Olvastam neten hogy ez karakterkódolási probléma miatt van az oldal és az adatbázis is UTF-8. Számtalan módon próbálkoztam már, de valahogy nem jutottam eredményre.
Ez talán még segíthet a probléma felderítésében az IE azt írja hogy a prototype 1362-es sorában van a hiba!
if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
this.status = this.getStatus();
this.statusText = this.getStatusText();
this.responseText = String.interpret(transport.responseText);
this.headerJSON = this._getHeaderJSON();
}
this.status = this.getStatus();
this.statusText = this.getStatusText();
this.responseText = String.interpret(transport.responseText);
this.headerJSON = this._getHeaderJSON();
}
Az 1362-es sor a:
this.headerJSON = this._getHeaderJSON();
Várom mielöbbi segítségetek! Elöre is köszönöm!
php
default_charset = "UTF-8"-ra.
Mellesleg megjegyzem csinálhatod akár jqueryben is csak add meg a noconflictot.
re:php
Biztonság
Re: Biztonság
Ha megkérnélek kicsit kifejtenéd mire is gondolsz?
Előre is köszönöm
Re: Biztonság
Persze. Valószínűleg mind így kezdjük, de nagyon fontos, tisztában legyél a biztonság témakörével onnantól, hogy felhasználók adatainak gyűjtésbe kezdesz.
Itt a válaszban szereplő linkek közül legalább a Security témakört érdemes lenne átnézned.
http://stackoverflow.com/questions/72394/what-should-a-developer-know-before-building-a-public-web-site
Esetünkben:
Mi történik az oldaladdal, ha a az alábbi paramétert adom át neki a GET-ben?
Szerintem ki fogja szépen listázni az összes táblát az adatázisszervereden. De gyakorlatilag bármilyen lekérdezést betehetek ide, és úgy válogatok az adatok között a szervereden, ahogy akarok :)
(nyilván nem teszteltem az oldaladon, ha elszúrtam a lekérdezést, a sebezhetőség attól még valós!)
Az alapvető szabály az, hogy minden, a felhaszálótól érkező adatot veszélyesnek kell tekintened és eképpen kezelned. Jelen esetben a get paraméter egésszé kovertálásával (intval) vagy escape-elésvel (mysql_real_escape_string).
Egy kis biztonsági help
class DataFormat
Elég jó szolgálatot tett anno. Igaz angolul, de szerintem remekül fel van kommentezve, így könnyű megérteni mit miért csinál. Volt egy újabb verziója is, ami telefonszám validátort is tartalmazott, de azt sajnos nem találtam meg. Illetve az email csak formai ellenőrzés, MX rekord ellenőrzést még nem tartalmaz. De kiindulásnak ez is jó.
Példa a használatra:
Thx
Mégegyszer nagyon köszönöm! :)
Little Bobby Tables
Módosított city.php
$kapcsolat = @mysql_connect('localhost', 'xxx', 'xxx');
if ($kapcsolat) {
@mysql_select_db('xxx');
if (array_key_exists('id', $_GET)) {
$id = intval($_GET['id']);
if ($id == 0) {
?>
<option value="0">Válassz megyét...</option>
<?php
}
else {
$varosok = @mysql_query('SELECT * FROM varosok WHERE MegyeID = \''.$id.'\'');
?>
<option value="0">Válassz!</option>
<?php
while ($egy_sor = @mysql_fetch_array($varosok)) {
?>
<option value="<?php print($egy_sor['VarosID']); ?>"><?php print($egy_sor['VarosNev']); ?></option>
<?php
}
}
}
@mysql_close($kapcsolat);
}
?>
igy hogy most az GET id-t egésszé konvertálom így biztosítom hogy csak egész szám lehet a bemenete....
Jól értelmezem? :)
intval