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

HTML+CSS+JavaScript

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

 

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

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

тема: Чат (первые шаги) =)
 
 автор: Kreg-Heg   (23.04.2007 в 14:20)   письмо автору
 
 

Есть страница с формой, первая страница чата где вводится login пользователя



... 
<form method='post' action='inchat.php> 
login<br> 
<input type='text' name='nick' size='15'><br> 
<input type='submit' value='voiti'> 
</form> 
... 


php скрипт обработчик


<html> 
<head> 
<script language='JavaScript'> 
function gonick()  
{  
  window.frames['polz'].nick = "<?php echo $_POST['nick'?>";  
  window.frames['polz'].f();  

</script> 
</head> 

<?php 
if ($_POST['nick']==''){ 
?> 
<body> 
<script language='JavaScript'> 
top.location.href='http://www.myhost.ru/my.html'; 
</script> 
</body> 
</html> 
<?php 


else 

?> 

<frameset onload='gonick()' rows='13%,5%,*,13%' frameborder=1 bordercolor='#0000FF'> 
 <frame name='bannern'  frameborder=1  src='rv/bannern.html' scrolling=no marginwidth=1 marginheight=1> 
 <frame name='verhn'  frameborder=1 src='rv/verhn.html' scrolling=no marginwidth=1 marginheight=1> 
  <frameset  cols='75%,25%' frameborder=1 bordercolor='#0000FF'> 
      <frame name='glavn' marginwidth=10 marginheight=10 frameborder=1 src='rv/glavn.html' scrolling=Yes> 
             <frame name='polz' frameborder=1 src='rv/polz.html' scrolling=Yes marginwidth=1 marginheight=1> 
  </frameset> 
 <frame name='nizn'  frameborder=1 src='rv/nizn.html' scrolling=no marginwidth=1 marginheight=1> 
</frameset> 
</html> 
<?php 

?> 


фрейм polz.html:


<html> 
<head> 
<script language='JavaScript'> 
function f(){ 
document.write(nick); 

</script> 
</head> 
<body> 
 <script> 
      var nick; 
 </script> 
</body> 
</html> 


В поле формы пользватель вводит ник. Нажимает кнопку войти. Открывается страница
которая выводит фреймы. Ник пользователя появляется в правом фрейме. С этим все
нормально.
Если открыть снова первую страницу и зайти еще под одним ником, то появляется
все тоже самое, а того первого ника разумеется не видно =)))
Как сделать, чтобы пользователи видели друг друга?

   
 
 автор: coloboc66   (23.04.2007 в 15:00)   письмо автору
 
   для: Kreg-Heg   (23.04.2007 в 14:20)
 

Вместо document.write() использовать document.getElementById().innerHTML="здесь ники";

   
 
 автор: Kreg-Heg   (23.04.2007 в 15:25)   письмо автору
 
   для: coloboc66   (23.04.2007 в 15:00)
 


<html>
<head>
<script language='JavaScript'>
function f(){
document.getElementById(что вот тут писать?).innerHTML=nick;
}
</script>
</head>
<body>
  <script>
  var nick;
  </script>
</body>
</html>

   
 
 автор: Kreg-Heg   (23.04.2007 в 15:35)   письмо автору
 
   для: Kreg-Heg   (23.04.2007 в 15:25)
 

Попробовал сделать вот так:

<html>
<head>
<script language='JavaScript'>
function f(){
document.getElementById('qw').innerHTML=nick;
}
</script>
</head>
<body>
  <script>
  var nick;
  </script>
<p id='qw'></p>
</body>
</html>

Все равно новый пользователь не видит тех кто там уже есть.

   
 
 автор: coloboc66   (23.04.2007 в 15:42)   письмо автору
 
   для: Kreg-Heg   (23.04.2007 в 15:35)
 

Так это вам наверно нужно смотреть темы по списку пользователей on-line. Это на РНР делать нужно, я так думаю...

   
 
 автор: Kreg-Heg   (24.04.2007 в 14:23)   письмо автору
 
   для: coloboc66   (23.04.2007 в 15:42)
 

Смотрите, в итоге сделал так: каждый пользователь после отправки формы для ника заносится в базу данных и возвращает свой ник последнему элементу массива $mas[] Также есть переменная $d которая хранит количество ников.
То есть:

<?php
for ($i 0$i $d$i++){
echo 
$mas[$i];}
?>

Выводит все ники которые есть в базе в данный момент. Это работает. С этим разобрался.

Теперь мне нужно передать этот массив аналогичному массиву на javascript в фрейме polz и вывести его, это я пытаюсь делать так: после загрузки самого первого фрейма вызываю функцию
в обработчике gonick()

