X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

История благодарностей участнику matroskin8. Поблагодарили: 0 раз(а)
Дата поста: В теме: За сообщение: Поблагодарили:
30.1.2012, 1:24 Обращение к разным таблицам из базы
Пока Вы только учитесь - можно сделать и 3 запроса. А вообще это делается одним запросом, объединяющим записи нескольких таблиц. Здесь главное правильно спроектировать БД, чтобы прослеживались связи объединяемых таблиц. Вот, к примеру, 2 таблицы из Вашего вопроса:
таблица books:
id | name | genre
1 | Книга 1 | 1
2 | Книга 2 | 2
3 | Книга 3 | 1
4 | Книга 4 | 1
Здесь содержится название книги и ее жанр. Но жанр представлен числовым типом. Данным полем эта таблица ссылается на так называемый справочник, в котором содержится список жанров. Эта связь может быть использована для создания внешнего ключа с целью поддержания справочной целостности.
Вторая таблица genre:
id | genre
1 | Детектив
2 | Приключения
Теперь объединяем обе таблицы. Способ 1:
SELECT books.id, books.name, genre.genre FROM books, genre WHERE books.genre = genre.id

Результат:
id | name | genre
1 | Книга 1 | Детектив
2 | Книга 2 | Приключения
3 | Книга 3 | Детектив
4 | Книга 4 | Детектив
Способ 2:
SELECT * FROM books JOIN genre ON books.genre = genre.id

Результат:
id | name | genre | id | genre
1 | Книга 1 | 1 | 1 | Детектив
2 | Книга 2 | 2 | 2 | Приключения
3 | Книга 3 | 1 | 1 | Детектив
4 | Книга 4 | 1 | 1 | Детектив
В общем, где-то так... мой Вам совет - прежде, чем углубляться в "дебри" языка SQL, все же освойте простейшее, а уж затем почитайте какую-нибудь книжку по языку запросов... например, могу порекомендовать Мартина Грабера.


Спасибо сказали: (0)
29.1.2012, 23:04 Обращение к разным таблицам из базы
(Kuchuluk @ 29.1.2012, 18:48) *
и эту результирующую таблицу тоже заносить в БД?

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


Спасибо сказали: (0)
29.1.2012, 17:21 Не выводится текст через оператор printf
Значит отлаживайте код, смотрите выбирается ли из БД вообще что-то, ищите ошибку... например так:
[php]$id = (int)$_GET['id'];
$result3 = mysql_query ("SELECT * FROM comments WHERE post = $id") or die(mysql_error());[/php]


Спасибо сказали: (0)
24.1.2012, 0:50 Не выводится текст через оператор printf
(Kuchuluk @ 23.1.2012, 16:56) *
matroskin8, спасибо большое за содействие) А можешь объяснить почему не нужно использовать команду $myrow2 = mysql_fetch_array($result2); ... она же выводит значения из базы в массив.

Пожалуйста :blink:
Собственно, yury объяснил почему нужно использовать ее преимущественно в цикле. Попытаюсь объяснить еще от себя. Вне цикла эту функцию используют только, когда получают 1 ряд из БД. В принципе, логично, что для получения одного ряда цикл и не нужен. Теперь почему не нужно использовать эту функцию вне цикла. Функция, будучи вызванной, обрабатывает 1 ряд результата запроса. При этом курсор результата запроса передвигается на 1 позицию. На примере... Из БД запросом мы получили, к примеру, 3 ряда. Теперь вот что произойдет, если мы используем дважды функцию mysql_fetch_array() - вне цикла и внутри него:
[php]$myrow2 = mysql_fetch_array($result2); // здесь обработался ряд 1 запроса и курсор перешел на второй ряд
while ($myrow2 = mysql_fetch_array($result2)){
// здесь функция вызывается оставшиеся 2 раза, обрабатывая оставшиеся ряды - 2-ой и 3-ий
}[/php]
Таким образом, мы "теряем" 1 строку результата запроса. Функция ее обработала вне цикла, но ведь Вы ее нигде не выводите. Присмотритесь внимательно - Вы заметите, что с изначальным Вашим кодом не выводится 1 строка из БД.


