Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2012, 20:09   #1
ubun
Форумчанин
 
Аватар для ubun
 
Регистрация: 06.12.2010
Сообщений: 198
По умолчанию проблема с русскими значениями

Есть сайт php+mysql
Есть три файла test.php, select_list.php, ajax_select.js
вот test.php:
PHP код:
<?php include 'select_list.php'?>
<!doctype html>
<html>
<head>
<meta charset="windows-1251" />
<title>Multiple Select Dropdown list cu Ajax</title>
<script src="ajax_select.js" type="text/javascript"></script>
</head>
<body>

<form action="" method="post">
Пожалуйста <?php echo $re_html?>
</form>

</body>
</html>
ubun вне форума Ответить с цитированием
Старый 10.01.2012, 20:11   #2
ubun
Форумчанин
 
Аватар для ubun
 
Регистрация: 06.12.2010
Сообщений: 198
По умолчанию

И вот select_list.php:
PHP код:
<?php
// Liste select multiple - www.marplo.net/ajax/
if(!isset($_SESSION)) session_start();

// Aici adaugati datele dv. pt. conectare la baza de date MySQL
$server 'localhost';
$user 'root';
$pass '';
$dbase 'tyu';

// Aici adaugati numele tabelului, apoi coloanele pt. lista select, in ordinea lor
// Adaugati null in loc de 'links', daca nu vreti sa fie afisate si datele din ea
$table 'sites';
$ar_cols = array('site''menu''categ''links');

$preid 'slo_';        // un prefix folosit la ID-ul elementelor in care Ajax va adauga <select>
$col $ar_cols[0];     // variabila in care e retinuta coloana ce trebuie selectata
$re_html '';          // va retine codul html returnat de script

// daca sunt date primite prin POST, cu index 'col' si 'wval'
if(isset($_POST['col']) && isset($_POST['wval'])) {
  
// seteaza $col ce trebuie selectat si valoarea pt WHERE (sterge tag-uri si spatii exterioare din $_POST)
  
$col trim(strip_tags($_POST['col']));
  
$wval "'".trim(strip_tags($_POST['wval']))."'";
}

$key array_search($col$ar_cols);            // obtine index-ul asociat cu valoarea lui $col din $ar_cols
$wcol $key===$col $ar_cols[$key-1];     // obtine coloana pt conditia WHERE
$_SESSION['ar_cols'][$wcol] = isset($wval) ? $wval $wcol;    // retine in SESSION coloana si valoarea ei pt WHERE
  
// obtine urmatorul element din $ar_cols (folosit la functia onchange() din tag-ul <select>)
$last_key count($ar_cols)-1;
$next_col $key<$last_key $ar_cols[$key+1] : '';

$conn = new mysqli($server$user$pass$dbase);    // conectare la baza de date MySQL

if (mysqli_connect_errno()) { exit('Connect failed: 'mysqli_connect_error()); }     // verificare conexiune

// setare array cu datele conditiei WHERE (coloana=valoare) pt. instructiunea SELECT
for($i=1$i<=$key$i++) {
  
$ar_where[] = '`'.$ar_cols[$i-1].'`='.$_SESSION['ar_cols'][$ar_cols[$i-1]];
}

// defineste sirul cu conditia WHERE, apoi instructiunea SELECT
$where = isset($ar_where) ? ' WHERE 'implode($ar_where' AND ') : '';
$sql "SELECT DISTINCT `$col` FROM `$table`".$where;

$result $conn->query($sql);       // trimite comanda la serverul MySQL

// daca $result contine cel putin un rand
if ($result->num_rows 0) {
  
// seteaza evenimentul "onchange" care se adauga in <select>
  
$onchg $next_col!==null " onchange=\"ajaxReq('$next_col', this.value);\"" '';

  
// seteaza tag-ul pt lista select, daca nu e ultima coloana
  
if($col!=$ar_cols[$last_key]) $re_html ' Выберите: <select name="'$col'"'$onchg'><option>- - -</option>';

  while(
$row $result->fetch_assoc()) {
    
// daca e ultima coloana, returneaza datele din ea, altfel le adauga in tag-uri OPTION
    
if($col==$ar_cols[$last_key]) $re_html .= '<br/>'$row[$col];
    else 
$re_html .= '<option value="'$row[$col]. '">'$row[$col]. '</option>';
  }

  if(
$col!=$ar_cols[$last_key]) $re_html .= '</select> ';        // inchide lista Select
}
else { 
$re_html '0 rezultate'; }

