Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Загрузка текста при клике на ссылку
 
 автор: sega_z   (28.05.2012 в 21:44)   письмо автору
 
 

Всем привет!

Помогите мне пожалуйста составить простой JS скрипт, который при клике на ссылку с тестом "показать номер" заменял (подгружал из базы данных) другой текст (причем новый текст не должен быть ссылкой).
Данная операция не должна быть обратимой и должна выполнятся только один раз. После обновления страницы все должно повторяться.

  Ответить  
 
 автор: bishake   (29.05.2012 в 10:47)   письмо автору
 
   для: sega_z   (28.05.2012 в 21:44)
 

> Данная операция не должна быть обратимой и должна выполнятся только один раз.
То бишь при перезагрузке страницы Вам надо, чтобы нажатые ссылки уже сразу были текстом? Если так, то продумана ли у Вас какая-либо аутентификация пользователя?

Если этот момент пока отложить, то замена ссылки текстом решается примерно так:
<!--<?-->
<
li><a href="/request/for/number/1">Показать номер</a></li>
<
li><a href="/request/for/number/2">Показать номер</a></li>
<
li><a href="/request/for/number/3">Показать номер</a></li>
<
script type="text/javascript">
    
// $ = jQuery
    
$('a').click(function() {
        var 
parent = $(this).parent();
        $.
get( $(this).attr('href'), null, function(answ) {
            
parent.htmlansw )
        });
        return 
false;
    });
</script>

  Ответить  
 
 автор: confirm   (29.05.2012 в 11:30)   письмо автору
 
   для: bishake   (29.05.2012 в 10:47)
 

Только объясните, что для этого требуется подключение jquery, а то вы советуете, почти всегда, чисто на нем, а автор темы не все еще "шпрехен". )

  Ответить  
 
 автор: bishake   (29.05.2012 в 11:42)   письмо автору
 
   для: confirm   (29.05.2012 в 11:30)
 

Автор, "для этого требуется подключение jquery:"
<head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
    ...
</head>


А советую я на нем всегда, так как 12ый год на дворе, ни у кого нет времени на всю эту кроссбраузерную муть.

  Ответить  
 
 автор: bishake   (29.05.2012 в 11:49)   письмо автору
 
   для: bishake   (29.05.2012 в 11:42)
 

Но впрочем, Вы правы, буду продвигать идеологию подключения jQuery с google-хостов :)

  Ответить  
 
 автор: confirm   (29.05.2012 в 11:51)   письмо автору
 
   для: bishake   (29.05.2012 в 11:49)
 

Это не идеология, это выгодно.

  Ответить  
 
 автор: confirm   (29.05.2012 в 11:51)   письмо автору
 
   для: bishake   (29.05.2012 в 11:42)
 

Вообще-то не всегда просят решения именно на нем, а начинающие о нем вообще не подозревают. Да и ради решения мелочного вопроса его подключение совсем не лучший выбор, не смотря на 12-й год.
А в этом вопросе кроссбраузерности собственно говоря 0.01%, и без jquery решить без крови можно. ;)

  Ответить  
 
 автор: sega_z   (29.05.2012 в 12:31)   письмо автору
 
   для: confirm   (29.05.2012 в 11:51)
 

Данная операция не должна быть обратимой и должна выполнятся только один раз до перезагрузки страницы. После перезагрузки снова должна быть ссылка "показать текст".

А что нельзя эту задачу решить каким нибудь самым простым способом на Jаva Script?
А то jQuery работает не во всех браузерах, да и вообще jQuery для меня темный лес ...

  Ответить  
 
 автор: confirm   (29.05.2012 в 12:38)   письмо автору
 
   для: sega_z   (29.05.2012 в 12:31)
 

jQuery работает во всех основных браузерах, но конечно можно и без него сделать.

  Ответить  
 
 автор: sega_z   (29.05.2012 в 12:47)   письмо автору
 
   для: confirm   (29.05.2012 в 12:38)
 

>jQuery работает во всех основных браузерах, но конечно можно и без него сделать.

Ну и как это сделать? Если бы я знал, я бы не спрашивал...
Покажите пожалуйста, на примере кода.

  Ответить  
 
 автор: confirm   (29.05.2012 в 12:53)   письмо автору
 
   для: sega_z   (29.05.2012 в 12:47)
 

Вам нужна загрузка ajax методом или не обязательно? То есть, можно типа триггера сделать - запросили, обновилась страница с добавлением запрошенного, которое уже вызвать нельзя. Но если перегрузить страницу, то опять будет такая возможность.
Как надо?

  Ответить  
 
 автор: sega_z   (29.05.2012 в 13:08)   письмо автору
 
   для: confirm   (29.05.2012 в 12:53)
 

>Вам нужна загрузка ajax методом или не обязательно?
Я не знаю каким методом лучше, главное, чтобы работало во всех браузерах и самое важное, чтобы текста, заменяющего ссылку, не было в браузере и коде, до нажатия ссылки. И если можно, то без всяких "куки".

>То есть, можно типа триггера сделать - запросили, обновилась страница с добавлением запрошенного, которое уже вызвать нельзя. Но если перегрузить страницу, то опять будет такая возможность.
Страницу обновлять не нужно, нужно только обновить текст ссылки (чтобы он не был ссылкой) и без разницы сколько раз и кому показывать. Просто, если человек обновил страницу, то текст удалился и снова принял вид ссылки "показать номер" (первоначальный вид).

Чтобы было совсем понятно, вот пример показа номера телефона: http://www.avito.ru/items/moskva_detskaya_odezhda_i_obuv_puhovik_dlya_podrostka_o_hara_164_sm_56314527

  Ответить  
 
 автор: confirm   (29.05.2012 в 13:14)   письмо автору
 
   для: sega_z   (29.05.2012 в 13:08)
 