Спасибо сказали: (0)
22.1.2012, 23:25 Не выводится текст через оператор printf
Строка $myrow2 = mysql_fetch_array($result2); вне цикла не нужна. Мало того, она даже вредна в контексте Вашего кода.
После условия цикла точка с запятой не нужна: while ($myrow2 = mysql_fetch_array($result2)); - именно из-за нее ничего и не выводится.
Где-то так должно быть:
[php]if (mysql_num_rows($result2) > 0){
while ($myrow2 = mysql_fetch_assoc($result2)){
printf ("<p><a class='nav_link' href='view_cat.php?cat=%s'>%s</a></p>", $myrow2["id"], $myrow2["title"]);
}
}else{
echo "<p>Информация по запросу не может быть извлечена, в таблице нет записей.</p>";
exit();
}[/php]


Спасибо сказали: (0)
17.1.2012, 14:18 Не выводится текст через оператор printf
Код можно было запостить, чтобы не писать его с нуля... хотя... такой код нужно действительно переписывать... Ошибок 2:
1) здесь: $myrow["$id"] - знака доллара в ключе быть не должно. Правильно так: $myrow['id']. Для title, соответственно, аналогично.
2) глобальная ошибка: if{код}... а условие куда делось? Так нужно: if(условие){код}
Странно, что PHP ошибок не выдает с таким кодом... скорее всего, показ ошибок попросту отключен.
Ну и сам запрос и цикл лучше организовать так:
[php]$query = "SELECT title, id FROM lessons";
$res = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_assoc($res)){
echo "<p><a href='edit_lesson.php?id={$row['id']}'>{$row['title']}</a></p>";
}[/php]
Цикл do{} while() здесь абсолютно не нужен, почитайте в книжках, ради интереса, когда он используется.


Спасибо сказали: (0)
3.1.2012, 12:31 В каком формате вы храните даты в mysql?
В каком формате вы храните даты в mysql?
Не стал голосовать, поскольку даты храню в двух форматах - DATETIME и TIMESTAMP, в зависимости от конкретной ситуации... хотя чаще все же использую второй формат. Выбор конкретного формата зависит от конкретной ситуации.
Так, например, формат TIMESTAMP совершенно не подходит для хранения "исторических" дат... допустим хранить даты рождения здесь невозможно, поскольку для этого формата ограничен диапазон значений. Соответственно, здесь подойдет формат DATETIME.
Ну а формат TIMESTAMP очень удобен тем, что позволяет задавать значение по умолчанию (текущее время). Соответственно, когда добавляются новые статьи на сайт, сообщения на форум, комментарии и т.д., где нужна именно текущая дата, то удобнее использовать этот тип даты-времени.
Об использовании формата TEXT для хранения дат не слышал... думаю, не стоит его использовать. Довольно часто используется тип INT (для хранения даты) и тип BIGINT для хранения даты и времени.


Спасибо сказали: (1)
17.12.2011, 9:56 Регулярные выражения
в php-скрипте
А, не увидел, что надо еще и кириллица ;)
Нет, так не совсем точно... правильнее так (добавить еще модификатор u, если работаешь с юникодом, если кодировка кириллическая, то этот модификатор не нужен):
[php]$pattern = '/^[a-zа-я\d\._-\s]+$/ui';[/php]


Спасибо сказали: (1)
16.12.2011, 19:27 Регулярные выражения
в php-скрипте
"^" и "$" - это якоря, обозначающие начало и конец строки соответственно.
"+" - это квантор, который говорит, что должен быть как минимум 1 символ в проверяемой строке.
Сама регулярка может быть такой:
[php]$pattern = '/^[\d\w\._-\s]+$/i';[/php]
Как пример работы - простой скрипт:
[php]<?php

if($_POST['submit']){
$pattern = '/^[\d\w\._-\s]+$/i';
if(preg_match($pattern, $_POST['text'])) echo 'OK';
else echo 'Not OK';
}

?>

<form method="post">
<input type="text" name="text" />
<input type="submit" name="submit" />
</form>[/php]


Спасибо сказали: (1)
11.12.2011, 23:46 Зебра В Таблице
думаю будет всем полезно
(Banderas @ 11.12.2011, 11:21) *
а почему в моем случае не работает?

Я так понимаю из-за системы приоритетности CSS. То бишь, указав правило для нечетных строк таким образом:
$('#celebs tbody tr:even').css('background', '#ffc0cb');

Это все равно, что указать стиль элементу непосредственно в разметке:
<tr style="background:#ffc0cb">

