Nyitólap | Regisztráció | Kapcsolat | English |   
  
PHP-Nuke PHP-Nuke
PHP-Nuke Portál :: Téma megtekintése - MySQL-ból lekért adat karakterkódolása
 Gy.I.K.Gy.I.K.   KeresésKeresés   CsoportokCsoportok   ProfilProfil   Üzeneteid olvasásához jelentkezz beÜzeneteid olvasásához jelentkezz be   BelépésBelépés 




Mielőtt feltennéd a kérdésed, kérlek használd a Fórum keresőjét! Lehet, hogy a kérdés már szerepel a fórumban és meg is van válaszolva.
Hozzászólásodban ne használd a <javascript></javascript> valamint <SCRIPT></SCRIPT> html tag-eket, módosítva használd pl.: <javas*cript>

MySQL-ból lekért adat karakterkódolása

 
Új téma nyitása   Hozzászólás a témához    Tartalomjegyzék -> Blokkok
Előző téma megtekintése :: Következő téma megtekintése  
Szerző Üzenet
Ultramano
Új NukeR
Új NukeR


Csatlakozott: Apr 15, 2006
Hozzászólások: 17


HozzászólásElküldve: 2008. Augusztus 3. Vasárnap, 21:16    Hozzászólás témája: MySQL-ból lekért adat karakterkódolása Hozzászólás az előzmény idézésével

Üdv.

Nem rég írtam egy blokkot, amelybe az adatbázisból hívnék le adatokat, általam készített táblákból. A gond ott kezdődik, hogy Latin2-es karakterkódolással találhatóak az adatok a mezőkben, viszont miután lekérem őket az oldalra az latin1-esben jelennek meg, így az ű és ő betűk is csak kérdőjeleket íratnak ki. Hogy tudnám elérni, hogy Latin2-es kódolás maradjon a lekérés után is?

A válaszokat előre köszönöm.

A kódom a következő:
Kód:

<?php

include "../config.php";
$kapcsolat = mysql_connect($dbhost, $dbuname, $dbpass);
mysql_select_db($dbname);

$parancs = "SELECT id, idezet FROM sp";
$valasz = mysql_query($parancs);
$idezet_szam = mysql_num_rows($valasz);

$id = rand(1, $idezet_szam);

$parancs = "SELECT idezet FROM sp WHERE id = '$id'";
$valasz = mysql_query($parancs);
$sor = mysql_fetch_array($valasz);

if ($sor[idezet] != NULL)
   {
      $content = "<center>$sor[idezet]<br><br>Jelenleg <b>$idezet_szam</b> idézetünk van!</center>";
   }
else
   {
      $content = "<center>Jelenleg nem található idézet az adatbázisban.</center>";
   }

?>
Vissza az elejére
Felhasználó profiljának megtekintése Privát üzenet küldése MSN Messenger
Tivadar
Új NukeR
Új NukeR


Csatlakozott: Nov 24, 2004
Hozzászólások: 19
Tartózkodási hely: Érd


HozzászólásElküldve: 2008. Augusztus 8. Péntek, 13:07    Hozzászólás témája: : MySQL-ból lekért adat karakterkódolása Hozzászólás az előzmény idézésével

Esetleg ez segíthet, a mysql_connect() alá tedd.

Kód:
mysql_query("set names latin2");
mysql_query("set character set latin2");


Ezen kívül befolyásolhatja még, hogy a blokk fájl nem ansi, hanem utf-8 kódolású, illetve közrejátszhat még az oldal karakter készlet beállítása is.
Vissza az elejére
Felhasználó profiljának megtekintése Privát üzenet küldése Email küldése Felhasználó weblapjának megtekintése MSN Messenger
Ultramano
Új NukeR
Új NukeR


Csatlakozott: Apr 15, 2006
Hozzászólások: 17


HozzászólásElküldve: 2008. Augusztus 9. Szombat, 20:56    Hozzászólás témája: : MySQL-ból lekért adat karakterkódolása Hozzászólás az előzmény idézésével

Nagyon szépen köszönöm, megoldódott a problémám.
Vissza az elejére
Felhasználó profiljának megtekintése Privát üzenet küldése MSN Messenger
earthquaker
Új NukeR
Új NukeR


Csatlakozott: Nov 05, 2008
Hozzászólások: 5


HozzászólásElküldve: 2008. November 5. Szerda, 19:35    Hozzászólás témája: : MySQL-ból lekért adat karakterkódolása Hozzászólás az előzmény idézésével

Hali!