Значит вам нужен ajax. Покажите кусочек кода, в котором ваша ссылка, по которой нужна загрузка, и элемент, в который должен быть помещен ответ сервера.

PS. Это по такому значению "moskva_detskaya_odezhda_i_obuv_puhovik_dlya_podrostka_o_hara_164_sm_56314527" вы ищите на сервер телефон?

  Ответить  
 
 автор: sega_z   (29.05.2012 в 13:36)   письмо автору
 
   для: confirm   (29.05.2012 в 13:14)
 

>PS. Это по такому значению "moskva_detskaya_odezhda_i_obuv_puhovik_dlya_podrostka_o_hara_164_sm_56314527" вы ищите на сервер телефон?

Я просто привел пример страницы с подобной заменой ссылки текстом и не знаю как это у них реализовано.

>Покажите кусочек кода, в котором ваша ссылка, по которой нужна загрузка, и элемент, в который должен быть помещен ответ сервера.

Допустим, есть динамическая страница http://www......ru/info.php?id=13 с текстом вытащенным из базы данных (таблица "text" ячейка "text_info") по порядковому номеру записи (ячейка "id"), номер которой так же присутствует в URL адресе.

На этой странице будет ссылка:

Номер=<? echo"<a href='http://www......ru/info.php?id=13'>Показать номер</a>"  ?>


при нажатии которой должен появиться текст (ячейка "nomer" той же таблицы "text") с порядковым номером id=13.

Сейчас вместо ссылки из ячейки "nomer" на страницу выводится сразу текст:
Номер=<?php echo $nomer ?>

  Ответить  
 
 автор: confirm   (29.05.2012 в 14:05)   письмо автору
 
   для: sega_z   (29.05.2012 в 13:36)
 

Вы не ответили на главное - куда должен помещаться ответ сервера? Я возьму и напишу для примера вот так то, и если вы поймете, что к чему, слава богу, подправите, а если нет?
<a href="...">text</a> - это ежу понятно...
<X-элемент></X> - это не понятно, что это такое за место куда поместить? Нет такового и нужно создать элемент? Есть такой и в него поместить?
Я вроде бы понятно сказал - покажите часть кода страницы своей и поясните, что вот сюда-то и надо....

  Ответить  
 
 автор: sega_z   (29.05.2012 в 14:14)   письмо автору
 
   для: confirm   (29.05.2012 в 14:05)
 

<table width="80%" border="0" cellpadding="5" cellspacing="0">
      <tr>
        <td width="100%" height="40" align="left" class="text_c3">Местоположение:</td>
        <td align="left" nowrap class="text_c3">Контактные данные:</td>
      </tr>
      <tr>
        <td width="100%" align="left" valign="top" nowrap><span class="text_b">Регион: </span><span class="text_c"><?php echo $myrow["region"]; ?></span><br>
<br>
<span class="text_b">Город: </span><span class="text_c"><?php echo $myrow["gorod"]; ?></span></td>
        <td align="left" valign="top" nowrap><noindex><?php 
if (!empty($myrow["user"])) {$user=$myrow["user"]; echo "<span class='text_b'>Автор: </span><span class='text_c'>$user</span>";}
if (!empty(
$myrow["telefon"])) {$telefon=$myrow["telefon"]; echo "<br><br><span class='text_b'>Телефон: </span><span class='text_c'>$telefon</span>";}
if (!empty(
$myrow["isq"])) {$isq=$myrow["isq"]; echo "<br><br><span class='text_b'>IСQ: </span><span class='text_c'>$isq</span>";}
if (
$myrow["checkbox"] != 1) {echo "<br><br><span class='text_b'>E-mail: </span><span class='text_c'><a href='http://www......ru/message.php?id=$id' class='linc'> отправить сообщение</a></span>";}
?></noindex></td>
      </tr>
    </table>


На странице порядковый номер записи присутствует в переменной $id (если это нужно), по нему вытаскиваеются все $myrow["......."] из базы.

Простите я видимо не совсем понял что именно нужно. Вместо переменной $telefon нужно сделать ссылку "показать номер" и туда же выводить номер телефона (вместо ссылки).

  Ответить  
 
 автор: confirm   (29.05.2012 в 14:38)   письмо автору
 
   для: sega_z   (29.05.2012 в 14:14)
 

Если вам надо показать номер телефона здесь:
<span class='text_c'>Показать телефон</span>
и как вы говорите сюда вставить ссылку на это, то почему сама ссылка в самом низу, и что означает "отправить сообщение" - именно по этой ссылке и надо получить номер? И запрашивается только один номер и все, в других полях как <span class='text_c'>$isq</span>, никаких запросов не предусматривается?

PS. Или по этой ссылке получить телефон, icq и все это разместить в полях соответствующих?

  Ответить  
 
 автор: sega_z   (29.05.2012 в 14:49)   письмо автору
 
   для: confirm   (29.05.2012 в 14:38)
 

"отправить сообщение" это вообще переход на другую страницу, он остается без изменений.
А поля <span class='text_c'>$telefon</span> и наверно тогда <span class='text_c'>$isq</span> нужно заменить ссылками "показать номер", с последующим выводом результатов.

Забыл сказать, что $myrow["isq"] и $myrow["telefon"] могут быть пустыми, в этом случае ссылки быть не должно, так же и самого поля, поэтому вывод всей информации заключен в условие if (!empty($myrow["telefon"]))

  Ответить  
 
 автор: confirm   (29.05.2012 в 16:50)   письмо автору
 
   для: sega_z   (29.05.2012 в 14:49)
 