Данное правило имеет гораздо больший приоритет, чем правило класса, соответственно, остается цвет правила с бОльшим приоритетом.
Для примера, можно смоделировать такую безумную ситуацию ;)
#child{color: green;}
        .child{color:blue;}
        #parent p{color:red;}
        #parent p.child{color:yellow;}
        #parent p#child{color:gray;}

<div id="parent">
<p id="child" class="child" style="color:#9200D7">Text</p>
</div>

Все цвета прописаны для одного элемента, но будет применено правило с наибольшим приоритетом (указанное напрямую) - style="color:#9200D7"
Именно поэтому для правильной работы лучше задавать класс и его затем же менять на другой класс.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


Спасибо сказали: (0)
11.12.2011, 1:16 Как Скрыть И Показать Блоки На Jquery?
Вот один из моих уроков, как реализовать спойлер посредством jQuery - Как сделать FAQ на сайте с использованием PHP-MySQL-jQuery
Также на сайте можно найти еще несколько, которые помогут решить задачу.


Спасибо сказали: (0)
9.12.2011, 19:06 Как это работает (выборка тегов) JQuery
Отбираются все нечетные (точнее четные, поскольку индексация начинается с нуля) строки в элементе с идентификатором celebs и им присваиваются указанные стилевые правила.
Цикла там нет... отбор начинается после построения DOM-дерева, т.е. после полной загрузки документа. Имея DOM-дерево, осуществляется его обход и в набор jQuery отбираются необходимые элементы. Только после формирования набора - ко всем ним применяются необходимые действия. Полагаю, должно быть так.


Спасибо сказали: (0)
4.12.2011, 10:54 Помогите разобрать запрос SQL
(Banderas)
use bookmarks; // как я понял, команда, которая указывает что следующие запросы будуть для БД bookmarks

Правильно понял. Если говорить формальнее, то это выбор БД для работы, аналог функции mysql_select_db()

(Banderas)
passwd char(40) not null

Для строк переменной длины лучше использовать тип VARCHAR

(Banderas)
index (username), // что это значи

Это так называемое индексирование поля, т.е. создание индексов для указанного поля. Цель этого действия - облегчение серверу поиска по указанному полю. Если попытаться объяснить на доступном примере, то индексы можно сравнить с содержанием книги. Для того, чтобы найти конкретное место в книге, нам не надо перелистывать ее всю - достаточно в содержании найти нужное нам с номером страницы. Или, к примеру, в энциклопедии для того, чтобы найти слово "программирование", не нужно перелопачивать всю энциклопедию, а достаточно найти указатель "ПРО" и искать искомое слово в нем. В общем, индексируют поля, по которым чаще всего происходит выборка.
В случае с представленным запросом индексирование полей "username" и "bm_URL" лишено смысла, поскольку для данных полей устанавливается первичный ключ. Если для поля установлен PRIMARY KEY либо UNIQUE KEY, то сервер автоматом создает для данных полей индекс, поскольку:
1) "понимает", что выборка чаще всего будет происходить именно по этим полям;
2) поскольку эти поля становятся уникальными, то при добавлении каждой записи сервер должен проверить, а не было ли уже такого значения для поля "username", т.е. сделать своеобразную выборку.

(Banderas)
grant select, insert, update, delete // выставляем права (возможные запросы) on bookmarks.* // как это понять (подробно)
to bm_user@localhost identified by 'password'; // создается пользователь bm_user с паролем password ???

Тут просто - создаем пользователя bm_user с паролем password и соответствующими (ограниченными) правами для БД.

mysql -u root -p < bookmarks.sql

Ну а это соединение с сервером MySQL из консоли:
1) -u (user) - имя пользователя;
2) -p (password) - пароль

(Banderas)
4) пароль указан в файле, то < указывает что нужно открыть bookmarks.sql и считать оттуда???

Вот с таким не сталкивался :rolleyes:... надо посмотреть что в указанном файле.


