Ru-Board.club
← Вернуться в раздел «Web-программирование»

» MySql/PHP: общие вопросы

Автор: DmitryKz
Дата сообщения: 10.12.2009 14:43
Подскажите, пожалуйста, новичку в PHP, как решается такая задача:
Мне надо вывести книгу для чтения постранично. В скрипте page.php:

Код:
...<body>
<div id="carrier">
<h1 id="header">Заголовок</h1>
<div id="menucarrier">
<div id="menu"><!-- TemplateBeginEditable name="MenuPages" -->Здесь будет меню<!-- TemplateEndEditable --></div>
</div>
<div id="text">
    <div id="page">
......здесь надо вывести страницу....
</div>
</div>
<div id="navigation">

</div>
<div id="footer">
<p>&copy;&nbsp;Folium Soft, 2009.<br />
</p>
</div>
</div>
</body>
...
Автор: Cheery
Дата сообщения: 10.12.2009 19:39
DmitryKz
PHP&MySQL: Постраничный вывод
если уж речь о теме MySQL/PHP
если же нет mysql, то читайте
PHP: постраничный вывод данных из текстовой базы
и ссылку ниже для регулярного выражения для парсинга данных из текстового файла


Цитата:
И еще вопрос: подскажите сценарий для парсинга html-файла - мне нужно получить только содержимое <body>...</body> Мне нужно в вышеуказанный блок "page" загрузить страницу, минуя все теги определения и т.п. html-файла.

PHP: Регулярные выражения (RegExp, Regular, eregi, preg)
было там вроде
Автор: DmitryKz
Дата сообщения: 10.12.2009 20:11
Cheery
Спасибо, разбираюсь...
Вот такой вопрос: когда я заново вхожу в тот же php файл $GLOBALS тоже инициализируется? То есть занесенные в него ранее из того же php сценария переменные уничтожаются?

Добавлено:
Поясню примером, почему возник вопрос:

Код:
...
<?php

function getfiletso($arr1) {
reset ($arr1);
$val=key($arr1);

if ($val=="pvar") {
$listf=$GLOBALS["listfiles"];
$k=key($listf);

if (!(($k==0) || (($k+1)==count($listfiles)))) $k=$k+$arr1['pvar'];

$html=file_get_contents($listf[$k]);
echo $html;
} else {
$GLOBALS["curdir"]="htmls/".$arr1['id']."/";
$GLOBALS["listfiles"]=glob($GLOBALS["curdir"]."*.html");
$html = file_get_contents($GLOBALS["listfiles"] [0]);

echo $html;
};
}
?>

...
<body>
<div id="carrier">
<h1 id="header">&#1041;&#1080;&#1073;&#1083;&#1080;&#1086;&#1090;&#1077;&#1082;&#1072; &#1089;&#1074;&#1103;&#1090;&#1086;&#1086;&#1090;&#1077;&#1095;&#1077;&#1089;&#1082;&#1080;&#1093; &#1090;&#1077;&#1082;&#1089;&#1090;&#1086;&#1074; &#1077;&#1058;&#1057;&#1054;</h1>
<div id="menucarrier">
<div id="menu"><!-- TemplateBeginEditable name="MenuPages" -->MenuPages<!-- TemplateEndEditable --></div>
</div>
<div id="text">
    <div id="page">
    <?php
     $arrdata=$_GET;
getfiletso($arrdata);
            ?>
</div>
</div>
    
    <div id="navigation">
        <?php
echo '<p><a href="page.php?pvar=-1">Пред.</a>...............<a href="page.php?pvar=1">След.</a></p>';
?>
        </div>             
<div id="footer">
<p>&copy;&nbsp;Copyright, 2009.<br />
</p>
</div>
</div>
</body>

</html>
Автор: Cheery
Дата сообщения: 10.12.2009 21:17
DmitryKz

Цитата:
Вот такой вопрос: когда я заново вхожу в тот же php файл $GLOBALS тоже инициализируется? То есть занесенные в него ранее из того же php сценария переменные уничтожаются?