Ну если так, тогда не надо никаких ссылок вместо $telefon и $isq (кстати, не $isq, а $iсq), лучше внутри этих span (class='text_c') поместите дочерние элементы span, которые и будут вызвать запрос. Так будет проще и поместить содержимое ответа и удалить отработанное.
В примере, id выводится и в скрипт как переменная usr, а параметром запроса определяющем требуемое я указываю просто индекс массива. Вы же должны указывать свое имя/значение данного параметра, с которыми будете реально работать. А также укажите реальный сетевой адрес. Это в строке:
xmlhttp.open('GET', 'tst.php?id='+usr+'&v='+v, true);
Значение v для параметра v передается в функцию из добавленных span вторым аргументом, укажите здесь свои, реальные значения, по которым вы будете производить запрос к базе. Условие выводить или нет эти элементы, это отношения к данному скрипту не имеет, это уже в вашем ведении, а в примере используется массив без оной проверки. Обзовите пример как tst.php и запустите его, думаю разберетесь что к чему.

<?php
$usr 
= array(
   
1=>array(1=>111111,1222),
   
2=>array(1=>222222,2222),
   
3=>array(1=>333333,3222)
);
if(isset(
$_GET['id'])) {
   
$id = (int)$_GET['id'];
   
$v = (int)$_GET['v'];
   echo 
$usr[$id][$v];
   exit; 
}
?>
<html>
<head>
<style>
.text_c span {color: #00f; text-decoration: underline; cursor: pointer;}
</style>
<script>
var usr = <?php echo array_rand($usr);?>;
function sendInquery(obj, v){
  var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  } else {
    alert('Ваш браузер настолько древний, что...');
    return false;
  }
  xmlhttp.onreadystatechange = function() {
    resultRequest(obj, xmlhttp); 
  }
  xmlhttp.open('GET', 'tst.php?id='+usr+'&v='+v, true);
  xmlhttp.send('');
}

function resultRequest(obj, res) {
  if (res.readyState == 4) {
      if (res.status == 200) {
      obj.parentNode.innerHTML = res.responseText;
    } else {
      alert('Не срослось что-то :(');
    }
  }
}
</script>
</head>
<body>
<span class='text_b'>Телефон: </span>
<span class='text_c'><span 
onclick="sendInquery(this, 1)">Показать номер</span></span><br />
<span class='text_b'>IСQ: </span>
<span class='text_c'><span 
onclick="sendInquery(this, 2)">Показать номер</span></span>
</body>
</html>

  Ответить  
 
 автор: bishake   (29.05.2012 в 17:01)   письмо автору
 
   для: confirm   (29.05.2012 в 16:50)
 

Вы в самом деле до сих пор считаете, что jQuery здесь не оправдан? :)
Интересно узнать, когда наступит переломный момент :)

  Ответить  
 
 автор: confirm   (29.05.2012 в 17:20)   письмо автору
 
   для: bishake   (29.05.2012 в 17:01)
 

Если требуется только это, плюс банальные this.value кому-то там в value вкупе с alert'ами, то да - считаю. Все должно быть оправдано.

Вы вот советуете кое где новые стили, при этом прекрасно зная, что в некоторых браузерах в ответ на них будут полная попа. Оно конечно можно накрутить и новое, плюс старое, пусть сами разбираются, а зачем?

Переломный момент будет тогда, когда разработчики не будут зависть от мировоззрений разработчиков браузеров. Вы же можете ломать себя и сейчас, кто же вам запрещает.

  Ответить  
 
 автор: bishake   (29.05.2012 в 17:52)   письмо автору
 
   для: confirm   (29.05.2012 в 17:20)
 

> Вы вот советуете кое где...
Я советовал в css :after + content, Вы об этом? Я побочных эффектов пока не видел, хотя из меня верстальщик абсолютно никакой :)

>...когда разработчики не будут зависть от мировоззрений разработчиков браузеров...
А Вы, стало быть, думаете, что они специально хотят нам насолить? Есть W3C-спецификация, браузеры должны её соблюдать, пусть не всегда им это удаётся полностью, пусть иногда с багами, но, как бы то ни было, браузеры совершенствуются.
А JQuery просто позволяет экономить время. Много времени. А если все будут стараться грузить его с google-хостов, то ещё и ресурсы будет экономить :)

  Ответить  
 
 автор: confirm   (29.05.2012 в 18:13)   письмо автору
 
   для: bishake   (29.05.2012 в 17:52)
 

>Есть W3C-спецификация, браузеры должны её соблюдать...

О да, и они ее прям таки как "отче наш" и соблюдают?

Я не любитель никчемных дискуссий на эту тему, ибо в этой области бардак полнейший. Одни с пеной у рта доказывают, что Лиса это "справедливо", а Осел вообще козел со своими выдумками, хотя moz-далее_хрень_лисья, ничем не лучше своеволий ослика.

Когда я использую, например, JS в локальных приложениях, кои используют ресурсы исключительно IE, я говорю "Сенкью Билл за swapNode, и за...", так как это проще чем то, что там советует W3C-спецификация. И за новые методы JS добавленные в IE9 тоже в таких случаях скажу спасибо. И мне глубоко наплевать на мнения других - кем там является Ослик.

Смаковать "ах как хорош canvas в HTML5, а как хорош..." тоже не буду, рано. Хотя я и не консерватор, могу поступить даже радикально - "Ваш браузер не поддерживает из HTML5 вот это и это?!! Мимо проходите." Но это будет лично мой поступок, который я никому советовать не буду.

>JQuery просто позволяет экономить время.

Да, это хорошая и очень удобная библиотека. Но библиотека, а не палочка выручалочка на все случаи, это далеко не так. Я тоже советую ее использовать, но тогда, когда нужно сделать что-то сложное (хотя это понятие резиновое), подключить готовый плагин и...
Но незадача в том, что использование ее никак не освобождает разработчика знать среду, в которой он работает, JQuery за него думать не будет. И как следствие пишут такое, что волосы дыбом. Так что JQuery всего лишь инструмент, а нужно уметь не только пользоваться инструментом, но еще знать куда тюкнуть, иначе можно и по ... (нужное подставьте сами).

