Показать сообщение отдельно
  #1 (permalink)  
Старый 23.05.2010, 19:25
Новичок на форуме
Отправить личное сообщение для Berenold Посмотреть профиль Найти все сообщения от Berenold
 
Регистрация: 23.05.2010
Сообщений: 9

Помогите соединить php и JavaScript
Доброго времени суток. Занялся изучением javaScript. И вот решил написать следующую штуку:
show/hide для текста который хранится в базе данных. Изначально мы не знаем сколько записей у нас в таблице и все нужно делать через цикл.
Таблица базы:
Код:
CREATE TABLE `ben` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `post` longtext NOT NULL,
  `bentitle` varchar(255) NOT NULL,
  `benpost` longtext NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=cp1251;
"post" - просто текст который пишется перед скрываемым,
"bentitle" - название услуги(собственно по нажатию которой и должен разворачиваться скрытый текст)
"benpost" - описание услуги(show/hide текст)

config.php:
<?php
$db_host = 'localhost';
$db_user = 'root';
$db_pasw = 'Angelbk';
$db_name = 'syit2';
// Соединяемся, выбираем базу данных 
$db_info = mysql_connect($db_host, $db_user, $db_pasw) or die("Could not connect : " . mysql_errno() . " " . mysql_error());
mysql_select_db($db_name, $db_info) or die("Select database not successfull : " . mysql_errno() . " " . mysql_error()); 
?>


funct.php:
<?php 
require_once("config.php"); 

//указываем нужную кодировку 
mysql_query ("set character_set_client='cp1251'"); 
mysql_query ("set character_set_results='cp1251'"); 
mysql_query ("set collation_connection='cp1251_general_ci'"); 

function gettable($tablename) //функция которая осуществляет чтение записи в таблице выводит ее на экран
{
    //результирующий набор данных хранится в переменной $sql
    $sql = mysql_query("SELECT * FROM $tablename");
    $i = 0; 
    while ($tablerows = mysql_fetch_row($sql))
    {
    //теперь в цикле для каждой полученной строки сделаем вывод 
    //$tablerows[1] соответствует полю "первичный текст" 
    //$tablerows[2] соответствует полю "заголовок услуги" 
    //$tablerows[3] соответствует полю "текст услуги" 
	echo("$tablerows[1]<br>$tablerows[2]<br>$tablerows[3]");
    }
}
?>


inex.php:
<?php 
require_once("funct.php"); 
gettable(ben);
?>

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

После чего взял вот такой JavaScript
java.php:
<style>
.myViewLinks { display: none; }
</style>

<script>
 // Обворачиваем функцию toggle в локальное замыкание:
var toggle = function() {
    // Ссылка на текущий открытый div:
    var currentDiv = null;

    // Функция для "раскрытия" элемента:
    function open(divElement) {
        // Тут можно добавить эффект "плавного" открытия:
        divElement.style.display = "block";
        currentDiv = divElement;
    }

    // Функция для "закрытия" элемента:
    function close(divElement) {
        // Тут можно добавить эффект "плавного" закрытия:
        divElement.style.display = "none";
        currentDiv = null;
    }

    // Возвращаем функцию, которая будет вызываться по toggle()
    return function(divID) {
	// Получаем элемент из DOM
	var divElement = document.getElementById(divID);
	// Если такой есть:
	if (divElement) {
	    // Если уже открыт этот div, то просто закрываем.
	    if (divElement === currentDiv) {
	        close(currentDiv);
	    // Если открыт другой div, то закрываем и открываем текущий:
	    } else if(currentDiv != null) {
	        close(currentDiv);
	        open(divElement);
	    // Иначе - просто открываем:
	    } else open(divElement);
	}
    }
  // Вызываем нашу "обертку", теперь toggle() вызывает функцию, описанную по "return"
  }();
</script>


<a href="javascript://" onClick="toggle('div1');return false;">Блок скрытого текста один</a>
<div class="myViewPost" id="div1">
Сдесь содержится текст который показывается и скрывается</div>
<br />

<a href="javascript://" onClick="toggle('div2');return false;">Блок скрытого текста два</a>
<div class="myViewPost" id="div2">
Сдесь содержится текст который показывается и скрывается
</div>

Опять таки все нормально работает открывается и закрывается.
Попробовал соединить funct.php и java.php получилась следующее:
funct_java.php
<style>
.myViewLinks { display: none; }
</style>

<script language="JavaScript">
 // Обворачиваем функцию toggle в локальное замыкание:
var toggle = function() {
    // Ссылка на текущий(current) открытый div:
    var currentDiv = null; 

    // Функция для "раскрытия" элемента:
    function open(divElement) {
        // Тут можно добавить эффект "плавного" открытия:
        divElement.style.display = "block";
        currentDiv = divElement;
    }

    // Функция для "закрытия" элемента:
    function close(divElement) {
        // Тут можно добавить эффект "плавного" закрытия:
        divElement.style.display = "none";
        currentDiv = null;
    }

    // Возвращаем функцию, которая будет вызываться по toggle()
    return function(divID) {
	// Получаем элемент из DOM
	var divElement = document.getElementById(divID);
	// Если такой есть:
	if (divElement) {
	    // Если уже открыт этот div, то просто закрываем.
	    if (divElement === currentDiv) {
	        close(currentDiv);
	    // Если открыт другой div, то закрываем и открываем текущий:
	    } else if(currentDiv != null) {
	        close(currentDiv);
	        open(divElement);
	    // Иначе - просто открываем:
	    } else open(divElement);
	}
    }
  // Вызываем нашу "обертку", теперь toggle() вызывает функцию, описанную по "return"
  }();
</script>



<?php 
require_once("config.php"); 
 
mysql_query ("set character_set_client='cp1251'"); 
mysql_query ("set character_set_results='cp1251'"); 
mysql_query ("set collation_connection='cp1251_general_ci'"); 

function gettable($tablename) //функция которая осуществляет чтение записи в таблице выводит ее на экран
{
    //результирующий набор данных хранится в переменной $sql
    $sql = mysql_query("SELECT * FROM $tablename");
    $i = 0; 
    while ($tablerows = mysql_fetch_row($sql))
    {
	$i=$i+1;
	echo("
	    $tablerows[1]
        <a href="$i" onClick="toggle('$tablerows[2]');return false;">$tablerows[2]</a>
        <div class="myViewLinks" id="$tablerows[2]">
		    <br>
		    $tablerows[3]
     		<br>
        </div>
        ");
    }
}
?>


соответственно переделываем
index.php:
<?php 
require_once("funct_java.php"); 
gettable(ben);
?>

Вместо списка который мне нужно получить я получаю пустую страницу. помогите пожалуйста соединить эти два скрипта.
PS. Простите что так много текста просто хотел как можно подробнее описать все.

Последний раз редактировалось Berenold, 23.05.2010 в 21:32.
Ответить с цитированием