$conn->close();

// daca coloana selectata, $col, e primul element in $ar_cols
if($col==$ar_cols[0]) {
  
// adauga tag-uri SPAN (sau DIV la ultimul element) unde Ajax va adauga listele <select>
  // cu ID in fiecare SPAN, cu numele coloanelor adaugate in $ar_cols
  
for($i=1$i<count($ar_cols); $i++) {
    if(
$ar_cols[$i]===null) continue;
    if(
$i==$last_key$re_html .= '<div id="'$preid.$ar_cols[$i]. '"> </div>';
    else 
$re_html .= '<span id="'$preid.$ar_cols[$i]. '"> </span>';
  }

  
// adauga coloanele in JS (folosite in removeLists() ca sa stearga listele select afisate, cand se alege alta optiune)
  
$re_html .= '<script type="text/javascript">var ar_cols = '.json_encode($ar_cols).'; var preid = "'$preid'";</script>';
}
else echo 
$re_html;
?>
ubun вне форума Ответить с цитированием
Старый 10.01.2012, 20:12   #3
ubun
Форумчанин
 
Аватар для ubun
 
Регистрация: 06.12.2010
Сообщений: 198
По умолчанию

И вот ajax_select.js:
PHP код:
function removeLists(colid) {
  var 
0;
  
// sterge datele din elementele cu id-ul stocat in variabila "ar_cols"
  // incepand cu elementul al carui ID e in colid
  
for(var i=1i<ar_cols.lengthi++) {
    if(
ar_cols[i]==null) continue;
    if(
ar_cols[i]==colid1;
    if(
z==1document.getElementById(preid+ar_cols[i]).innerHTML '';
  }
}

// crere obiect XMLHttpRequest, in functie de browser
function get_XmlHttp() {
  
// variabila ce va contine instanta de obiect XMLHttpRequest (initial cu valoare null)
  
var xmlHttp null;

  if(
window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); }     // pt Firefox, IE7+, Opera, Safari
  
else if(window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }      // IE5 or 6

  
return xmlHttp;
}

// trimite date la un script php, prin POST, si afiseaza raspunsul primit
function ajaxReq(colwval) {
  
removeLists(col);           // sterge listele select deja afisate

  // daca valoarea lui wval nu e '- - -' sau '' (primul <option>)
  
if(wval!='- - -' && wval!='') {
    var 
request =  get_XmlHttp();              // apeleaza functia pt. obiectul XMLHttpRequest
    
var php_file 'select_list.php';     // calea si numele fisierului php

    // creare perechi index=valoare cu datele ce vor fi trimise la server
    
var  data_send 'col='+col+'&wval='+wval;

    
request.open("POST"php_filetrue);            // seteaza cererea Ajax

    
document.getElementById(preid+col).innerHTML 'Incarcare...';   // notificare de incarcare

    // adauga header care sa transmita script-ului PHP sa recunoasca datele ca fiind transmise prin POST
    
request.setRequestHeader("Content-type""application/x-www-form-urlencoded");
    
request.send(data_send);              // apeleaza metoda send() cu data_send

    // Verifica starea cererii
    // Daca raspunsul e primit complet, il adauga in tag-ul cu id-ul din "col"
    
request.onreadystatechange = function() {
      if (
request.readyState==4) {
        
document.getElementById(preid+col).innerHTML request.responseText;
      }
    }
  }

ubun вне форума Ответить с цитированием
Старый 10.01.2012, 20:18   #4
ubun
Форумчанин
 
Аватар для ubun
 
Регистрация: 06.12.2010
Сообщений: 198
По умолчанию

а вот база которую создал на phpmyadmin:
Код:
CREATE TABLE IF NOT EXISTS `sites` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `site` varchar(45) NOT NULL,
  `menu` varchar(45) NOT NULL,
  `categ` varchar(40) NOT NULL,
  `links` varchar(80) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=49 ;

--
-- Dumping data for table `sites`
--

INSERT INTO `sites` (`id`, `site`, `menu`, `categ`, `links`) VALUES
(1, 'Бурятия', 'Животное', 'Слон', 'хорошо'),
(2, 'Саха-Якутия', 'Животное', 'Акула', 'отлично'),
(3, 'Индонезия', 'Животное', 'Заяц-беляк', 'худо'),
(4, 'MarPlo.net', 'Courses', 'JavaScript', 'www.marplo.net/javascript/sintaxajs.html'),
(5, 'MarPlo.net', 'Courses', 'JavaScript', 'www.marplo.net/javascript/notiuni_de_baza.html'),
(6, 'MarPlo.net', 'Courses', 'JavaScript', 'www.marplo.net/javascript/getelementbyid.html'),
(7, 'Корсика', 'Птицы', 'Самураи', 'несовсем'),
(8, 'MarPlo.net', 'Courses', 'English', 'www.marplo.net/engleza/exercitii')
ubun вне форума Ответить с цитированием
Старый 10.01.2012, 20:22   #5
ubun
Форумчанин
 
Аватар для ubun
 
Регистрация: 06.12.2010
Сообщений: 198
По умолчанию

Этот сайт с динамическими списками. Когда сайт открывается появляется первый селект, потом после выбора появляется второй и тд.
Проблема в том что это работает только с латинскими значениями, а когда выбираю русские значения, то не работает.
ubun вне форума Ответить с цитированием
Старый 10.01.2012, 20:25   #6
Serj0987
Пользователь
 
Регистрация: 18.04.2009
Сообщений: 44
По умолчанию

Для начала проверьте в какой кодировке работает сервер и в какой кодировке БД
Программы на заказ Delphi, Pascal, PHP.
ICQ:636-494-826
E-mail:serj0987@yandex.ru.
Serj0987 вне форума Ответить с цитированием
Старый 10.01.2012, 20:28   #7
ubun
Форумчанин
 
Аватар для ubun
 
Регистрация: 06.12.2010
Сообщений: 198
По умолчанию

а как это проверить?
в phpmyadmin много кодировок.
ubun вне форума Ответить с цитированием
Старый 10.01.2012, 20:30   #8
Serj0987
Пользователь
 
Регистрация: 18.04.2009
Сообщений: 44
По умолчанию

у вас на всех текстовых и строковых полях должна стоять кодировка cp-1251, это можно сделать выбрав конкретную таблицу и перейдя на вкладку структура, если там все ок, то дело в кодировке сервера.
Программы на заказ Delphi, Pascal, PHP.
ICQ:636-494-826
E-mail:serj0987@yandex.ru.
Serj0987 вне форума Ответить с цитированием
Старый 10.01.2012, 20:37   #9
ubun
Форумчанин
 
Аватар для ubun
 
Регистрация: 06.12.2010
Сообщений: 198
По умолчанию

у всех полей кодировка cp1251_general_ci
и у сервера mysql тоже самое
ubun вне форума Ответить с цитированием
Старый 10.01.2012, 20:42   #10
ubun
Форумчанин
 
Аватар для ubun
 
Регистрация: 06.12.2010
Сообщений: 198
По умолчанию

извиняюсь я только что посмотрел у mysql сервера UTF-8 Unicode
Как мне далше быть?
ubun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
md5 в delphi: проблема с русскими буквами myosotis Общие вопросы Delphi 8 16.11.2011 18:35
массив с прописными русскими nex 9119 Помощь студентам 5 14.12.2010 21:08
SMS русскими буквами nimf Общие вопросы Delphi 10 13.02.2010 22:23
Работа с русскими символами... Sota Помощь студентам 5 31.05.2008 18:44