Она позволяет экономить не только время, но еще и сосредоточится на главном, но только тем, кто имеет знания, иначе это спорное утверждение.

  Ответить  
 
 автор: bishake   (29.05.2012 в 18:24)   письмо автору
 
   для: confirm   (29.05.2012 в 18:13)
 

> но только тем, кто имеет знания
а Вам не кажется, что предлагая решения на чистом javascript'е тем, кто не умеет им пользоваться, Вы эдаким способом заставляете "дурака богу молиться"?
Да в общем-то я солидарен с Вами по поводу холивара, поэтому давайте прекратим, и останемся при своём.

  Ответить  
 
 автор: confirm   (29.05.2012 в 18:39)   письмо автору
 
   для: bishake   (29.05.2012 в 18:24)
 

Изучать надо js тем, кто хочет уметь писать скрипты клиентские. Это базовые знания.

Код примера, это просто кусочек, фрагмент, из jquery, она использует именно это, ибо другого не существует. Так какая разница кому молиться? А не зная jquery, тупо сдирая чужой код, это значит быть умным и молиться богу привилегированному?

Приведенный код прост, и чтобы понять его работу достаточно заглянуть в описание ajax. Не страшите необоснованно.

Страждущие получить здесь помощь должны научиться двум главным вещам - заставлять себя учиться и думать. В противном случае не важен бог и внутреннее содержание отбивающего поклоны, так как это уже напраслина.

  Ответить  
 
 автор: sega_z   (29.05.2012 в 18:52)   письмо автору
 
   для: confirm   (29.05.2012 в 16:50)
 

Большое спасибо за подробный пример, протестировал его работу - то что надо!!!

>Значение v для параметра v передается в функцию из добавленных span вторым аргументом, укажите здесь свои, реальные значения, по которым вы будете производить запрос к базе.

Немного не понял зачем $v и где мне брать это значение, если у меня поиск в базе осуществляется по $id и значения выводятся в массивы $myrow["telefon"] и $myrow["isq"]:

$result = mysql_query ("SELECT * FROM text WHERE status='активно' AND id='$id'",$db);
$myrow = mysql_fetch_array ($result);


>....а параметром запроса определяющем требуемое я указываю просто индекс массива.

Не совсем понял о каком параметре идет речь...

И ещё как то бы добавить в данный код вывод имитации загрузки, например после слова "Телефон: ..........." появляется одна точка, затем вторая, затем третья и т.д. до 10 точек, затем повтор (если можно эту задачу выполнить на JS) или крутилку, например с именем load.gif.

  Ответить  
 
 автор: confirm   (29.05.2012 в 19:36)   письмо автору
 
   для: sega_z   (29.05.2012 в 18:52)
 

Я же вам задавал вопрос:
1) в каждое поле индивидуально запрашивать и вставлять
2) или это одна ссылка по которой комплексный ответ (содержащий и телефон и аську) расставить в соответствующие элементы.

Вы ответили по №1, а значит кроме id определяющего пользователя вам нужно еще знать на сервере, что запрашивают - телефон или аську, а это можно определить по значению другого параметра.

Мой пример работает с массивом. Я же не буду описывать вашу таблицу в базе, структуру которой не знаю, да этого и не нужно.
Массив в примере имеет ключи имитирующие id пользователя (1,2,3), который формируется случайно и отдается в скрипт. Это сугубо для примера, чтобы перегрузив страницу с примером, вы увидели изменения, то есть работу. Я вам много и не раз в разделе РНР объяснял всякого, но что-то не замечал, чтобы у вас были затруднения с понятием индексов массива.
Вы что не видите, что массив usr в каждом массиве (это условно информация о пользователе) содержит по два элемента, в котором под индексом 1 я условно записал номер телефона, а во втором (индекс 2) icq номер.

Поэтому в функцию sendInquery(obj, v) и передаются 1 или 2, которые принимает переменная v, которые будут переданы переменной $_GET['v'], которые и позволят знать серверу что у него запрашивают. Что тут не понятно то?

Вы же должны выполнить запрос для пользователя с id = равным запрашиваемому. А далее уж как вам будет угодно - либо вы вместо 1 и 2 передаете строковые значение, например, 'phone' и 'icq' (имена полей фактически, что по моему мнению ни есть лучшим вариантом) и это будет служить параметром для запроса, или так и оставить 1 и 2, и проверив число указать необходимое поле в запросе.

Вы сначала выполните запрос к реальному серверу своему и получите ответ - что-то я сомневаюсь, что данная операция будет столь длительной (конечно, если вы не будете запрашивать у сервера еще и о родственниках пользователя, семейном положении и многое другое (что у вас как *), чего совсем не нужно), что вам потребуется "маленькая крутилка".

********

ГЛАВНОЕ!

У вас ссылка href='http://www......ru/message.php?id=$id' имеет также переменную id, а в примере я сделал просто, отправляя такое же имя переменной. Если вы используете имена в точности мои, и, если ajax запрос будет к этой же странице (message.php), как у меня в примере, может произойти конфликт. Чтобы этого избежать нужно изменить имя переменной.

  Ответить  
 
 автор: sega_z   (29.05.2012 в 21:11)   письмо автору
 
   для: confirm   (29.05.2012 в 19:36)
 

Понимаете, чтобы переделать Ваш пример под свою страницу, мне надо понять как работает весь код примера (с AJAX я вообще не разу не работал, знаю только для чего он нужен). Поэтому и хотел сделать простой JS, но сейчас понимаю ценность AJAX.

Моя страница с телефоном и пр. информацией работает сейчас следующим образом:

1) формируется она при клике по ссылке, в которой уже указан порядковый номер всех записей таблицы (http://www.......ru/info.php?id=<?php echo $id ?>).

2) затем в начале уже данной страницы info.php выполняется код:

if (isset ($_GET['id']))
{$id = $_GET['id'];
if (!preg_match("|^[\d]+$|",$id)) {exit("<p align='center'>Неверный формат запроса адресной строки! Проверьте введенный URL!.</p>");}}


3) затем выполняется запрос в базу на выборку всех полей, в том числе "telefon" и "isq" с номером телефона и isq.

$result = mysql_query ("SELECT * FROM text WHERE status='активно' AND id='$id'",$db);
$myrow = mysql_fetch_array ($result); /*Безопасное извлечение данных из базы*/

4) затем на страницу в нужные места выводятся значения всех $myrow["telefon"], $myrow["isq"], и т.д.

Это я к тому, что я не могу понять, как заменить часть Вашего кода:

<?php
$usr 
= array(
   
1=>array(1=>111111,1222),
   
2=>array(1=>222222,2222),
   
3=>array(1=>333333,3222)
);
if(isset(
$_GET['id'])) {
   
$id = (int)$_GET['id'];
   
$v = (int)$_GET['v'];
   echo 
$usr[$id][$v];
   exit; 
}
?>


моим кодом с выборкой из базы и выводом результатов на страницу.

Каким образом строка echo $usr[$id][$v]; прописанная в самом начале кода, выводит значения в поля "Телефон:" и "IСQ:" в конце кода?

Где формируется запрос на сервер и где его ответ?

Где мне делать запрос на выборку из базы столбца "telefon" и столбца "isq" по номеру $id ?

Когда и где выводить из базы $myrow["telefon"] и $myrow["isq"]?

Значения $myrow["telefon"] и $myrow["isq"] выводятся по номеру id, зачем тогда второй параметр v?

  Ответить  
 
 автор: confirm   (29.05.2012 в 22:28)   письмо автору
 
   для: sega_z   (29.05.2012 в 21:11)
 

Эта строка просто физически не может ничего вывести у клиента. Это ответ сервера, а зачем он нужен клиенту, который ой как далеко от него, то-ли куда-то вывести его, то-ли просто для проформы побеспокоили его, сервер, серверу глубоко наплевать - его разбудили, он поковырялся, нашел то, чего просят, выплюнул, и снова спать - exit (Домашнее задание: для чего в данном коде нужен exit?).

Стоит еще раз объяснять, что означают в этой строке $id и $v, и что это индексы массива? Если да - Домашнее задание: как получить значение "value" из массива $a = array(10=>array(1=>15,"value")); ?

Да, запрос формируется именно в этой строке:
xmlhttp.open('GET', 'tst.php?id='+usr+'&v='+v, true);
где 'GET' это метод передачи данных, далее url с параметрами (о которых я повторяться не буду), а третий аргумент флаг определяющий какой запрос будет произведен - синхронный или асинхронный. По умолчанию true (асинхронный), то есть в этой строке третий аргумент можно не указывать, если выполняется асинхронный запрос (что в большем случае и требуется).

А вот выводится ответ сервера в этой строке:
obj.parentNode.innerHTML = res.responseText;
в функции resultRequest(), которая определена как функция обработки события, возникающего при смене статуса объекта (xmlhttp):
xmlhttp.onreadystatechange = function() {
resultRequest(obj, xmlhttp);
}

Домашнее задание:
a) еще раз и внимательно прочесть об ajax;
б) в вызове функции запроса к серверу sendInquery(this, 1) два аргумента. Что означает второй я уже говорил - это индекс в массиве сервера $usr определяющий тип данных: номер телефона или номер icq. Поэтому у полей телефона и icq эти значения разные. Первый аргумент передаваемый в функцию, это ссылка на объект, который вызвал событие onclick.
Как переводится с английского слово THIS? Проследить как эта ссылка передается в функцию resultRequest(), открыть учебник (справочник) по javascript, и изучив свойства parentNode и innerHTML, ответить что же происходит в строке:
obj.parentNode.innerHTML = res.responseText;
в) открыть эту страницу примера, например, в FF, запустить firebag (это такая кнопочка в нем, с тараканом), при наличии этого расширения в нем (если не установлено, установить). Щелкая по полям вызова номера телефона и icq, просмотреть в firebag-->Сеть-->XRH запросы к серверу, а в firebag-->HTML содержимое страницы до и после запросов к серверу.

>Где мне делать запрос на выборку из базы ...

А как вы определяете другие действия в других ситуациях, по другим запросам? Вы думаете ваш запрос "отправить сообщение" чем-то отличается от ajax запроса? Вы ведь как-то определяете что получен id и надо выполнить нечто в ответ на это. Так какие затруднения?
Я уже писал, что если вы будет обращаться ajax запросом к тому же скрипту, который у вас выводит и эту страницу (что в общем оправдано, ради такого простого не стоит рожать отдельный скрипт), то вам надо изменить имя переменной, так как у вас она в двух ссылках одна и та же. В строке формирующей ajax запрос (вы уже знаете где), замените id, например, на aid, и тут переписать:
if(isset($_GET['aid'])) {
$id = (int)$_GET['aid'];
....
}
Надо ли пояснять, что в этом месте вы и должны делать запрос к базе, который я имитировал получением данных из обычного массива?

Домашнее задание:
дано - переменная $id, которая определяет id записи о пользователе, и переменная $v, которая определяет значение какого поля "telefon" (на английском правильно phone) и столбца "isq" (правильно icq). Какими способами можно получить эти значения?

************

В следующем вашем посте уже я буду слушать ваши ответы, как вы изучили, и что вы поняли.

  Ответить  
 
 автор: sega_z   (29.05.2012 в 22:43)   письмо автору
 
   для: confirm   (29.05.2012 в 22:28)
 

