|
|
|
| Есть страница с формой, первая страница чата где вводится 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>
|
В поле формы пользватель вводит ник. Нажимает кнопку войти. Открывается страница
которая выводит фреймы. Ник пользователя появляется в правом фрейме. С этим все
нормально.
Если открыть снова первую страницу и зайти еще под одним ником, то появляется
все тоже самое, а того первого ника разумеется не видно =)))
Как сделать, чтобы пользователи видели друг друга? | |
|
|
|
|
|
|
|
для: Kreg-Heg
(23.04.2007 в 14:20)
| | Вместо document.write() использовать document.getElementById().innerHTML="здесь ники"; | |
|
|
|
|
|
|
|
для: 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: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>
|
Все равно новый пользователь не видит тех кто там уже есть. | |
|
|
|
|
|
|
|
для: Kreg-Heg
(23.04.2007 в 15:35)
| | Так это вам наверно нужно смотреть темы по списку пользователей on-line. Это на РНР делать нужно, я так думаю... | |
|
|
|
|
|
|
|
для: 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: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++ ?>"; }
...
|
| |
|
|
|
|
|
|
|
для: Kreg-Heg
(24.04.2007 в 14:47)
| | это полная глупость
можете открыть получившийся код в блокноте и понять, почему
php и js вещи разные
не пытайтесь их так скрестить | |
|
|
|
|
|
|
|
для: Kreg-Heg
(24.04.2007 в 14:23)
| | innerHTML += nick[j] + ', ' | |
|
|
|
|
|
|
|
для: bronenos
(24.04.2007 в 14:50)
| | ок. сделал так. Тока все равно проблема не в этом, потому что в моем изначальном варианте последний ник все равно должен вывестись во фрейм. | |
|
|
|
|
|
|
|
для: 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>
|
Я бы делал так... | |
|
|
|
|
|
|
|
для: coloboc66
(24.04.2007 в 15:28)
| | Ни капли не понял из этого варианта. Всмысле зачем так. | |
|
|
|
|
|
|
|
для: Kreg-Heg
(24.04.2007 в 16:43)
| | В таблицу циклом добавляются строки. В каждой строке - ячейка с ником из массива. | |
|
|
|
|
|
|
|
для: coloboc66
(24.04.2007 в 16:50)
| | Скажите, а возможно целиком передать массив из пхп в массив js??? Если да, то как? | |
|
|
|
|
|
|
|
для: 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 кода" и иже с ним. | |
|
|
|
|
|
|
|
для: RMW
(25.04.2007 в 00:49)
| | to RMW: а так нельзя разве:
var a=<? echo $mas;?>;
И в элементах массива a автоматически получим элементы массива $mas
? | |
|
|
|
|
|
|
|
для: coloboc66
(25.04.2007 в 09:21)
| |
<?php
$tmp = array();
foreach ($mas as $k=>$v) $tmp[] = "'$k' : '$v'";
print 'var mas = {' . implode (', ', $tmp) . '};';
?>
|
| |
|
|
|
|
|
|
|
для: bronenos
(25.04.2007 в 09:56)
| | Массив из пхп перевел в массив на яваскрипте. Теперь осталось только передать его целиеом во фрейм. Скажите возможно ли это сделать не по элементам, а целиком? Если да, то каким образом =) | |
|
|
|
|
|
|
|
для: Kreg-Heg
(25.04.2007 в 11:04)
| | "Массив из пхп перевел в массив на яваскрипте" - каким образом?
Так не выходит:
window.frames['polz'].nick= "<?php echo $nick_arr; ?>";
? | |
|
|
|
|
|
|
|
для: 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 ?>;
}
|
Теперь только передать его. | |
|
|
|
|
|
|
|
для: Kreg-Heg
(25.04.2007 в 12:37)
| | вы не могли перевести массив из php в js указанным способом...
мало того, что я сомневаюсь, что этот метод не должен работать, но, если он и работает, то все элементы массива должны быть одинаковыми
вы учтите, что весь код php выполняется ДО вывода клиенту, и поэтому совмещать операции этих двух языков надо не из разряда "js, выполни php", а "php, сгенерируй код js" | |
|
|
|
|
|
|
|
для: bronenos
(25.04.2007 в 15:05)
| | вы правы. все элементы становятся равные первому (( | |
|
|
|
|
|
|
|
для: coloboc66
(25.04.2007 в 09:21)
| | Я PHP не знаю, вам виднее.
Всё зависит от того, что именно печатает
это <? echo $mas;?>
Я полагаю что-то вроде ['rtrt','erhhyhuter','oiuoi'] ? | |
|
|
|
|
|
|
|
для: RMW
(25.04.2007 в 16:37)
| | если вы это напишите, и переменная представляет собой массив, то вы увидите, как ни странно, слово Array, а то, что вы хотите можно сделать так:
print implode (', ', $array); | |
|
|
|
|
|
|
|
для: 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>
|
сейчас проверю будет он работать у меня или нет | |
|
|
|
|
|
|
|
для: Kreg-Heg
(25.04.2007 в 16:51)
| | ася 4110863
стучись, разберемся | |
|
|
|
|
|
|
|
для: 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:13)
| | coloboc привет )))))) | |
|
|
|
|
|
|
|
для: Kreg-Heg
(25.04.2007 в 23:54)
| | Вот здесь ошибка:
...
document.getElementById('tr_nick').appendChild(td_nick);
...
|
Нужно так:
...
tr_nick.appendChild(td_nick);
...
|
| |
|
|
|
|
|
|
|
для: coloboc66
(26.04.2007 в 09:26)
| | спасибо, теперь работает | |
|
|
|