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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2010, 16:52   #1
skeletor
Пользователь
 
Аватар для skeletor
 
Регистрация: 21.06.2010
Сообщений: 13
По умолчанию ldap_add и русские значение

Есть html-форма, через неё методом POST передаются значения полей, которые заполнил пользователь. Вот код формы:
Код:
<form action="ldapadd.php" method=post>
<table border=0>
<tr bgcolor=#cccccc>
  <td width=150>Item</td>
  <td width=15>Entire</td>
</tr>
<tr>
  <td>CN</td>
  <td align=left><input type="text" name="id_cn" size=120 maxlength=120></td>
</tr>
<tr>
  <td>SN</td>
  <td align=left><input type="text" name="id_sn" size=120 maxlength=120></td>
</tr>
<tr>
  <td>EMAIL</td>
  <td align=left><input type="text" name="id_mail" size=120 maxlength=120></td>
</tr>
<tr>
  <td colspan=2 align=center><input type=submit value="Submit Order"></td>
</tr>
</table>
</form>
А вот код ldapadd.php


Код:
<?

  // create short variable names
$id_cn = $_POST['id_cn'];
$id_sn = $_POST['id_sn'];
$id_mail = $_POST['id_mail'];

//$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];


$ldaphost='ldap://10.0.3.185';
$ldapport='389';
$ldapuser='cn=book_rw,ou=people,dc=domain,dc=lin';
$ldappassword='book_rw';
$dc='ou=addressbook,dc=domain,dc=lin';
$attr = array('cn','mail','sn');
$filter='(&(objectclass=*))';

$ldapconn = ldap_connect($ldaphost, $ldapport)
          or die("Could not connect to $ldaphost" . ldap_error($ldapconn));

if (ldap_set_option($ldapconn,LDAP_OPT_PROTOCOL_VERSION,3))
{
    echo "Using LDAP v3";
}else{
        echo "Failed to set version to protocol 3";
}


if ($bind=ldap_bind($ldapconn, $ldapuser, $ldappassword)) {
    echo("Login correct");
}
else
{
    echo("Unable to bind to server.</br>");
    echo("msg:'".ldap_error($bind)."'</br>");
}


$info["cn"] = $id_cn;
$info["sn"] = $id_sn;
$info["mail"] = $id_mail;
$info["objectclass"] = "inetOrgPerson";

ldap_add($ldapconn,"cn=$id_cn,$dc",$info) or die("Could not add new entry!" . ldap_error($ldapconn));

ldap_unbind($ldapconn);

?>
Проблема заключается в том, что если пользователь вводит текст на кирилице, то вылазит ошибка (если латиницей, то всё нормально):

Код:
Warning: ldap_add() [function.ldap-add]: Add: Invalid DN syntax in /var/www/localhost/htdocs/ldapadd.php on line 69
Could not add new entry!Invalid DN syntax
Сервер локализирован под UTF-8. Если в самом ldapadd.php написать ручками на русском значения то отрабатывает нормально. Если выводить передаваемые от формы значения, то тоже выводится нормально.

Подскажите, как можно решить эту проблему?
"Винда съела дрова и резет здесь не фурычит."
"Все говорят, что у меня /dev/hands криво и я всё делаю через /dev/ass. А у меня этих фалов вообще нет!"
skeletor вне форума Ответить с цитированием
Старый 02.07.2010, 17:33   #2
skeletor
Пользователь
 
Аватар для skeletor
 
Регистрация: 21.06.2010
Сообщений: 13
По умолчанию

Подсказали на одном из форумов про функцию iconv. Пару экспериментов с iconv и заработало. В итоге блок
// create short variable names
Код:
 $id_cn = $_POST['id_cn'];
 $id_sn = $_POST['id_sn'];
 $id_mail = $_POST['id_mail'];
заменить на такой
Код:
$id_cn = iconv("utf-8","utf-8",$_POST['id_cn']);
$id_sn = iconv("utf-8","utf-8",$_POST['id_sn']);
$id_mail = iconv("utf-8","utf-8",$_POST['id_mail']);
Странно, но именно такой вариант заработал. Не могу понять почему.
"Винда съела дрова и резет здесь не фурычит."
"Все говорят, что у меня /dev/hands криво и я всё делаю через /dev/ass. А у меня этих фалов вообще нет!"
skeletor вне форума Ответить с цитированием
Старый 02.07.2010, 17:37   #3
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

ldap_add($ldapconn,"cn=$id_cn,$dc", $info)
3 параметр этой функции массив ?
ssdm вне форума Ответить с цитированием
Старый 06.07.2010, 12:48   #4
skeletor
Пользователь
 
Аватар для skeletor
 
Регистрация: 21.06.2010
Сообщений: 13
По умолчанию

Да, это массив.
"Винда съела дрова и резет здесь не фурычит."
"Все говорят, что у меня /dev/hands криво и я всё делаю через /dev/ass. А у меня этих фалов вообще нет!"
skeletor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти значение на другом листе и подставить значение следующей ячейки ElenaNTro Microsoft Office Excel 12 11.02.2019 12:44
Русские поля в БД Sinsinmin SQL, базы данных 4 30.04.2010 13:53
русские буквочки elka Помощь студентам 4 09.01.2010 03:49
Русские буквы в dev c++ bull Общие вопросы C/C++ 3 22.09.2008 20:28