<head>
<script language='JavaScript'>
function gonick() { 
var j;
for (j=0; j<d; j++){
  window.frames['polz'].nick[j] = "<?php echo $mas[j?>"; } //пытаюсь передать массиву nick[]  
                                               //(который находится в фрейме polz ) все элементы масси $mas[]

  window.frames['polz'].d = <?php echo $str ?>; //пытаюсь передать переменной d фрейма polz
                                                                                       //значение переменной $d (кол-во ников)
  window.frames['polz'].f();  //вызываю функцию f() фрейма polz
}
</script>
</head>


Вот код фрейма в который мне нужно передать и вывести ники


<html>
<head>
<script language='JavaScript'>
function f(){
var j;
for (j=0; j < d; j++){
document.getElementById('qw').innerHTML=nick[j];} //так пытаюсь вывести ники, которые должны 
                                                                                                 //были передаться из скрипта обработчика
}
</script>
</head>
<body>
  <script>
  var d;
  var nick = new array();
  </script>
<p id='qw'></p> //кстате как поступать здесь? 
</body>
</html>


Вот. И в итоге я ввожу ник. Нажимаю войти. Ник действительно вводится в базу. Дальше загружаются фреймы и во фрейме polz ничего не выводится. Значит или ники из базы не передались в нужный массив или я просто совершенно не правильно пытаюсь эти ники вывести.
Кому не лень посмотри, подскажите!

   
 
 автор: Kreg-Heg   (24.04.2007 в 14:47)   письмо автору
 
   для: Kreg-Heg   (24.04.2007 в 14:23)
 

вот еще цыкл немного переправил, так наверно правильнее будет

function gonick() 

var j;
<?php $j=0?>
var d = <?php echo $str ?>;
for (j=0; j<d; j++){
  window.frames['polz'].nick[j] = "<?php echo $mas[$j];  $j++ ?>"; }
...

   
 
 автор: bronenos   (24.04.2007 в 14:57)   письмо автору
 
   для: Kreg-Heg   (24.04.2007 в 14:47)
 

это полная глупость
можете открыть получившийся код в блокноте и понять, почему
php и js вещи разные
не пытайтесь их так скрестить

   
 
 автор: bronenos   (24.04.2007 в 14:50)   письмо автору
 
   для: Kreg-Heg   (24.04.2007 в 14:23)
 

innerHTML += nick[j] + ', '

   
 
 автор: Kreg-Heg   (24.04.2007 в 14:57)   письмо автору
 
   для: bronenos   (24.04.2007 в 14:50)
 

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

   
 
 автор: coloboc66   (24.04.2007 в 15:28)   письмо автору
 
   для: Kreg-Heg   (24.04.2007 в 14:57)
 

Вы сначала убедитесь, что РНР-скрипт выдает правильный массив с никами, пусть это будет $nick_arr. Далее
1.C помощью HTML размещаете на странице
<div id=nick_div ><table id=tab_nick><tbody></tbody></table></div>

2. Далее:

<script>
//Передаете  ява-скрипту во фрейме $nick_arr так:
window.frames['polz'].nick= "<?php echo $nick_arr?>";
//делаете цикл
for (i=0;i<nick.length;i++)
{
var tr_nick=document.createElement('tr');
document.getElementById('tab_nick').appendChild(tr_nick);
var td_nick=document.createElement('td);
document.getElementById('tr_nick').appendChild(td_nick);
td_nick.innerHTML=nick[i];
}
</script>

Я бы делал так...

   
 
 автор: Kreg-Heg   (24.04.2007 в 16:43)   письмо автору
 
   для: coloboc66   (24.04.2007 в 15:28)
 

Ни капли не понял из этого варианта. Всмысле зачем так.

   
 
 автор: coloboc66   (24.04.2007 в 16:50)   письмо автору
 
   для: Kreg-Heg   (24.04.2007 в 16:43)
 

В таблицу циклом добавляются строки. В каждой строке - ячейка с ником из массива.

   
 
 автор: Kreg-Heg   (25.04.2007 в 00:09)   письмо автору
 
   для: coloboc66   (24.04.2007 в 16:50)
 

Скажите, а возможно целиком передать массив из пхп в массив js??? Если да, то как?

   
 
 автор: RMW   (25.04.2007 в 00:49)   письмо автору
 
   для: Kreg-Heg   (25.04.2007 в 00:09)
 

ПХП печатает некий текст (исходник JS, HTML) на странице, страница это тоже текст.
Текст передаётся браузеру и интерпретируется.

var a = new Array()
a[0]='<?php echo $mas[0];?>';
a[1]='<?php echo $mas[1];?>';
a[2]='<?php echo $mas[2];?>';


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

   
 
 автор: coloboc66   (25.04.2007 в 09:21)   письмо автору
 
   для: RMW   (25.04.2007 в 00:49)
 

to RMW: а так нельзя разве:
var a=<? echo $mas;?>;
И в элементах массива a автоматически получим элементы массива $mas
?

   
 
 автор: bronenos   (25.04.2007 в 09:56)   письмо автору
 
   для: coloboc66   (25.04.2007 в 09:21)
 

<?php
$tmp 
= array();
foreach (
$mas as $k=>$v$tmp[] = "'$k' : '$v'";
print 
'var mas = {' implode (', '$tmp) . '};';
?>

   
 
 автор: Kreg-Heg   (25.04.2007 в 11:04)   письмо автору
 
   для: bronenos   (25.04.2007 в 09:56)
 

Массив из пхп перевел в массив на яваскрипте. Теперь осталось только передать его целиеом во фрейм. Скажите возможно ли это сделать не по элементам, а целиком? Если да, то каким образом =)

   
 
 автор: coloboc66   (25.04.2007 в 11:27)   письмо автору
 
   для: Kreg-Heg   (25.04.2007 в 11:04)
 

"Массив из пхп перевел в массив на яваскрипте" - каким образом?
Так не выходит:
window.frames['polz'].nick= "<?php echo $nick_arr; ?>";
?

   
 
 автор: Kreg-Heg   (25.04.2007 в 12:37)   письмо автору
 
   для: coloboc66   (25.04.2007 в 11:27)
 

Нет, я сделал вот так:

var i;
var a = new Array();
<?php $j 0 ?>;
var str = <?php echo $str ?>;// кол-во элементов
for (i=0; i<str; i++){
a[i]="<?php echo $mas[$j?>";
<?php $j $j 1 ?>;
}


Теперь только передать его.

   
 
 автор: bronenos   (25.04.2007 в 15:05)   письмо автору
 
   для: Kreg-Heg   (25.04.2007 в 12:37)
 

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

   
 
 автор: Kreg-Heg   (25.04.2007 в 16:39)   письмо автору
 
   для: bronenos   (25.04.2007 в 15:05)
 

вы правы. все элементы становятся равные первому ((

   
 
 автор: RMW   (25.04.2007 в 16:37)   письмо автору
 
   для: coloboc66   (25.04.2007 в 09:21)
 

Я PHP не знаю, вам виднее.
Всё зависит от того, что именно печатает
это <? echo $mas;?>
Я полагаю что-то вроде ['rtrt','erhhyhuter','oiuoi'] ?

   
 
 автор: bronenos   (25.04.2007 в 16:46)   письмо автору
 
   для: RMW   (25.04.2007 в 16:37)
 

если вы это напишите, и переменная представляет собой массив, то вы увидите, как ни странно, слово Array, а то, что вы хотите можно сделать так:
print implode (', ', $array);

   
 
 автор: Kreg-Heg   (25.04.2007 в 16:51)   письмо автору
 
   для: bronenos   (25.04.2007 в 16:46)
 

Вот в поиске нашел перевод массива из пхп в явускрипт


<script language='JavaScript' type='text/javascript'> 
<!-- 
<?php 
      
if(count($array_position) > 1
      { 
        echo 
"var id_position_choose = new Array(".implode(",",$array_position).");"
      } 
      else 
      { 
        echo 
"var id_position_choose = new Array();"
        echo 
"id_position_choose[0] = ".$array_position[0].";"
      } 
?> 
//--> 
</script>


сейчас проверю будет он работать у меня или нет

   
 
 автор: bronenos   (25.04.2007 в 16:58)   письмо автору
 
   для: Kreg-Heg   (25.04.2007 в 16:51)
 

ася 4110863
стучись, разберемся

   
 
 автор: Kreg-Heg   (25.04.2007 в 23:13)   письмо автору
 
   для: bronenos   (25.04.2007 в 16:58)
 

При помощи bronenosa массив передан во фрейм, а вот предложенный код вывода работать не хочет.


<html> 
<head> 
<script language='JavaScript'> 
function savearr (arr) {
mas = arr;  // этот самый массив 
for (i=0;i<mas.length; i++) 

var tr_nick=document.createElement('tr'); 
document.getElementById('tab_nick').appendChild(tr_nick); 
var td_nick=document.createElement('td'); 
document.getElementById('tr_nick').appendChild(td_nick); 
td_nick.innerHTML=mas[i]; 
}
}
</script> 
</head> 
<body> 
<script>
var mas = new array();
</script>
<div id=nick_div >
<table id=tab_nick>
<tbody>
</tbody>
</table>
</div>
</body> 
</html>

   
 
 автор: Kreg-Heg   (25.04.2007 в 23:54)   письмо автору
 
   для: Kreg-Heg   (25.04.2007 в 23:13)
 

coloboc привет ))))))

   
 
 автор: coloboc66   (26.04.2007 в 09:26)   письмо автору
 
   для: Kreg-Heg   (25.04.2007 в 23:54)
 

Вот здесь ошибка:

...
document.getElementById('tr_nick').appendChild(td_nick);
...

Нужно так:

...
tr_nick.appendChild(td_nick);
...

   
 
 автор: Kreg-Heg   (26.04.2007 в 09:44)   письмо автору
 
   для: coloboc66   (26.04.2007 в 09:26)
 

спасибо, теперь работает

   
Rambler's Top100
вверх

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