да
хотите сохранить - читайте про сессии.
Автор: mont
Дата сообщения: 10.12.2009 23:38
Добрый день
Начальство поставило задачу:
Есть два сайта A и B (основной и вспомогательный). Вспомогательный хостится у нас на Apache под Win.
Основной хостится где-то и временами недоступен. По адресу tratra.ru (к примеру) должен открываться основной сайт, если он доступен, иначе вспомогательный.
Можно ли подобное условие прописать с помощью Apache, есть ли стандартное решение? Не хочется изобретать велосипед.
Мне пока пришло в голову только положить скрипт вызываемый по запросу tratra.ru
<?php
function redirectTo($URL)
{
    header ("Location: $URL");
}
ini_set('display_errors',0);
$fp = fsockopen("aaaaaa.ru", 80, $errno, $errstr, 30); # проверяем доступен ли основной сайт
if (!$fp) {
redirectTo("http://bbbbbb.ru"); # открыть вспомогательный сайт B (к примеру)
} else {
redirectTo("http://aaaaaa.ru"); # перейти на основной сервер A
    close($fp);    
    }
?>    
Автор: Crocell
Дата сообщения: 11.12.2009 01:50
mont, а ведь можно обойтись одним сайтом на одном хорошем хостинге, не думали об этом?
Автор: Cheery
Дата сообщения: 11.12.2009 03:11
mont
не надо сваливать вопросы в кучу. вас же не имеет отношения к mysql
почитайте про nginx или же как указывается куча IP для одного имени.
Автор: mont
Дата сообщения: 11.12.2009 23:50
Crocell
К сожалению это зависит не от меня

Cheery
Это вопрос по PHP (я с ним знаком крайне поверхностно), я проверил скрипт в нескольких ситуациях, но не исключаю возможности, что весь скрипт одна большая дыра, если мне кто-нибудь это скажет, я буду очень благодарен.
Автор: Chiz3000
Дата сообщения: 13.12.2009 17:03
Здрасте!
я тут написал скрипт на вывод из базы списка ( в моем случае, списка пользователей)


Код:
<?
/* Переменные для соединения с базой данных */
$hostname = "localhost";
$username = "root";
$password = "";
$dbName = "mysql";
$i=0;

/* Таблица MySQL, в которой хранятся данные */
$userstable = "users";

/* создать соединение */
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
/* выбрать базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die(mysql_error());

$q2 = @mysql_query("SELECT * FROM users");
$number = mysql_num_rows($q2);

if ($number == 0) {
echo "<CENTER><P>Пользователей нет</CENTER>";
}

else {
echo "<CENTER><P>Список пользователей:</CENTER>";
WHILE ($i < $number){
//if(@mysql_num_rows($q2)!=0){
$r2 = @mysql_fetch_array($q2);
echo '<br/>';
echo ''.ucfirst($r2['nick']).'';
echo '<input name="do" type="submit" value="Удалить">';
$i++;
}
}
?>
Автор: andead
Дата сообщения: 13.12.2009 17:15
заведите в форме скрытое поле

Код: echo '<input name="userid" type="hidden" value="' . $r2['userid'] . '">';
echo '<input name="do" type="submit" value="Удалить">';
Автор: Chiz3000
Дата сообщения: 13.12.2009 17:27
спасибо.


Код:
<?
/* Переменные для соединения с базой данных */
$hostname = "localhost";
$username = "root";
$password = "";
$dbName = "mysql";
$i=0;

/* Таблица MySQL, в которой хранятся данные */
$userstable = "users";