Да ... вот это загрузка мозга .... Я думал все будет гораздо проще.

Думаю, что причина моей тупости в том, что я плохо знаю JS и вообще не знаю AJAX.
А самое ужасное то, что никак не получается найти время для изучения!
Ох... мне бы Ваши знания ....

Ладно, на сегодня закончим, завтра со свежей головой и новыми знаниями ещё раз перечитаю все посты данной темы, включая Ваш пример, и заново попробую все переварить....
Ещё раз спасибо Вам, до связи.

  Ответить  
 
 автор: confirm   (29.05.2012 в 22:54)   письмо автору
 
   для: sega_z   (29.05.2012 в 22:43)
 

Оно конечно проще назвать себя тупым, чем найти 5 минут времени, чтобы найти в сети описание parentNode и innerHTML (а это объем строк меньший, чем в анекдотах, на которые возможно вы находите время).
Чтобы написать и на jquery $('#as').parent(), надо тоже хорошо представлять, что же такое это - PARENT.

>Я думал все будет гораздо проще.

Вот когда прочтете и внимательно проанализируете код примера (большая часть которого, это просто создание объекта xmlhttp, и который анализировать глубоко и не надо, по крайней мере сейчас), то поймете, что проще некуда, и я гораздо больше написал, чем следовало бы, и чем вы прочли в заданном мною.

  Ответить  
 
 автор: sega_z   (29.05.2012 в 22:57)   письмо автору
 
   для: confirm   (29.05.2012 в 22:54)
 

Может упростить задачу и сделать подмену ссылки "показать номер" с помощью JS уже готовыми $myrow["telefon"] и $myrow["isq"].

Как вы считаете можно так сделать?

  Ответить  
 
 автор: confirm   (29.05.2012 в 23:00)   письмо автору
 
   для: sega_z   (29.05.2012 в 22:57)
 

А может тогда вообще сразу их показывать при наличии? Зачем тогда скрывать их, это что так модно или круто будет? И не надо никаких JS, вывели и все.

Можно сделать, а как я считаю, я написал выше.

  Ответить  
 
 автор: sega_z   (29.05.2012 в 23:50)   письмо автору
 
   для: confirm   (29.05.2012 в 23:00)
 

Это не мода, это делается для того, чтобы номера телефонов не были проиндексированы поисковыми системами, а теги <noindex></noindex> можно применять только для Яндекса и Рамблера, другие их игнорируют.

Можно конечно Java скриптом закрыть, но тот же Google и там все от сканирует и занесет в поиск, по крайне мере, так говорят.

Поэтому, я изначально говорил, что номеров не должно быть в каком либо коде страницы.
А это только AJAX, значит им и будем решать задачу.

  Ответить  
 
 автор: confirm   (30.05.2012 в 00:03)   письмо автору
 
   для: sega_z   (29.05.2012 в 23:50)
 

Ну Яшка вообще-то начал шерстить такие запросы, так что в этом плане ajax не спасение. Скрыть можно и без ajax, но...

Если говорить более серьезно, то у меня есть не только домашние задания, но и вопросы к коду отношения не имеющие, но которые тоже требуют ответа. Например, судя по логике "отправить сообщение", речь идет не о себе любимом, так как отправлять самому себе так же глупо, как и отвечать самому себе (заметили, что на этом форуме вы не можете редактировать свое сообщение, если на него уже есть ответ, но тем не менее разрешено "отвечать себе", это как болезнь - разговаривать с собою).

Следовательно речь о другом пользователе. Вот и возникают вопросы, но из правовой области:
а) как вы считаете, являются ли такие личные данные как номер телефона, icq, emal, адрес, и т.п., публичными данными?
б) кто должен разрешать вывод этих данных - вы или их владелец?
в) помещение пользователем таких данных в базу, это автоматическая передача прав на их использование вам, или же нет?
г) если вы понимаете, что это не публичные данные, то почему вы их выставляете?
д) если понимая конфиденциальность этих данных и кто решает вопрос об их публикации, почему ваша таблица не содержит условие пользователя, определяющее разрешение на вывод их?


Как видите, вы должны думать не только о том, что, как, и где вывести, но и о других вопросах - в первую очередь не об аппетитах поисковиков, а правах пользователя.

Не ждите готовых скриптов, которые на 100% тютелька в тютельку вам подходят, так как не все из вашего известно. Обычно пишутся "тезисы", которые нужно подправить, зачастую лишь слегка. А я вам "разжевал" все, от и до. Вам только осталось бы дописать в самом начале кода вашей страницы следующее:
<?php
if(isset($_GET['aid'])) {
   
$id = (int)$_GET['aid'];
   
$v = (int)$_GET['v'];
   
//и запрос к базе, самым простым способом
   
$q mysql_query("SELECT `phone`, `icq` FROM `table` WHERE `id`=$id");
   
$q mysql_fetch_row($q);
   
header('Content-type: text/html; charset=utf-8'); //необходимо для текстовых данных
   
echo $q[$v-1];
   exit; 
}
?>

Надеюсь, вы бы сами cмогли добавить к этому проверку удачного запроса, наличие таковых значений, и истинны ли $id и $v, и необходимо ли вообще делать запрос. Но вы на этом споткнулись, не говоря уж о js-коде, в котором вам желательно было понять всего три строки.

Но сначала ответьте себе на "правовые" вопросы, а уж потом...

Вот так вот, и никак иначе.

  Ответить  
 
 автор: sega_z   (30.05.2012 в 01:45)   письмо автору
 
   для: confirm   (30.05.2012 в 00:03)
 