Спасибо сказали: (0)
10.10.2011, 11:20 Создание темы WordPress
Мини-курс по созданию темы для WordPress
Думаю, кому-то это может пригодиться... особенно начинающим веб-разработчикам ;-)
Рекомендую Вам мини-курс "Создание темы Wordpress", к созданию которого приложил руку и Ваш скромный слуга (часть 3 - моя) ^_^
Краткий обзор курса:
Часть веб-дизайн (автор: Захаренко Алексей):
--------
Урок 1. Подготовка к работе, расстановка направляющих.
Урок 2. Шапка сайта.
Урок 3. Проработка меню, контента, правого блока и футера.
--------
Часть верстка (автор: Бернацкий Андрей):
--------
Урок 4. Продумываем разметку страницы и нарезаем макет.
Урок 5. Верстаем область основного контента.
Урок 6. Устанавливаем слайдер, дорабатываем сайт.
--------
Часть WordPress (автор: Кудлай Андрей):
--------
Урок 7. Создание темы WordPress. Часть 1.
Урок 8. Создание темы WordPress. Часть 2.
Курс абсолютно бесплатен и получить его можно по этой ссылке - Создание темы WordPress


Спасибо сказали: (1)
22.9.2011, 18:21 Автодобавление пользователя в форум
Насколько я понимаю, форум - это шаблонная страница (например, index.php), куда передаются всевозможные параметры (темы, посты, пользователи и т.д.). Так вот на эту шаблонную страницу и нужно добавить проверку сессионной метки. Для примера можно посмотреть на этот форум - ссылки на индексную страницу со всевозможными GET-параметрами.
Если форум состоит из нескольких шаблонных страниц, соответственно, на всех нужно добавить эту проверку.


Спасибо сказали: (0)
31.8.2011, 13:57 .htaccess как при переходе на /main.php отображать в адресной строке /main/
Должно быть так:
[php]RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([a-z]+)$ $1.php [L][/php]

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


Спасибо сказали: (1)
14.8.2011, 12:16 Как можно реализовать такое?
Например, так...
Текстовый файл file.txt лежит в одной директории со скриптом (иначе - просто меняем путь к файлу в скрипте):
122435 nazvanie_faila
543434 vtoroe_nazvanie

Теперь сам скрипт index.php:
[php]<?php

if($_POST['submit']){
$file = './file.txt'; // путь к файлу
$handle = file($file); // читаем содержимое файла в массив

$num = (int)trim($_POST['num']); // получаем данные из формы
$flag = FALSE; // флаг результата поиска

/* проходимся по массиву */
foreach($handle as $item){
$search = explode(" ", $item); // разбиваем строку по разделителю - пробел
if($num == $search[0]){
// если совпадение числа есть
$result = $search[1]; // записываем в переменную строку рядом с числом
$flag = TRUE; // устанавливаем флаг результата в "найдено"
}
}

if($flag){
// если найдено - выводим результат
echo $result;
}else{
// иначе
echo 'Ничего не найдено';
}
}

?>

<form method="post">
Введите цифры: <input type="text" name="num" />
<input type="submit" name="submit" value="Поиск" />
</form>[/php]
Все откомментировал - так что доработать под свои нужды будет не особо сложно.


Спасибо сказали: (1)
2.8.2011, 12:05 Отправление письма.
бошка тупит, незнаю как правильно топик назвать.
Вот этот весь код:
[php]$toadress = 'мой@mail.ru';
$subject = 'Обратная связь';
$content = 'Тут че хочу, то и пишу???'; // тело письма, информация
$headers = "Content-type: text/html; charset=windows-1251";

mail($toadress, $subject, $content, $headers);[/php]
вставить сразу после строки:
[php]print "<p class=\"erok\">URL успешно добавлен! <a href=\"?action=\">Список сайтов</a></p>";[/php]


Спасибо сказали: (1)
2.8.2011, 11:01 Отправление письма.
бошка тупит, незнаю как правильно топик назвать.
Собственно, Banderas уже написал то, что нужно сделать. Подключить просто... После добавления сайта в БД и сообщения об успешном добавлении, т.е. после этой строки кода:
[php]print "<p class=\"erok\">URL успешно добавлен! <a href=\"?action=\">Список сайтов</a></p>";[/php]
нужно дописать выполнение функции mail(), указав при этом соответствующие аргументы функци - в примере:
[php]mail($toadress, $subject, $content, $headers);[/php]
- $toadress - почтовый адрес, на который должно доставляться письмо;
- $subject - тема письма;
- $content - текст письма;
- $headers - кодировка сообщения (должна соответствовать кодировке сайта).


Спасибо сказали: (1)
18.7.2011, 10:46 PHP-программирование для начинающих
Самые азы
Не совсем понятен вопрос.
А по коду есть небольшая ошибка. Имена переменных регистрозависимы. В форме для поля путь задано имя S, а в функцию попадает эта переменная с маленькой буквы - $_POST['s']