Rátaláltam erre a rövid párbeszédre és meg is örültem neki, kipróbáltam a javaslatot és működött is, de egyből jelentkezett egy másik probléma is:

a kódom (majd be is szúrok részleteket) az alábbiak szerint működik:
1) lekérdezem egy táblázatból egy termékkategória nevét.
//eddig itt volt a fenti hiba, miszerint az űő helyett ? jelent meg, amikor ezt kilistáztam. A két említett parancs ezt megoldotta. Ez után jött a gond.

2) a felhasználó 1 legördülő menüből kiválasztja a neki megfelelő kategóriát, majd egy gomb megnyomásával nyugtázza azt.

3) egy újabb lekérdezés segítségével megtudom a kategória leírását és azt is kiírom az oldalra.
//ezt a lekérdezést küldi el a mysql szervernek a php: SELECT leiras FROM `termek_kategoria` WHERE nev = "körfűrész".

4)És itt van a gond: nem jelez hibát a mysql, de nem is talál megfelelő sort, miközben, ha olyan értéket keresek, amiben nincsen űő, akkor semmi gond nincsen.

És akkor a kódrészletek, bár nem tudom, mennyire befolyásolják az érthetőséget:

1. A html/php kód, ami a kiírásokért felelős:

Kód:

            $options = getMultipleRowsMySQL('nev','termek_kategoria','','','','');
            echo '
               <tr>
                  <td class="formLeft">Kategória*:</td>
                  <td class="formRight">
            ';
            createOptionsTAG('category','Új kategória',count($options)/2,$options);
            echo '
                     <input class="button" type="submit" name="categorySubmit" value="OK" />
                  </td>
               </tr>
            ';
            if(isset($_SESSION['newItemData']['category']))
              if($_SESSION['newItemData']['category'] == 'Új kategória')
                  {
                   echo '
       <tr><td colspan="2">   
         <table class="sub">
                  <tr>
                     <td class="formLeft">Az új kategória*:</td>
                     <td class="formRight"><input name="newCategory" type="text" /></td>
                  <tr>   
                  <tr>
                     <td class="formLeft">Leírása*:</td>
                     <td class="formRight"><input name="newCategoryDescription" type="text" /><input class="button" type="submit" value="OK" name="newCategorySubmit" /></td>
                  <tr>   
         </table>
         </td></tr>
                     ';
                  }
               else
                  {
                     echo '
                  <tr>
                     <td class="formLeft">Választott kategória:</td>
                     <td class="formRight">'.$_SESSION['newItemData']['category'].'</td>
                  <tr>   
                  <tr>
                     <td class="formLeft">Választott kategória leírása:</td>
                     <td class="formRight">'.$_SESSION['newItemData']['categoryDescription'].'</td>
                  <tr>   
                  <tr>
                     <td class="formLeft">Rövid leírás:</td>
                     <td class="formRight"><textarea name="shortDesc" cols="50" rows="3"> </textarea></td>
                  <tr>


illetve a forrás legelején van még egy pár sor, ez kérdezi le ismert kategória esetén a kategória leírását:

Kód:

   if(isset($_POST['categorySubmit']))
      {
        $_SESSION['newItemData']['category'] = $_POST['category'];
         if($_SESSION['newItemData']['category'] != 'Új kategória')
            {
             $leiras = getRowMySQL('leiras','termek_kategoria','nev = "'.$_SESSION['newItemData']['category'].'"','','','');
             $leiras = $leiras['leiras'];
               $_SESSION['newItemData']['categoryDescription'] = $leiras;
            }
      }


2. A fügvények, amiket meghív a fenti 2 kód:

Kód:

   function getMultipleRowsMySQL($what,$tableName,$where,$orderby,$limitA,$limitB)
      {
         if(strlen($where) != 0) $where = 'WHERE '.$where;
         if(strlen($orderby) != 0) $orderby = 'ORDER BY '.$orderby;
         if((strlen($limitA) != 0)&&(strlen($limitB) != 0)) $limit = 'LIMIT '.$limitA.','.$limitB; else $limit = '';
         $link = connectMySQL();
        $query = sprintf('SELECT %s FROM `%s` %s %s %s',
            mysql_real_escape_string($what),
            mysql_real_escape_string($tableName),
            mysql_real_escape_string($where),
            mysql_real_escape_string($orderby),
            mysql_real_escape_string($limit)
         );
         $query = stripslashes($query);
         echo 'getrowquery: '.$query.'<br>';
         $result = mysql_query($query);
         echo 'getrowerror: '.mysql_error().'<br>';
         if(mysql_num_rows($result) != 0)
            {
               $data = '';
               $i = 0;
               while($data[$i++] = mysql_fetch_array($result))
                 {
//                   echo '$data['.($i-1).']: '.$data[($i-1)][0].'<br>';
                  }
               mysql_close($link);
//               print_r($data);
                return $data;
            }
         else
            {
               mysql_close($link);
              return false;   
            }
      }


Remélem elég érthetőre sikerült a post.

Előre is köszönöm:

EQ
Vissza az elejére
Felhasználó profiljának megtekintése Privát üzenet küldése
Tivadar
Új NukeR
Új NukeR


Csatlakozott: Nov 24, 2004
Hozzászólások: 19
Tartózkodási hely: Érd


HozzászólásElküldve: 2008. November 5. Szerda, 21:46    Hozzászólás témája: : MySQL-ból lekért adat karakterkódolása Hozzászólás az előzmény idézésével

Ezt (2. kód részleted) cseréld:

Kód:
$leiras = getRowMySQL('leiras','termek_kategoria','nev = "'.$_SESSION['newItemData']['category'].'"','','','');


Erre:

Kód:
$leiras = getRowMySQL('leiras','termek_kategoria','nev LIKE "%'.$_SESSION['newItemData']['category'].'%"','','','');



Így minden olyan kategóriát kifog dobni, ami hasonló azaz nem pont a megadott. Ha ez nem felel meg, akkor nézd meg adatbázisban a problémás karaktereket és hasonlítsd össze a POST-ban küldöttekkel (print_r($_POST) forrásban nézd), hogy nem e kalapos az egyik/másik és ezért nem stimmel. Ezeken kívül az is lehet még, hogy az említett karakterek HTML kódként vannak, de ezt kétlem, mert a függvényekben nem láttam átalakítást a db-ben meg nem jelezte volna ?-ként akkor.
Vissza az elejére
Felhasználó profiljának megtekintése Privát üzenet küldése Email küldése Felhasználó weblapjának megtekintése MSN Messenger
earthquaker
Új NukeR
Új NukeR


Csatlakozott: Nov 05, 2008
Hozzászólások: 5


HozzászólásElküldve: 2008. November 6. Csütörtök, 9:20    Hozzászólás témája: : MySQL-ból lekért adat karakterkódolása Hozzászólás az előzmény idézésével

Helló!

Köszönöm a gyors választ!

Megnéztem, hogy a $_POST-ban milyen string tárolódik. Ott, ahol ű/ő betűnek kell lennie, az is van, még az ascii kódját is leellenőriztem, és az is rendben volt.

Ennek ellenére nem jó a lekérdezés még úgy sem, hogy = helyett a 'LIKE'-ot használom:
Kód:
SELECT leiras FROM `termek_kategoria` WHERE nev LIKE "%körfűrész (kézi)%"


Elvileg ezt a selectet küldi a php a mysql szervernek saját elmondása szerint ('echo' ezt írta ki Smile )
Na most, ha ezt a MySQL-es QueryBrowserben alkalmazom, akkor meg is találja a megfelelő sort, ellenben a php-n keresztül már nem működik. A másik, amit néztem, hogy amennyiben a fűrészben az ű-t u-ra cserélem, akkor már nem dob ki eredményt a QueryBrowser sem.

Minden esetre úgy döntöttem, hogy kicsit módosítom a függvényeimet. Szóval most nem csak a kategória nevét kérdezem le, hanem annak sorszámát és leírását is egyben, szóval így nem kell plusz lekérdezést futtatnom (azt , amelyik a szóban forgó problémát okozta), meg a karakterek miatt aggódnom.
Vissza az elejére
Felhasználó profiljának megtekintése Privát üzenet küldése
earthquaker
Új NukeR
Új NukeR


Csatlakozott: Nov 05, 2008
Hozzászólások: 5


HozzászólásElküldve: 2008. November 12. Szerda, 13:03    Hozzászólás témája: : MySQL-ból lekért adat karakterkódolása Hozzászólás az előzmény idézésével

Hali!

Sajnos mégis csak van egy kis gond az aktuális állapottal, amit az előző posztban írtam le.

Hogyha az oldalon megadott adatokat szeretném INSERT-tel felvinni az adatbázisba, akkor lényegében ugyan az a probléma jelentkezik, mint amit fent leírtam. Azaz az elvileg a mysql_query() fv-nek átadott sztring nem ugyan az, mint ami megjelenik a mysql-szerver oldalon.
Viszont az INSERT-nek köszönhetően már látom azt is, hogy ez miért van: ugyanis a beszúrt mezők, amelyek ő/ű-t tartalmaznak átalakulnak úgy, hogy az ő/ű helyére ? kerül. Tehát bár lekérdezésnél az adatbázisban szereplő ő/ű-k helyesen kerülnek továbbításra a PHP felé, viszont fordítva már nem oké a dolog.

A lényeg, hogy már mindent próbáltam többféle módon beállítani, de a helyzet nem javult.
-A mostani állás szerint a mysql táblák és sorok esetén is a charset: latin2 és a collation: latin2_hungarian_ci.
-Az a 2 parancs, amit a mysql_connect() után kell beszúrni, továbbra is ott van.
-phpMyAdminban a MySQL kapcsolat egyeztetés szintén latin2_hungarian_ci, de volt már utf8_hungarian_ci, utf8_general_ci is. Nem tudom, hogy ez mennyire befolyásolja a fenti problémát.
-A php és egyéb fájlok karakterkészlete is ISO-8859-2, html meta tag-ben a charset szintén ISO-8859-2.

Hirtelen ez jutott eszembe, ezeket gondoltam fontosnak, ha esetleg van még pár infó, ami fontos lehet, akkor szívesen megnézem és leírom.

Ha van valmi ötlet, örülnék neki!

Kösz!
Vissza az elejére
Felhasználó profiljának megtekintése Privát üzenet küldése
Tivadar
Új NukeR
Új NukeR


Csatlakozott: Nov 24, 2004
Hozzászólások: 19
Tartózkodási hely: Érd


HozzászólásElküldve: 2008. November 12. Szerda, 15:05    Hozzászólás témája: : MySQL-ból lekért adat karakterkódolása Hozzászólás az előzmény idézésével

Javaslom, készíts egy lecserélő függvényt.

MINTA:
Kód:

function latin2utf8($text) {
   
      $csere = array("Ő"=>"&Otilde;",
                  "ő"=>"&otilde;",
                  "Ű"=>"&Ucirc;",
                  "ű"=>"&ucirc;",
                  "Ó"=>"&Oacute;",
                  "ó"=>"&oacute;",
                  "Ú"=>"&Uacute;",
                  "ú"=>"&uacute;",
                  "Á"=>"&Aacute;",
                  "á"=>"&aacute;",
                  "É"=>"&Eacute;",
                  "é"=>"&eacute;",
                  "Í"=>"&Iacute;",
                  "í"=>"&iacute;",
                  "Ö"=>"&Ouml;",
                  "ö"=>"&ouml;",
                  "Ü"=>"&Uuml;",
                  "ü"=>"&uuml;",
                  "µ"=>"&micro;",
                  " & "=>" &amp; ",
                  );
                     
      $keres   = array_keys($csere);         
      
      $text = str_replace($keres,$csere,$text);
   
return $text;
}


Bővítsd, ha szükséges. Segítség hozzá ITT. A függvényt beteszed egy globális fájlba és használod azokra a változókra vagy $_POST, $_GET, $_SESSION dolgokra amire szükséges.

Példa:

Kód:


$_POST["kategoria"] = latin2utf8($_POST["kategoria"]);



Természetesen adminban is használnod kell, azaz a már felvitt adatokat frissíted úgy, hogy ezzel kezeled. Innentől az adatbázisban HTML kódként lesznek az ékezetek és a különleges karakterek amiket a függvényben megadsz.
Vissza az elejére
Felhasználó profiljának megtekintése Privát üzenet küldése Email küldése Felhasználó weblapjának megtekintése MSN Messenger
earthquaker
Új NukeR
Új NukeR


Csatlakozott: Nov 05, 2008
Hozzászólások: 5


HozzászólásElküldve: 2008. November 12. Szerda, 16:04    Hozzászólás témája: : MySQL-ból lekért adat karakterkódolása Hozzászólás az előzmény idézésével

Sajnos ezzel az a gond, hogy az ő/ű betűket ez a függvény õ/û-nek megfelelő kódra cseréli, ami nem az igaz.
Vissza az elejére
Felhasználó profiljának megtekintése Privát üzenet küldése
Tivadar
Új NukeR
Új NukeR


Csatlakozott: Nov 24, 2004
Hozzászólások: 19
Tartózkodási hely: Érd


HozzászólásElküldve: 2008. November 12. Szerda, 17:42    Hozzászólás témája: : MySQL-ból lekért adat karakterkódolása Hozzászólás az előzmény idézésével

Megjelenítésnél alakíttasd vissza, azaz készíts egy fordított függvényt.
Vissza az elejére
Felhasználó profiljának megtekintése Privát üzenet küldése Email küldése Felhasználó weblapjának megtekintése MSN Messenger
earthquaker
Új NukeR
Új NukeR


Csatlakozott: Nov 05, 2008
Hozzászólások: 5


HozzászólásElküldve: 2008. November 13. Csütörtök, 3:33    Hozzászólás témája: : MySQL-ból lekért adat karakterkódolása Hozzászólás az előzmény idézésével

Hali!

Képzeld megoldódott a dolog. Mondjuk már kezdtem megőrülni Smile

Az volt a gond, hogy amit írtál, hogy azt a két sort be kell szúrni, azt én a mysql_connect() alá szúrtam be.
Most kipróbáltam úgy, hogy a mysql_select_db() után szúrtam be és egyből jó lett. Nem is értem, hogy ez miért nem jutott eszembe.
Csak ugye te is azt írtad, hogy a mysql_connect() alá menjen. Nekem meg eszembe sem jutott mindeddig, hogy az úgy nem teljesen jó.

Hát köszönöm a fáradozást, most már talán rendben lesz a dolog! Smile

EQ
Vissza az elejére
Felhasználó profiljának megtekintése Privát üzenet küldése
mrgabee
Új NukeR
Új NukeR


Csatlakozott: May 17, 2010
Hozzászólások: 1


HozzászólásElküldve: 2010. Július 8. Csütörtök, 20:33    Hozzászólás témája: Felhasználó kérdés Hozzászólás az előzmény idézésével

Sziasztok!

Azzal a kérdéssel fordulok hozzátok, mert van egy dolog a portálrendszerben, mire szeretnék segítséget kérni.

Akarok készíteni egy olyan oldalt, melynek menüpontjainak 96% a MQSL lekérdezés.

Nos ugy kellene nekem ezt megoldani, hogy a belépet felhasználóra vonatkozó adatok kérdeződjenek le a menüpontokban.

Hogy tudom valahogy kikérni a felhasználó nevét és abból hogy tudok sql lekérdezést csinálni egy phpMyadmin felületre?

Várom válaszotokat.

Maradok tisztelettel és köszönettel:
Mr. Gabee
Vissza az elejére
Felhasználó profiljának megtekintése Privát üzenet küldése
Horysz
NukeR
NukeR


Csatlakozott: Apr 01, 2005
Hozzászólások: 272


HozzászólásElküldve: 2010. Július 11. Vasárnap, 19:05    Hozzászólás témája: : MySQL-ból lekért adat karakterkódolása Hozzászólás az előzmény idézésével

fú hát ez a pár mondat eléggé kusza.

először is az adatbázis MySQL. A phpMyAdmin pedig csak egy egyszerű adminisztrálást biztosító panel, a portálhoz egyéb köze nincs.

Ha jól emlékszem a $cookie tömb tartalmazta az információkat, talán a $cookie[0] volt az uid, de lehet, hogy időközben ez megváltozott, érdemes a YourAccount modul fájljait böngészni.
_________________
PHP-NUKE 7.7 HUN - saját szerver
http://www.nuker.hu/ftopict-1.html
NukeR.hu moderátor
Vissza az elejére
Felhasználó profiljának megtekintése Privát üzenet küldése
Hozzászólások megtekintése elölről:   
Új téma nyitása   Hozzászólás a témához    Tartalomjegyzék -> Blokkok Időzóna: (GMT +1 óra)
1 / 1 oldal

 
Ugrás:  
Nem készíthetsz új témákat ebben a fórumban
Nem válaszolhatsz egy témára ebben a fórumban
Nem módosíthatod a hozzászólásidat a fórumban
Nem törölheted a hozzászólásaidat a fórumban
Nem szavazhatsz ebben fórumban


Powered by phpBB © 2001, 2005 phpBB Group
PHP-Nuke PHP-Nuke
PHP-Nuke PHP-Nuke
Copyright © 2004-2005 NukeR.hu
Nyitólap
GY.I.K.
Adatvédelem
Impresszum
Médiaajánlat
PHP-Nuke
Apache Szoftver
PHP: Hypertext Preprocessor
MySQL: A világ legnépszerübb nyílt forráskódú adatbázisa
WebTárhely
PHP-Nuke Copyright © 2004 by Francisco Burzi
Védelmet Sentinel Biztosítja
RSS Cikkek
RSS Letöltések
RSS Fórum hozzászólások