Вообще то все правовые вопросы решаются и заносятся в "Пользовательское соглашение" до получения от пользователей какой либо информации. И пока пользователь не согласится с этим соглашением и не даст согласие на обработку его персональных данных, он не сможет занести на сайт какую либо информацию. В этом соглашении так же есть информация о возможной обработке информации пользователя поисковыми системами.

Вот например, если я напишу на этом форуме свои персональные данные, они могут появиться в поиске Яндекса?
Смогу ли я через месяц удалить всю свою информацию с этого сайта?

Если человек сам изъявил желание показать свою информацию всем окружающим его людям, то почему ему в этом нужно препятствовать. Пожелал удалить всю свою информацию - пожалуйста, все для него.

Человек, который сам на заборе написал свой номер телефона или другие контактные данные понимает, что его номер может записать любой другой человек или передать третьему лицу и вряд ли будет потом обвинять в этом забор, да и забор в принципе не в чем и не виноват, т.к. человек сам опубликовал свою информацию.

>Как видите, вы должны думать не только о том, что, как, и где вывести, но и о других вопросах - в первую очередь не об аппетитах поисковиков, а правах пользователя.

По моему я наоборот пытаюсь решить вопрос об ограничении обработки информации поисковыми системами.

Именно для защиты персональной информации пользователей и делают в первую очередь запрет на индексацию поисковыми системами личной информации. Чтобы она хранилась только в том месте, куда её разместил пользователь.

Тем более бывают случаи, когда люди допускают ошибки в номере своего телефона и выставляют его публично, в итоге он попадает в поисковые системы, а у этого номера есть свой хозяин и что тогда, его номер разойдется по всем поисковым системам и он замучается их оттуда убирать.

Если я иногда называю себя тупым в программировании, т.к. не учился этому (для меня это своего рода хобби), это не значит что я тупой в остальных вопросах.

И вообще разве поисковики спрашивают разрешение на копирование информации с сайтов в свою базу данных?

Че то тема не совсем по теме пошла. Эту тему можно раздуть на много страниц и все равно у каждого собеседника будет свое мнение, я не любитель подобных дискуссий.

Огромное вам спасибо, за очередную помощь с кодом!!!

Но изучением AJAXа я наверно все таки займусь, как будет время, очень удобный язык программирования, в будущем пригодится!

  Ответить  
 
 автор: confirm   (30.05.2012 в 02:11)   письмо автору
 
   для: sega_z   (30.05.2012 в 01:45)
 

>Вообще то все правовые вопросы решаются и заносятся в "Пользовательское соглашение" до получения от пользователей какой либо информации. И пока пользователь не согласится с этим соглашением и не даст согласие на обработку его персональных данных, он не сможет занести на сайт какую либо информацию. В этом соглашении так же есть информация о возможной обработке информации пользователя поисковыми системами.

То есть вы насильно заставляете пользователя согласиться на использование вами его личных данных? Можно конечно и так, но согласитесь, что определять пользователем что из его данных вы можете выставлять, это куда более корректное отношение к пользователю, нежели ваше?

>Вот например, если я напишу на этом форуме свои персональные данные, они могут появиться в поиске Яндекса? Смогу ли я через месяц удалить всю свою информацию с этого сайта?

Этот вопрос не мне адресуйте, а владельцам этого форума.

>Если человек сам изъявил желание показать свою информацию всем окружающим его людям, то почему ему в этом нужно препятствовать.

Судя по первому абзацу вашему, это не его желание, это вы его в такие рамки ставите.

>По моему я наоборот пытаюсь решить вопрос об ограничении обработки информации поисковыми системами.

Именно для защиты персональной информации пользователей и делают в первую очередь запрет на индексацию поисковыми системами личной информации. Чтобы она хранилась только в том месте, куда её разместил пользователь.


Я ваш пользователь Бонд, и поместил свой номер телефона 007. Я, и только я, имею право сообщить его только для Пуаро, а остальным нет.

Вы же сосредоточились исключительно на поисковиках (сюда же отнести ботов-паразитов), считая, что вывалить это для остальных пользователей можно. Среди пользователей может оказаться паразит куда страшнее кеша поисковика.

А правы ли вы? Вряд ли, лично я бы плюнул на ваше "соглашение" будь вы даже самый уникальный из всех уникальных в сети, и ушел. Знаете ли, распоряжаться тем, что принадлежит только мне, на что имею права только я, "на халяву" другим, даже под обещание "у нас все ОК в этом плане", я не дам. И ваши аргументы описанные выше не есть хорошо, есть плохо, даже омерзительно. Ссылка на то, что тем не менее у вас есть пользователи не принимается.

Aja, это не язык программирования.

  Ответить  
 
 автор: sega_z   (30.05.2012 в 13:01)   письмо автору
 
   для: confirm   (30.05.2012 в 02:11)
 

>То есть вы насильно заставляете пользователя согласиться на использование вами его личных данных?

Что за бред вы пишите, вроде умный человек?

Насильно заставлять, это года у человека нет выбора.

Например, если вас не устроит договор купли-продажи автомобиля, разве вы станете его покупать?
А без договора вам автомобиль никто его не продаст. И заставлять вас его покупать никто не будет.

  Ответить  
 
 автор: confirm   (30.05.2012 в 13:13)   письмо автору
 
   для: sega_z   (30.05.2012 в 13:01)
 

А у вас есть выбор? Не видно. Выбор это возможность выбора, и если мне необходимо разместить у вас свой адрес, телефон, к примеру для связи со мной, то будет вежливо предложить выбрать - показывать его для других или нет. Вот это выбор, а о каком вы бреде говорите, я не понимаю.
Нет у вас выбора, у вас только ваше условие. Покупка авто, это совсем иное.

  Ответить  
 
 автор: sega_z   (30.05.2012 в 13:30)   письмо автору
 
   для: confirm   (30.05.2012 в 13:13)
 