Спасибо сказали: (1)
4.7.2011, 13:37 Количество записей в таблице
как посчитать?
Ну тут все элементарно :rolleyes:
[php]<?php
$res = mysql_query("SELECT `url` FROM `webmasters`");
$count = mysql_num_rows($res);

echo "Количество записей в таблице: {$count}";
?>[/php]


Спасибо сказали: (1)
1.7.2011, 17:23 Проверка одинаковых IP у разных юзеров
Пожалуйста :rolleyes:

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


Спасибо сказали: (1)
1.7.2011, 14:44 Проверка одинаковых IP у разных юзеров
И еще одно решение вдогонку :rolleyes:
[php]$res = mysql_query("SELECT `ip`,COUNT(*) FROM `users` GROUP BY `ip` HAVING COUNT(*) > 1;");

while($row = mysql_fetch_assoc($res)){
$res_login = mysql_query("SELECT `id`, `login` FROM `users` WHERE `ip`='{$row['ip']}'");

echo "Под IP <strong>{$row['ip']}</strong> заходили пользователи с логинами <ul>";
while($row_login = mysql_fetch_assoc($res_login)){
echo "<li>{$row_login['id']} - {$row_login['login']}</li>";
}
echo '</ul>';
}[/php]


Спасибо сказали: (2)
30.6.2011, 10:13 Проверка одинаковых IP у разных юзеров
[php]<?php
$ip = $_SERVER['REMOTE_ADDR'];

$res = mysql_query("SELECT * FROM `users` WHERE `ip`='{$ip}'");
if(mysql_num_rows($res) > 0){
echo "Под IP {$ip} входили пользователи со следующими логинами:
<ul>";
while($row = mysql_fetch_assoc($res)){
echo "<li>{$row['id']} - {$row['login']}</li>";
}
echo '</ul>';
}else{
// код, если совпадений IP нет
}
?>[/php]


Спасибо сказали: (1)
16.6.2011, 19:03 Импорт данных из xml в базу данных сайта
Ну и отлично :D
В принципе, быстренько набросал. Думаю, все должно быть понятно - код старался максимально комментировать. Даже тестово поместил в БД - все работает. Единственное - это возможная проблема с кодировками... XML не очень дружит с кириллицей, лучше работать с юникодом. Код тестировал - все работает.
XML:
[xml]<?xml version="1.0" encoding="utf-8" ?>
<blocks>
<block>
<id>id1</id>
<date>Дата1</date>
<title>Заголовок1</title>
<link>Ссылка1</link>
</block>
<block>
<id>id2</id>
<date>Дата2</date>
<title>Заголовок2</title>
<link>Ссылка2</link>
</block>
</blocks>[/xml]
PHP:
[php]<?php

mysql_connect("localhost", "root", "") or die("No connect to server");
mysql_select_db("test") or die("No select DB");
mysql_query("set names 'utf-8'");

/* функция дебага массивов */
function arr($arr){
echo '<pre>';
print_r($arr);
echo '</pre>';
}

$file = 'file.xml'; // файл XML
$read = simplexml_load_file($file); // получаем объект класса

//arr($read); // распечатываем массив $read

$xml = $read->block; // $xml - объект-массив, вложенные теги - его свойства

$count = count($xml); // кол-во элементов массива

for($i = 0; $i < $count; $i++){

echo "<p>Ряд для таблицы с id - {$i}</p>";
echo $xml[$i]->id. '<br />'; // вывод id
echo $xml[$i]->date. '<br />'; // вывод date
echo $xml[$i]->title. '<br />'; // вывод title
echo $xml[$i]->link. '<br />'; // вывод link
/* можно поместить в привычные переменные */
$id_xml = $xml[$i]->id;
$date_xml = $xml[$i]->date;
$title_xml = $xml[$i]->title;
$link_xml = $xml[$i]->link;

/* заносим данные в БД */
$res = mysql_query("INSERT INTO `xml` SET
`id_xml`='{$id_xml}',
`date_xml`='{$date_xml}',
`title_xml`='{$title_xml}',
`link_xml`='{$link_xml}'");
}

?>[/php]


Спасибо сказали: (0)

3 страниц V   1 2 3 >
RSS Текстовая версия Сейчас: 11.4.2021, 1:33
Дизайн