/* создать соединение */
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
/* выбрать базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die(mysql_error());

$q2 = @mysql_query("SELECT * FROM users");
$number = mysql_num_rows($q2);

if ($number == 0) {
echo "<CENTER><P>Пользователей нет</CENTER>";
}

else {
echo "<CENTER><P>Список пользователей:</CENTER>";
WHILE ($i < $number){
$r2 = @mysql_fetch_array($q2);
echo '<br/>';
echo ''.ucfirst($r2['nick']).'';
echo'<form action="" method="POST">';
echo '<input name="id" type="hidden" value="' . $r2['id'] . '">';
echo '<input name="do" type="submit" value="Удалить">';
echo '</form>';
$i++;
}

if($_POST['do'])
{
$inpt = $_GET['id'];
@mysql_query("DELETE FROM users WHERE id = '".$inpt."' ");
}
}
?>
Автор: andead
Дата сообщения: 13.12.2009 17:52
если форма отправляется с помощью метода post, то данные находятся в массиве $_POST а не $_GET
Автор: Chiz3000
Дата сообщения: 13.12.2009 17:53
биг спс, в этом была ошибка...все заработало

Добавлено:

Код:
if($_GET['exit']) {@session_destroy(); unset($_GET['exit']); mysql_close($link); @Header("Location: index.php");}
Автор: Cheery
Дата сообщения: 13.12.2009 22:39
Chiz3000

Цитата:
но приходится обновлять страницу, чтобы увидить что мы вышли, как бы можно добавить , например, после Header("Location: index.php"); еще одну строчечку с загрузкой index.html в этом же окне?

добавляем exit(); посе header
перекидывает на новый url - вот вам и обновление страницы
Автор: Chiz3000
Дата сообщения: 16.12.2009 08:28

Цитата:
добавляем exit(); посе header
перекидывает на новый url - вот вам и обновление страницы

так не работает...сделал через javascript...
Автор: DarkSmoke
Дата сообщения: 10.01.2010 16:20
Добрый день.
не могу понять как сортировать данные.
есть таблица в БД Price. На сайте есть разделы каталога. Самый главный раздел каталога это `razdel_id`. Нажимаем на раздел и получаем все товары в которых ид раздела равен разделу. Но беда в том, что есть еще подразделы `podrazdel_id`. В одном разделе могут быть несколько подразделов. Как можно отсортировать подразделы в разделах. Пример _http://raumplus.in.ua/catalog.php?group=3 . Раздел СЕРИЯ 42ММ. Подразделы _ПРОФИЛЬ S 42 ММ ДЛЯ ПОДВЕСНОЙ СИСТЕМЫ AIR, _ПРОФИЛЬ S 42 ММ ДЛЯ РАЗДВИЖНОЙ СИСТЕМЫ и _СЕРИЯ С-42.

Код: CREATE TABLE `Price` (
`id` int(11) NOT NULL auto_increment,
`razdel_id` int(11) default NULL,
`podrazdel_id` int(11) default NULL,
`img` tinytext NOT NULL,
`articul` tinytext NOT NULL,
`name` tinytext NOT NULL,
`color_id` int(4) default NULL,
`long` tinyint(4) NOT NULL,
`col` tinyint(4) NOT NULL,
`price` float default NULL,
`new` enum('0','1') NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;
Автор: substrackto
Дата сообщения: 10.01.2010 21:18
DarkSmoke
. Используйте внешние ключи (id и fkey должны совпадать по типу и величине)
. для сортировки по имени раздела \ подраздела прийдется выбирать всю таблицу (не самый быстрый способ, но если нужно, то не забудьте проиндексировать)
. Зачем дублирование данных? (таблица прайс содержит и раздел и подраздел)

Схема к которой я клоню:
Код:
table razdel:
id int(5) unsigned not null primary key auto_inc,
name varchar(200) not null unique
...

table podrazdel:
id int(5) unsigned not null primary key auto_inc,
name varchar(200) not null unique,
'razdel_id' int(5) unsigned default null foreign key references razdel(id) on delete null on change null
...

table price:
id int(5) unsigned not null primary key auto_inc,
'podrazdel_id' int(5) unsigned default null foreign key references podrazdel(id) on delete null on change null
...


select 1,2,3
from razdel, podrazdel, price
where price.`podrazdel_id` = podrazdel.id and podrazdel.`razdel_id` = razdel.id
order by razdel.name, podrazdel.name
Автор: DarkSmoke
Дата сообщения: 10.01.2010 21:24
Хочу схему, а то не понятно
Автор: substrackto
Дата сообщения: 10.01.2010 21:29
Не успел дописать
ps: синтаксис может быть неправильный, но суть есть
Автор: DarkSmoke
Дата сообщения: 10.01.2010 21:39

Цитата:
Зачем дублирование данных? (таблица прайс содержит и раздел и подраздел)

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

Добавлено:

Цитата:
select 1,2,3
from razdel, podrazdel, price
where price.`podrazdel_id` = podrazdel.id and podrazdel.`razdel_id` = razdel.id
order by razdel.name, podrazdel.name

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

Добавлено:
Только что сделал этот запрос и мне выдало

Цитата:
1 2 3
1 2 3

Автор: substrackto
Дата сообщения: 10.01.2010 22:56

Цитата:
Только что сделал этот запрос и мне выдало

:-D
123 я написал как пример, я же незнаю какую именно выборку тебе нужно сделать.

У mysql есть еще join -ы, думаю с ними будет лучше.
Автор: Laterport
Дата сообщения: 26.10.2012 20:53
Всем привет.
Столкнулся с такой проблемой.
В движке написанном на php есть пару проблем с отображением русского языка, при этом программист говорит что баг именно сервера, а не движка.
В целом кириллические символы отображаются корректно, но например при попытке редактирования какого-нибудь сообщения на форуме где они содержатся, после нажатия на кнопку EDIT, окно оказывается пустым. Также проблемы при созданий сообщений в заголовках которых указываешь русские буквы, они не отображаются вообще. Не пойму где копать, в мускуле, в апаче или где, подскажите пожалуйста что можно посмотреть?

OS FreeBSD 9.0
MySQL+PHP+Apache+Nginx
Автор: Cheery
Дата сообщения: 26.10.2012 20:57
Laterport
Вы как будто телепатов ищете )

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

Конкретно, не видя что происходит, вам никто не скажет.

Если отображается везде, за исключением некоторых мест, то дело в обработке информации для этих мест.

ps: дайте, что ли, хотя бы ссылку на "посмотреть"
Автор: Laterport
Дата сообщения: 26.10.2012 21:11
Cheery
Спасибо за ответ!
Да, я понимаю что вопрос совершенно не информативен, показать не могу к сожалению, ресурс закрытый. Покажу то что вы написали кодеру, может додумается до чего-нибудь....
Хотя с другой стороны у него на вирт сервере всё нормально, там, где он всё это делает и пишет собственно..
Автор: Cheery
Дата сообщения: 26.10.2012 21:14
Laterport

Цитата:
показать не могу к сожалению, ресурс закрытый

могли бы и дать доступ, если хотите решения проблемы.

ну что вам сказать - неплохо бы, для начала, посмотреть заголовки ответа сервера - возможно там кроется проблема с кодировкой. но скорее всего нет, раз проблема возникает только в конкретных блоках.
Автор: Laterport
Дата сообщения: 27.10.2012 07:32
Cheery
Вот такая мулька

http://imageshack.us/photo/my-images/221/94482888.png/
Автор: Cheery
Дата сообщения: 27.10.2012 07:37
Laterport
я же говорю - картинок тут мало
раз отображается в странице, значит что то не так именно с тем куском, что выводит форму редактирования. надо еще просмотреть логи ошибок в браузере - может что то не грузится (например кусок javascript для работы редактора) или возникает какая то иная ошибка.
вам по картинке все равно никто и ничего точного не скажет
Автор: Weinaum
Дата сообщения: 27.10.2012 12:27
Всем привет, не уверен, что тема правильная, если что, перенаправьте в нужное русло.
Есть задача сделать для одного сайта автобекап бд, хостер прямого доступа к базе не дает. Часто в подобных случаях выходил из положения и снимал дампы посредством веб-крона и php-скриптов, благо их немало.
Однако, все эти скрипты объединяет одно: использование exec, shell_exec etc. Данный же хостер и это дело закрыл наглухо...
Единственное, что удалось сделать в этом плане - настройка shedule backup в виндовс-аппликации Webyog SQLyog - через php-туннель (через данный туннель подключение без проблем). Но это решение как рабочее не годится, т.к. во-первых, нет своего вин-сервера, где все это можно было бы поставить и настроить, во-вторых, софт не фришный совсем, ну и в-третьих, решение малоизящное совсем, вроде как по воробьям из пушки для простой задачи.
Поменять хостера - решение принимаю не я, я бы к тому хостеру на пушечный выстрел никогда не подошел бы. Задумался вот о чем: раз все ж таки через пхп туннель пускает, может есть подобный вариант для подключения к бд с линукс-машины? Поиск в сети ответа не дал, видел, что есть такое для соединения через ssh-туннель, но, конечно же, никакого ssh на этом хостинге нет. Т.е. был бы нормальный вариант, на своем сервере на debian повесить на крон какой-нить скрипт, который как то (через пхп-туннель?) или еще как то коннектится к бд и снимает дамп, и забыть об этом...
Автор: Cheery
Дата сообщения: 27.10.2012 21:21
Weinaum

Цитата:
хостер прямого доступа к базе не дает

что значит "прямого"? вы же работаете с базой?
Автор: Weinaum
Дата сообщения: 28.10.2012 13:27
Cheery
сорри за неточности в терминологии, смысл, я думаю, понятен - имеется в виду конечно отсутствие доступа к базе извне, с ip, отличных от localhost-а или ip сайта, если сайт и mysql на разных серверах.
Вопрос остается открытым, сформулирую еще раз более расширенно:
как наиболее просто сделать бэкап по расписанию базы данных mysql сайта в условиях жесткой политики безопасности администрации хостинга, расписанных в посту выше? Есть ли решения, подобные тем, что применяются в софтах для виндовс, типа SQLyog, для коннекта с базой в обход этих ограничений (http tunnel?), но для линукс(юникс) систем?

Страницы: 12345678910111213

Предыдущая тема: PHP: лимит времени на выполнение скрипта


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.