> ... будет вежливо предложить выбрать - показывать его для других или нет.

Да с чего вы взяли, что я против того, чтобы пользователь сам делал выбор, что именно показывать на каком либо сайте. Именно поэтому я спросил у вас, как можно скрывать номера пользователей от посторонних, именно поэтому модераторы сайтов не позволяют указывать контактные данные в тексте, а только в специально отведенных для этого полях!!!

>Покупка авто, это совсем иное.

Я о том, что если человеку не понравится соглашение, то он и не станет размещать свою информацию на сайте и никто его в этом не будет принуждать.

  Ответить  
 
 автор: confirm   (30.05.2012 в 13:55)   письмо автору
995 байт
 
   для: sega_z   (30.05.2012 в 13:30)
 

На изображении из вашего профиля. Как видите, хозяева этого форума не светят ваш адрес, который вы им доверили, не только для ботов, но и для других пользователей форума. И именно такой подход корректный.
Ваше сравнение с покупкой авто неудачное, уже потому, что в подобных договорах, как то и получение кредита, зачастую и дурят людей, указывая то, что очень важно для заключающего договор, мелким шрифтом, со сноской где-то там на задворках.
Вот ваш соглашение подобно как раз такому договору-обману. Человеку свойственно ошибаться, человек не всегда может оценить последствия своих поступков, которые могут быть весьма плачевные.
Получается, что человек вам доверил, а вы его доверие тиражируете для всех.

Вы спрашивали не о том, как скрыть, а как вывести, и в вашем выводе нет условий. Другими словами, мне доступны телефоны всех ваших пользователей, а как раскручивают на деньги по телефону надо рассказывать?

  Ответить  
 
 автор: sega_z   (30.05.2012 в 15:24)   письмо автору
 
   для: confirm   (30.05.2012 в 13:55)
 

Ваши негативные домыслы и не более того, прошу вас оставить при себе.
Если у вас плохое настроение или ощущение что вокруг одни злодеи, я то тут причем?

Все что мне нужно я услышал, благодарю за информацию!
Всего вам доброго!

  Ответить  
 
 автор: bishake   (29.05.2012 в 12:54)   письмо автору
 
   для: sega_z   (29.05.2012 в 12:47)
 

Вам уже подсказали.
Без jQuery не советую, ибо с ручным использованием XHR (аякс) сложно слишком ИМХО будет для Вас.
<!--<?--> 
<
li><a href="/request/for/number/1">Показать номер</a></li
<
li><a href="/request/for/number/2">Показать номер</a></li
<
li><a href="/request/for/number/3">Показать номер</a></li>
<
script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript"> 
    // $ = jQuery 
    $('a').click(function() { 
        var parent = $(this).parent(); 
        $.get( $(this).attr('href'), null, function(answ) { 
            parent.html( answ ) 
        }); 
        return false; 
    }); 
</script>


Расскажите, что у Вас с аутентификацией. То бишь, каким образом Вы узнаёте, что человек уже посещал эту страницу, нажимал на ссылки? Если у Вас вообще это не реализовано, может Вам и без аякса в куках хранить сойдёт?

  Ответить  
 
 автор: confirm   (29.05.2012 в 12:57)   письмо автору
 
   для: bishake   (29.05.2012 в 12:54)
 

Я так считаю - если проект сложен в динамическом плане, то jquery в помощь. А вот "Без jQuery не советую, ибо с ручным испольщованием XHR (аякс) сложно слишком ИМХО будет для Вас." - это уже ни к чему, так как готовый текст этого действа без jQuery он способен будет также скопировать себе.

  Ответить  
 
 автор: bishake   (29.05.2012 в 13:13)   письмо автору
 
   для: confirm   (29.05.2012 в 12:57)
 

Ваш код в студию :). Мне честно даже искать лень.

  Ответить  
 
 автор: sega_z   (29.05.2012 в 13:17)   письмо автору
 
   для: bishake   (29.05.2012 в 12:54)
 

Нет ни какой аутентификациии. Без разницы сколько раз и кто нажмет ссылку.
Главное чтобы до обновления всей страницы показывался только текст, без ссылки.

Не понятно, где в вашем коде формируется "текст", который должен заменить ссылку?

  Ответить  
 
 автор: bishake   (29.05.2012 в 12:50)   письмо автору
 
   для: confirm   (29.05.2012 в 11:51)
 

Да если честно, "ради решения мелочного вопроса" просто лень писать длинные getElementsByClassName, getElementsByTagName, childNodes и т.д. и т.п.
Поэтому, уж извините меня :)

  Ответить  
 
 автор: softtimer   (21.08.2013 в 14:53)   письмо автору
 
   для: sega_z   (28.05.2012 в 21:44)
 

Вот пример как сделать всплывающие блоки с текстом из БД, там всё описано.

  Ответить  
 
 автор: thisismy   (21.08.2013 в 22:28)   письмо автору
 
   для: sega_z   (28.05.2012 в 21:44)
 

Насколько я понял, нужно скрыть номер телефона от всяких роботов, чтоб человек, если ему нужно, мог отобразить номер, щелчком по ссылке.
Чтобы номер не присутствовал на странице, его нужно брать аяксом, типа:
<span onclick="ajax(this);">Показать</span>
<script type="text/javascript">
function ajax(ob){
// тут пропущены коды аякс-получения данных
ob.innerHTML=req.responseText;
}
</script>


Но можно упростить, так как нет ничего страшного, если номер будет в самом скрипте:

code]<span onclick="ajax(this);">Показать</span>
<script type="text/javascript">
function ajax(ob){
// без всяких аякс-получений
ob.innerHTML='тут номер';
}
</script>[/code]
Думаю, никакой робот не станет искать номера телефонов внутри яваскрипта

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования