Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

forum.0day.community _ Web-программирование _ Вопросы по PHP

Автор: Glavar Dec 12 2010, 20:35

Доброго время суток!
1. Скажите как мне обрезать первых 7 знаков, а остальные занести в базу?
2. У меня есть максимальное число голосов припустим 50, как мне присвоить ему 1 место
15 глосов - 5 место
43 голоса - 2 место
28 голосов - 3 место
24 - 4 место и т.д. и что бы место записывалось и обновлялось автоматически в базе данных?

Тема для обговорення мови програмування PHP, всі сторонні коментарі будуть видалятися, а їх автори отримувати %

Автор: Dr.HeadShot Dec 12 2010, 20:50

1. substr("abcdefghijklmnop", 7);

Автор: Meliora Dec 13 2010, 0:19

SELECT *
FROM <table>
ORDER BY <голоса> DESC

Автор: Glavar Dec 13 2010, 17:59

(Meliora @ Dec 13 2010, 0:19) Перейти к цитате

SELECT *
FROM <table>
ORDER BY <голоса> DESC

Это просто сортировка. а мне сделать что припустим человек хочет узнать на котором он месте и ему не нужно искать в таблице(что написано выше) а сразу показать, что он на такомто месте

Автор: reiten Dec 13 2010, 18:44

SELECT COUNT(*)
FROM <table>
WHERE votes <= (SELECT votes FROM <table> WHERE id=<target_id>)

Автор: Glavar Dec 13 2010, 18:59

(reiten @ Dec 13 2010, 18:44) Перейти к цитате

SELECT COUNT(*)
FROM <table>
WHERE votes <= (SELECT votes FROM <table> WHERE id=<target_id>)

В этом коде я так понимаю можно придать 1 значение, а если там сотни?

Автор: Нурик Сакура Dec 14 2010, 10:04

(Glavar @ Dec 12 2010, 20:35) Перейти к цитате
2. У меня есть максимальное число голосов припустим 50, как мне присвоить ему 1 место
15 глосов - 5 место
43 голоса - 2 место
28 голосов - 3 место
24 - 4 место и т.д. и что бы место записывалось и обновлялось автоматически в базе данных?
Все телепаты уехали на зимние каникулы, потому распиши, будь добр, подробнее, где у тебя есть максимальное число голосов и как ты хочешь присвоить. Где у тебя хранятся пользователи и как они связаны с голосами?

Автор: Glavar Dec 14 2010, 15:14

Есть таблица:
id name text golosa mesto
1 test1 text1 15
2 test2 text2 43
3 test3 text3 74
4 test4 text4 12
....

и в поле "место" надо что база сама вводила 1 место = максимальное (в нашем случае 74), 2 место = 43, 3 место = 15, 4 место = 12 и т.п. И при изминении у id 2 и id 3 менялись места автоматически и т.п.

А на сайте вывести

$con = mysql_query("SELECT * FROM таблица);
$wr_con = mysql_fetch_array($con);
printf("Тема %s, <br> Текст: %s<br> Голосов: %s<br> Тема на %s месте",$wr_con['name'],$wr_con['text'],$wr_con['golosa'],$wr_con['mesto']);


Примерно это

Автор: Dreyk Dec 14 2010, 15:53

Если ты хочешь сделать это на стороне базы автоматически - то нужны триггеры.
Но если проект хоть сколько-нибудь большой, это замучает мускуль. Легче всего делать это кроном, к примеру, раз в 4-5 минут: сортировать список по голосам и проставлять им всем новые места

Автор: Glavar Dec 14 2010, 16:08

ну 4-5 минут - это супер. Только как сделать?

Автор: Dreyk Dec 14 2010, 16:12

вначале шлешь

SELECT @PLACE := 0;

а потом
UPDATE `table`
SET
    `table`.`mesto` = (@PLACE := @PLACE +1)
ORDER BY
    `table`.`golosa` DESC;


как-то так

Автор: Glavar Dec 14 2010, 16:26

(Dreyk @ Dec 14 2010, 16:12) Перейти к цитате

вначале шлешь
SELECT @PLACE := 0;

а потом
UPDATE `table`
SET
    `table`.`mesto` = (@PLACE := @PLACE +1)
ORDER BY
    `table`.`golosa` DESC;


как-то так

Это в начале страницы я так понимаю, да?

Автор: Dreyk Dec 14 2010, 16:37

Это в скрипте, который будет вызываться cron'ом раз в 5 минут

Если слово крон ни о чем не говорит - иди вот http://forum.0day.kiev.ua/index.php?showtopic=205958 почитай

Автор: Glavar Dec 14 2010, 18:23

Так этот скрипт в индекс кидать или в отдельный файл? и как крон запустить? и как записать в php или html?
Почитал и сделал код */5 * * * * /file/database.php
а куда его вставить?
http://www.php.su/articles/?cat=email&page=003 говорит: "Разумеется, ваш сервер должен быть типа Unix, а не Windows."

Автор: R_E_W Dec 14 2010, 21:29

Зачем человека мучать тригерами и кроном.
К тому же если в таблице будет 1000 записей, раз в 5 минут все апдейтить? ужс.
А если в таблице будет 10000 записей, а если 100000?

Я так понял нужно отображать общий отсортированный список с указанием места и количества голосов и чтоб у каждого юзера была возможность посмотреть где-то там у себя в статистике какое у него сейчас место среди учавствующих. Если так то вон жеж человек посоветовал отличный запрос


SELECT COUNT(*)
FROM <table>
WHERE votes <= (SELECT votes FROM <table> WHERE id=<target_id>)

его только нужно под себя переделать немного.

В вашей таблице должно быть еще поле по которому осуществлять поиск, user_id к примеру или еще чего (оно должно быть уникально). Подставляем, немного поправляем запрос и получаем вывод места для одного пользователя

SELECT COUNT( * )
FROM <table>
WHERE votes >= (
SELECT votes
FROM <table>
WHERE user_id = <user_id> )

Вместо <user_id> подставляем айди юзера для которого хотим вычислить позицию.

Для отображения же общего списка юзаем order by
SELECT *
FROM <table>
ORDER BY votes DESC

Т.к. результаты в любом случае будут обрабатываться в цикле, ничто не мешает добавтить в цикл переменную которая будет отвечать за место. К примеру

<?php
$sql = 'SELECT *
FROM user_votes
ORDER BY votes DESC';
$results = mysql_query($sql);

$place = 1;
while ($row = mysql_fetch_assoc($results)) {

echo "{$place}) User {$row['user_id']} with {$row[votes]} votes<br>";
$place++;
}
?>

как-то так. Не нужно никаких кронов триггеров и работать будет в разы быстрее. А на больших таблицах очень ощутимо быстрее.

Автор: Glavar Dec 14 2010, 21:54

(R_E_W @ Dec 14 2010, 21:29) Перейти к цитате

Зачем человека мучать тригерами и кроном.
К тому же если в таблице будет 1000 записей, раз в 5 минут все апдейтить? ужс.
А если в таблице будет 10000 записей, а если 100000?

Я так понял нужно отображать общий отсортированный список с указанием места и количества голосов и чтоб у каждого юзера была возможность посмотреть где-то там у себя в статистике какое у него сейчас место среди учавствующих. Если так то вон жеж человек посоветовал отличный запрос

его только нужно под себя переделать немного.

В вашей таблице должно быть еще поле по которому осуществлять поиск, user_id к примеру или еще чего (оно должно быть уникально). Подставляем, немного поправляем запрос и получаем вывод места для одного пользователя

SELECT COUNT( * )
FROM <table>
WHERE votes >= (
SELECT votes
FROM <table>
WHERE user_id = <user_id> )

Вместо <user_id> подставляем айди юзера для которого хотим вычислить позицию.

Для отображения же общего списка юзаем order by
SELECT *
FROM <table>
ORDER BY votes DESC

Т.к. результаты в любом случае будут обрабатываться в цикле, ничто не мешает добавтить в цикл переменную которая будет отвечать за место. К примеру

<?php
$sql = 'SELECT *
FROM user_votes
ORDER BY votes DESC';
$results = mysql_query($sql);

$place = 1;
while ($row = mysql_fetch_assoc($results)) {

echo "{$place}) User {$row['user_id']} with {$row[votes]} votes<br>";
$place++;
}
?>

как-то так. Не нужно никаких кронов триггеров и работать будет в разы быстрее. А на больших таблицах очень ощутимо быстрее.



Большое спс, завтра попробую. Надеюсь все ок будет. Я сам в пхп недавно. умею вытащить, вставить, отсортировать, обновить только. Еще раз спс большое и звиняете за ошыбки, в русс не силен

Автор: Glavar Dec 16 2010, 23:26

Код работает. на 9о %. пока что не разобрался, почему он поглощает максимальное значение и выводит следуишие.
Я про этот код:

<?php
$sql = 'SELECT *
FROM user_votes
ORDER BY votes DESC';
$results = mysql_query($sql);

$place = 1;
while ($row = mysql_fetch_assoc($results)) {

echo "{$place}) User {$row['user_id']} with {$row[votes]} votes<br>";
$place++;
}
?>


Таблица где идет подсчет голосов
http://uaimage.com/image/d23e542d

Автор: паZитифф Dec 17 2010, 13:53

del

Автор: Glavar Dec 17 2010, 17:18

При написании:

SELECT COUNT( * ) FROM <table> WHERE votes >= (SELECT votes FROM <table>WHERE user_id = <user_id> )


$test = mysql_query("SELECT COUNT(golosa) FROM music WHERE golosa >= (SELECT golosa FROM music WHERE login = 'Glavar' ");
                        $row_tes = mysql_fetch_array($test);

Дало ошыбку:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\contest\index.php on line 215

Автор: AnNE DoM.ini Dec 17 2010, 17:23


$test = mysql_query("SELECT COUNT(golosa) FROM music WHERE golosa >= (SELECT golosa FROM music WHERE login = 'Glavar') ");

$row_tes = mysql_fetch_array($test);

Автор: Glavar Dec 17 2010, 17:39

(AnNE DoM.ini @ Dec 17 2010, 17:23) Перейти к цитате


Строка 214: $test = mysql_query("SELECT COUNT(golosa) FROM music WHERE golosa >= (SELECT golosa FROM music WHERE login = 'Glavar') ");

Строка 216: $row_tes = mysql_fetch_array($test);


Дало ошыбку:
Warning: mysql_query() [function.mysql-query]: Unable to save result set in C:\AppServ\www\contest\index.php on line 214

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\contest\index.php on line 216

Автор: AnNE DoM.ini Dec 17 2010, 17:45

Что ты вообще пытаешься сделать?

Автор: Glavar Dec 17 2010, 17:51

У меня есть песня в конкурсе. За нее голосуют. И когда я зайду на сайт под своим логином, то хочу узнать на котором она месте.

Автор: паZитифф Dec 17 2010, 22:09

А не проще ли сделать в цикле, чтобы строка с твоей песней выделялась другим цветом, отличным от основного?

Автор: Glavar Dec 17 2010, 22:31

(паZитифф @ Dec 17 2010, 22:09) Перейти к цитате

А не проще ли сделать в цикле, чтобы строка с твоей песней выделялась другим цветом, отличным от основного?

Я вот как раз хотел сделать чтобы было золото, серебро, бронза. Но и 1,2,3 место. Мне надо вывести толко цифру, а "Место" - статичное. Только 3 места я могу вывести, а вот припустим 1-на песня на 15, а другая на 43 месте хз как.
Вот как оно выглядить сейчас без php:
http://uaimage.com/image/7a5852e3

Автор: паZитифф Dec 18 2010, 0:47

Если я правильно понял, то немного подредктировав код R_E_W'а получим то что надо

<?php
$sql = 'SELECT * FROM user_votes ORDER BY votes DESC';
$results = mysql_query($sql);

$place = 1;

echo "<table>";

while ($row = mysql_fetch_assoc($results)) {

echo "<tr><td ".($row['login'] == $username ? "class='my_song'" : "").">$place. $row[name] ".($place <= 3 ? "($place место)" : "")."</td></tr>";
$place++;
}

echo "</table>";

?>


то что подчеркнуто - выведет в скобках возле названия место, только возле первых 3-ех позиций..
то что выделено жирным - изменит стиль таблицы если логин из БД будет совпадать с твоим, вобщем если ты добавил трек...


Результат будет таков:
1. Название (1 место)
2. Название (2 место)
3. Название (3 место)
4. Название
5. Название
6. Название
7. Название
8. Название
...
15. Название
16. Название
17. Название
18. Название

19. Название
....
43. Название
44. Название
45. Название
46. Название
47. Название
....

В данном примере треки выделенные жирным добавлены тобой




Автор: Glavar Dec 18 2010, 0:57

(паZитифф @ Dec 18 2010, 0:47) Перейти к цитате

Если я правильно понял, то немного подредктировав код R_E_W'а получим то что надо
то что подчеркнуто - выведет в скобках возле названия место, только возле первых 3-ех позиций..
то что выделено жирным - изменит стиль таблицы если логин из БД будет совпадать с твоим, вобщем если ты добавил трек...
Результат будет таков:
1. Название (1 место)
2. Название (2 место)
3. Название (3 место)
4. Название
5. Название
6. Название
7. Название
8. Название
...
15. Название
16. Название
17. Название
18. Название

19. Название
....
43. Название
44. Название
45. Название
46. Название
47. Название
....

В данном примере треки выделенные жирным добавлены тобой

Завтра отпишусь.. Утром поробую. Но ставил я немножко другую задачу. В этом списке выводит все данные, а мне надо когда в профиль заходишь и выбераешь просмотр песен(своих), то возле них пишет место.
Обший список сделать очень помог, Большое спс! Немного доделал код:
<?php
$sql = 'SELECT * FROM music ORDER BY golosa DESC';
$results = mysql_query($sql);

$place = 1;

echo "<table>";

while ($row = mysql_fetch_assoc($results)) {

echo "<tr><td>$place.";

echo "<span ";
if ($row['login'] == $_SESSION['login'])
{
echo "style='font-weight: bold;'";    
}
else
echo "";

echo "> $row[name] </span>".($place <= 3 ? "($place место)" : "")."</td></tr>";
$place++;
}

echo "</table>";

?>



Взял этот же код, вписал ограничение что б вывести только песни пользователя и ПРАВИЛЬНО СЧИТАЕТ!
<?php
$sql = 'SELECT * FROM music ORDER BY golosa DESC';
$results = mysql_query($sql);

$place = 1;

echo "<table>";

while ($row = mysql_fetch_assoc($results)) {


if ($row['login'] == $_SESSION['login'])
{
echo "<tr><td ".($row['login'] == $username ? "class='my_song'" : "").">$place. $row[name] ".($place <= 7 ? "($place место)" : "")."</td></tr>";    
}
else
echo "";

$place++;
}

echo "</table>";

?>

Большое спс всем за помощь. Обязательно добавлю по репе каждому! Если хотите скину бубликов. А то прям не знаю как отблагодарить.

Автор: Glavar Dec 18 2010, 10:00

3. Как сделать чтобы 5 числа каждого месяца в 00:00, чтобы в одной из колонок все значения становились равны 0. Если возможно как то без триггеров и кровь, а то я так и непонял как с ними работать ((

Автор: Нурик Сакура Dec 18 2010, 12:54

Без "тригерров и кровь" можно, но это глупо. Ставишь просто в самом начале скрипта, который постоянно запускается (например, index.php) проверку типа "какое сегодня число?". И если вдруг пятое - делаешь апдейт в базу с установкой всем значений в ноль.

Но это вариант извращенный, правильно написать скрипт, который будет просто запускаться каждый месяц 5-го числа в 0:00. Только почему именно пятого? Как правило, все обнуления приурочивают к началу месяца, то есть к первому числу.

Автор: Glavar Dec 18 2010, 13:04

5 число как пример. надо или 31 в 23.59.59 или 1 в 00.00. Дело в том что надо проверять время сервера. Если там наступило новое число, то надо все обнулить. а какой скрипт?

Автор: R_E_W Dec 18 2010, 13:42

(Glavar @ Dec 18 2010, 10:00) Перейти к цитате

3. Как сделать чтобы 5 числа каждого месяца в 00:00(к примеру), чтобы в одной из колонок все значения становились равны 0. Если возможно как то без триггеров и кровь, а то я так и непонял как с ними работать ((

Если 5 числа каждого месяца в 00:00 то для такой задачи лучше всего подходит крон. А точнее в данном случае это единственно верное решение. Работать с ним в принципе просто.
На хостинге какая панель управления? Ssh доступ есть? (к консоли, я надеюсь хостинг не на IIS =))

С скриптом тоже все просто


<?php
mysql_query('Update table_name SET field_name=0');//обнулит все значения столбца field_name таблицы table_name
?>


Опять же, лучше всего это делать кроном, так как если не кроном то прийдется куда-то писать еще флаг что скрипт отработал(чтобы он выполнился только один раз нужного числа). А кроном все просто, и триггеры не нужны.


Да и кстати из кода вот это удали где встречается:

else
echo "";

else условие не обязательно, а доп комманда доп время на выполнение (хоть и долисекунды, на глаз не заметишь =) , но программировать нужно учится правильно).

Автор: Glavar Dec 18 2010, 14:27

(R_E_W @ Dec 18 2010, 13:42) Перейти к цитате

Если 5 числа каждого месяца в 00:00 то для такой задачи лучше всего подходит крон. А точнее в данном случае это единственно верное решение. Работать с ним в принципе просто.
На хостинге какая панель управления? Ssh доступ есть? (к консоли, я надеюсь хостинг не на IIS =))

С скриптом тоже все просто


<?php
mysql_query('Update table_name SET field_name=0');//обнулит все значения столбца field_name таблицы table_name
?>


Опять же, лучше всего это делать кроном, так как если не кроном то прийдется куда-то писать еще флаг что скрипт отработал(чтобы он выполнился только один раз нужного числа). А кроном все просто, и триггеры не нужны.
Да и кстати из кода вот это удали где встречается:

else
echo "";

else условие не обязательно, а доп комманда доп время на выполнение (хоть и долисекунды, на глаз не заметишь =) , но программировать нужно учится правильно).


Сайт стоит у меня на компютере. Использую MySQL:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Web server:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «



Автор: R_E_W Dec 18 2010, 15:21

Для крона нужна любая unix система.
Ну так дальше сайт будет выкладываться на какой-то хостинг? А все норм пхп хостинги на unix системах
Вот тогда и настроишь крон. С Windows планировщиком не знаком, но думаю если погуглить не проблема будет настроить

Автор: Нурик Сакура Dec 18 2010, 23:01

И несколько оффтопный совет - обнови PHP до 5.3, потому что на днях мало того, что опубликовали версию 5.2.16 (в которой много багов пофикшено), так еще и официально прекратили поддержку ветки 5.2.

Автор: Glavar Dec 19 2010, 21:35

4. При написании и после обновления mysql:
$date_mes = date("Y-m-d");
$time = date("H:i:s");
Появилась ошыбка:


Strict Standards: date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Helsinki' for '2.0/no DST' instead in C:\AppServ\www\contest\index.php on line 6

Strict Standards: date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Helsinki' for '2.0/no DST' instead in C:\AppServ\www\contest\index.php on line 7

Автор: Нурик Сакура Dec 19 2010, 21:55

Может, при обновлении PHP, а не MySQL? Это не критичная ошибка, она просто указывает на то, что в настройках php.ini, по моему, не установлен временной пояс. Но я могу ошибаться, так как один раз только видел эту ошибку у себя на сервере и более опытные мне сказали, что она не критична.

UPD.: загуглил, таки да, это нужно просто в php.ini прописать такое:

[Date]
; Defines the default timezone used by the date functions
date.timezone = "Europe/Kiev"

Автор: Glavar Dec 19 2010, 22:05

(Нурик Сакура @ Dec 19 2010, 21:55) Перейти к цитате

Может, при обновлении PHP, а не MySQL? Это не критичная ошибка, она просто указывает на то, что в настройках php.ini, по моему, не установлен временной пояс. Но я могу ошибаться, так как один раз только видел эту ошибку у себя на сервере и более опытные мне сказали, что она не критична.

UPD.: загуглил, таки да, это нужно просто в php.ini прописать такое:
[Date]
; Defines the default timezone used by the date functions
date.timezone = "Europe/Kiev"


прописал, не помогло sorry.gif ВООО помогла функция на сайте <? date_default_timezone_set("Europe/Kiev"); ?>

Автор: AnNE DoM.ini Dec 19 2010, 22:39

после изменения php.ini надо апач рестартовать

Автор: Glavar Dec 20 2010, 19:47

5. Вопрос относиться не так к php, как javascript( jquery) хотелось бы сделать выпадающие окошко( как тут http://www.ruseller.com/lessons.php?rub=32&id=5870 ), но есть проблема, когда вписываешь её в цикл while выводит коряво sorry.gif
Пример кода:

<?
$results = mysql_query("SELECT * FROM table ORDER BY id DESC",$db);;

$place = 2;

while ($row = mysql_fetch_assoc($results)) {
    echo '<div id="main"><a class="button" href="#">'.$row["name"].'</a></div><div id="box"><p><b>'.$place.'</p></div>';
    $place++;
}

?>



<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="bouncebox_plugin/jquery.easing.1.3.js"></script>
<script type="text/javascript" src="bouncebox_plugin/jquery.bouncebox.1.0.js"></script>
<script type="text/javascript" src="script.js"></script>

Автор: iProphet Dec 20 2010, 21:12

Сделай так:


<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">
<script type="text/javascript" src="bouncebox_plugin/jquery.easing.1.3.js">
<script type="text/javascript" src="bouncebox_plugin/jquery.bouncebox.1.0.js">
<script type="text/javascript" src="script.js">
<?
$results = mysql_query("SELECT * FROM table ORDER BY id DESC",$db);

$place = 2;

echo '<div id="main">';
while ($row = mysql_fetch_assoc($results)) {
    echo '<a class="button" href="#">'.$row["name"].'</a></div><div id="box"><p><b>'.$place.'</p>';
    $place++;
}
echo '</div>';
?>

Автор: Glavar Dec 20 2010, 21:24

(iProphet @ Dec 20 2010, 21:12) Перейти к цитате

Сделай так:


<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">
<script type="text/javascript" src="bouncebox_plugin/jquery.easing.1.3.js">
<script type="text/javascript" src="bouncebox_plugin/jquery.bouncebox.1.0.js">
<script type="text/javascript" src="script.js">
<?
$results = mysql_query("SELECT * FROM table ORDER BY id DESC",$db);

$place = 2;

echo '<div id="main">';
while ($row = mysql_fetch_assoc($results)) {
    echo '<a class="button" href="#">'.$row["name"].'</a></div><div id="box"><p><b>'.$place.'</p>';
    $place++;
}
echo '</div>';
?>



Не помогло... mega_shok.gif

Автор: R_E_W Dec 20 2010, 22:40

(Glavar @ Dec 20 2010, 21:24) Перейти к цитате

Не помогло... mega_shok.gif

По ссылке стоит 404 страница не найдена. А что коряво выходит?
Ну а если по сути то у вас html нифига не правильный. Нету открывающегося div в начале и закрывающегося b тега в div#box. И я конечно не знаю че там у вас в script.js лежит, мб обработчик eventa по клику или еще чего, но факт что какой-то обработчик для показа дива. И хз какой css для того же div#box.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">
<script type="text/javascript" src="bouncebox_plugin/jquery.easing.1.3.js">
<script type="text/javascript" src="bouncebox_plugin/jquery.bouncebox.1.0.js">
<script type="text/javascript" src="script.js">
<?
$results = mysql_query("SELECT * FROM table ORDER BY id DESC",$db);

$place = 2;

echo '<div id="main">';
while ($row = mysql_fetch_assoc($results)) {
    echo '<div><a class="button" href="#">'.$row["name"].'</a></div><div id="box"><p><b>'.$place.'</b></p>';
    $place++;
}
echo '</div>';
?>

Автор: Glavar Dec 20 2010, 22:53

вот ссылка http://www.ruseller.com/lessons/les587/demo/demo.html
Вот так выводит в моем коде: http://uaimage.com/image/c1177b5b
А в Вашем: чистый экран.

Автор: R_E_W Dec 22 2010, 0:59

(Glavar @ Dec 20 2010, 22:53) Перейти к цитате

вот ссылка http://www.ruseller.com/lessons/les587/demo/demo.html
Вот так выводит в моем коде: http://uaimage.com/image/c1177b5b
А в Вашем: чистый экран.


<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="bouncebox_plugin/jquery.easing.1.3.js"></script>
<script type="text/javascript" src="bouncebox_plugin/jquery.bouncebox.1.0.js"></script>
<script type="text/javascript" src="script.js"></script>
<?
$results = mysql_query("SELECT * FROM table ORDER BY id DESC",$db);

$place = 2;

while ($row = mysql_fetch_assoc($results)) {
    echo '<div id="main"><a class="button" href="#">'.$row["name"].'</a></div><div id="box"><p><b>'.$place.'</b></p></div>';
    $place++;
}

?>

Так жирным будут только место.
А как выпадающее меню должно показываться? По нажатию на <a class="button" href="#">'.$row["name"].'</a>? Обработчик по нажатии на ссылку есть? Или с окошком проблем нету?

Автор: Glavar Dec 22 2010, 17:28

(R_E_W @ Dec 22 2010, 0:59) Перейти к цитате


<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="bouncebox_plugin/jquery.easing.1.3.js"></script>
<script type="text/javascript" src="bouncebox_plugin/jquery.bouncebox.1.0.js"></script>
<script type="text/javascript" src="script.js"></script>
<?
$results = mysql_query("SELECT * FROM table ORDER BY id DESC",$db);

$place = 2;

while ($row = mysql_fetch_assoc($results)) {
    echo '<div id="main"><a class="button" href="#">'.$row["name"].'</a></div><div id="box"><p><b>'.$place.'</b></p></div>';
    $place++;
}

?>

Так жирным будут только место.
А как выпадающее меню должно показываться? По нажатию на <a class="button" href="#">'.$row["name"].'</a>? Обработчик по нажатии на ссылку есть? Или с окошком проблем нету?



Вто м и дело! Окошка нету. А мне надо что б при нажатии разных ссылок выезжала разная надпись

Автор: R_E_W Dec 23 2010, 21:36

Ну его наверное нету, потому что нету кода.
А ты пробовал читать урок? http://ruseller.com/lessons.php?rub=32&id=587 Шаг 3. Там жеж все расписано. Сделай все по уроку, если получится, модифицируй код чтоб было много кнопок, потом добавь php, потом разные надписи.
C js у меня не все так хорошо, не тестируя код не напишу, а тестить нету времени щас

Автор: Glavar Dec 25 2010, 18:47

Сделал подругому, но тоже хорошо.

Автор: Glavar Dec 25 2010, 20:08

КАК мне подсчитать количество записей в колонке?
---------
| table |
----------
| kyl9 |
| m94 |
| stol |

Количество всех записей 3

Автор: Cach Dec 25 2010, 20:17

(Glavar @ Dec 25 2010, 20:08) Перейти к цитате

КАК мне подсчитать количество записей в колонке?
---------
| table |
----------
| kyl9 |
| m94 |
| stol |

Количество всех записей 3

mysql_num_rows()?

Автор: Glavar Dec 25 2010, 20:29

(Cach @ Dec 25 2010, 20:17) Перейти к цитате

mysql_num_rows()?

СПС, а я брал $query = mysql_query('SELECT COUNT(DISTINCT id) FROM music',$db);
$numOL = mysql_num_rows($query);
и не мог понять в чем пробл

Автор: R_E_W Dec 25 2010, 21:31

mysql_num_rows не катит, т.к. таблице к примеру будет 100 записей, а выбираться будет по 20 на страницу(запрос с лимитом), то mysql_num_rows не даст представления о общем количестве записей вообще никакого.
Не работало потому что нужно
$result = mysql_query('SELECT COUNT(DISTINCT id) as count FROM music',$db);
$row = mysql_fetch_array($res);
$numOL = $row['count'];

кстати, у вас что в таблице id не уникален? Если нет, то какой он тогда id, а если ключ стоит PRIMARY то distinct не нужно юзать, только лишняя нагруза. + лучше юзать Count(*) работает быстрее, чем по полю

Автор: Glavar Dec 25 2010, 22:42

(R_E_W @ Dec 25 2010, 21:31) Перейти к цитате

mysql_num_rows не катит, т.к. таблице к примеру будет 100 записей, а выбираться будет по 20 на страницу(запрос с лимитом), то mysql_num_rows не даст представления о общем количестве записей вообще никакого.
Не работало потому что нужно
$result = mysql_query('SELECT COUNT(DISTINCT id) as count FROM music',$db);
$row = mysql_fetch_array($res);
$numOL = $row['count'];

кстати, у вас что в таблице id не уникален? Если нет, то какой он тогда id, а если ключ стоит PRIMARY то distinct не нужно юзать, только лишняя нагруза. + лучше юзать Count(*) работает быстрее, чем по полю

id уник. Просто задаю вопрос и все возможные сразу.

Автор: AnNE DoM.ini Dec 26 2010, 0:04

$sql='select count(*) as `count` from table';

$res = mysql_fetch_assoc(msqyl_query($sql));
echo $res['count'];

Автор: Glavar Jan 2 2011, 18:00

5. Подскажите где б взять или как написать скрипт активности на сайте и что б оно считало общую сумму в часах?

Сделал запрос:

<form action="exit.php" method="post">
                    <input type="hidden" name="login">
                    <input type="submit" name="submit" value="Выйти">
                    </form>


И обработчик:
<?php
if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }
mysql_query ("UPDATE users SET date_out=NOW(),time_out=NOW() WHERE login='$login'");

Но время 0000 и нивкакую

Автор: AnNE DoM.ini Jan 2 2011, 19:22

А тип полей date_out и time_out ?
мускульное now() вернёт дату в виде "2011-01-02 19:20:31" это тип "datetime", а unix_timestamp() вернёт тебе интовое представление (что-то типа 1312365485)

Автор: Glavar Jan 2 2011, 19:28

date_out = date
time_out = time
На сайте:

<form action="exit.php" method="post">
                    <input type="hidden" name="login" value="<? echo $_SESSION['login'];?>">
                    <input type="submit" name="submit" value="Выйти">
                    </form>


Пользователи у меня на сесиях, так вот полный код:
<?php
date_default_timezone_set("Europe/Kiev");
if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }

mysql_query ("UPDATE users SET date_out=NOW(),time_out=NOW() WHERE login='$login'");

session_start();

if (empty($_SESSION['login']) or empty($_SESSION['password']))
{
exit ("Доступ на эту страницу разрешен только зарегистрированным пользователям. Если вы зарегистрированы, то войдите на сайт под своим логином и паролем<br><a href='index.php'>Главная страница</a>");
}

unset($_SESSION['password']);
unset($_SESSION['login']);
unset($_SESSION['id']);

exit("<html><head><meta http-equiv='Refresh' content='0; URL=index.php'></head></html>");
?>
, дело в том что при входе у меня дата работает, а при выходе - нет. И не работает не в session_start();, не перед ней, ну и после понятное дело

Автор: Glavar Jan 2 2011, 19:41

Как сделать, что б на сайте показывало кто онлайн?

Автор: thisisit Jan 2 2011, 21:23

Ajax запрос раз в 10 секунд и in-memory табличка. Это если мускл и пхп и нет другого выбора.

Автор: Glavar Jan 2 2011, 23:29

6. Подскажите как сделать что б пользователь не мог отправить сообщение ранче чем через 20 сек после отправленого. И не больше 10 за час одному и томуже пользователю?
Форма:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «



Обработчик:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Автор: Glavar Jan 3 2011, 15:28

7. Навигация. Подскажите как бы сделать навигацию без перезагрузки. Есть файлы 1-5.php . И потом при нажатии на OnClick подгружается файл. Или все файлы уже загружены но 2-5.php - невидимые и только после нажатия их можно увидеть

Автор: Glavar Jan 3 2011, 22:34

Запрос к базе :
mysql_query("SELECT * FROM message WHERE adresat='$login' ORDER BY date_mes AND time DESC",$db);

А выводит:
Дата: 2010-01-02, 23:26:34
Дата: 2010-01-03, 22:15:31
Дата: 2010-01-03, 22:20:49
Дата: 2010-01-14, 00:00:00

Как исправить? Что б было:
Дата: 2010-01-14, 00:00:00
Дата: 2010-01-03, 22:20:49
Дата: 2010-01-03, 22:15:31
Дата: 2010-01-02, 23:26:34

Автор: AnNE DoM.ini Jan 3 2011, 22:58

order by date_mes desc and time asc

Автор: Glavar Jan 4 2011, 11:08

Выбило ошыбку Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\contest\cont.php on line 415:

412. <?  
413. $mes_res = mysql_query("SELECT * FROM message WHERE adresat='$login' ORDER BY (date_mes DESC  AND time ASC)",$db);
414. if (mysql_num_rows($mes_res) > 0)
415. {
416. $mes_row = mysql_fetch_array($mes_res);
417. do
418. {
...........
437. }
438. while ($mes_row = mysql_fetch_array($mes_res));
439. }
441. else
....
445. ?>

Автор: Glavar Jan 4 2011, 13:33

Написал все с 0, заработало! где допустил ошибку так и не понял O_o.gif , но главное что работает

Автор: Glavar Jan 4 2011, 17:05

Написал код просмотра сообщений:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «


Но дело в том что когда в базе 21,22,23 сообщений и т.п, то страниц показывает 2, а не 3. как бы сделать округление?

Автор: AnNE DoM.ini Jan 4 2011, 17:40

<?
echo ceil(23/10); // 3 ceil() - округление вверх.
?>

Автор: Glavar Jan 5 2011, 15:05

Чет мозг кипит, немогу придумать как сделать
Вот код:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «



Если сообщение не прочитаное, то в строке 31 <td style="background-color: #CCCCCC"> изменить на <td style="background-color: blue;">. А если прочитаное оставить как есть и выводить дальше. Что-то вроде этого
$mess_tes = mysql_query("SELECT * FROM message WHERE adresat='$login' AND unread='1'",$db);
                            if (mysql_num_rows($mess_tes) > 0)
                            {
                            echo 'blue";
                            }
                            else echo "#CCCCCC";


sorry.gif

Автор: AnNE DoM.ini Jan 5 2011, 15:21

Ты по неправильному пути идёшь, почитай про MVC, простым языком - про разделение логики и отображения.

Автор: Glavar Jan 5 2011, 15:30

А как мне сделать еще одну сортировку, по уже отсортированому запросу
$mes_re = mysql_query("SELECT * FROM message WHERE adresat='$login' ORDER BY date_mes DESC,time DESC LIMIT $lim, 10",$db);
Вида: (SELECT * FROM $mes_re WHERE uread='1')
возможно что-то такое? потомучто есле делать if-ом, то задача будет выполняться не коректно

Схема действий:
отсортиованый список $mes_re по дате;
..............................<=......................=>
Список unread.........................................Список read
вытаскиваем поля....................................вытаскиваем поля
все что не прочитанное.............................все что прочитанное
..............................=>......................<=................................
1. Не прочитанное
2. Прочитанное
3. Прочитанное
4. Не прочитанное
и т.п.

Автор: AnNE DoM.ini Jan 5 2011, 15:59

$mes_re = mysql_query("SELECT * FROM message WHERE adresat='$login' ORDER BY date_mes DESC,time DESC, uread LIMIT $lim, 10",$db);

Автор: Glavar Jan 5 2011, 17:32

8. А как сделать страницу 404? что б при заходе на левый адрес говорила нету такой

Автор: AnNE DoM.ini Jan 5 2011, 18:49

.htaccess:
#страница не найдена / Page not found
ErrorDocument 404 /404.htm
#Доступ запрешён / Forbidden
ErrorDocument 403 /403.htm
# bad request / плохой запрос / некорректно сформированый
ErrorDocument 400 /400.htm
# Внутреняя ошибка сервера / internal serevr error
ErrorDocument 500 /500.htm

Автор: Glavar Jan 7 2011, 12:32

Спс

Автор: Glavar Jan 7 2011, 21:05

Сделал неплохой обработчик:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Не могу понять почему выдает ошибку:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\contest\page1_700.php on line 48

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\contest\page1_700.php on line 51

47:$results = mysql_query('SELECT * FROM music WHERE category="1" ORDER BY golosa DESC LIMIT $lim, 10',$db);
48:$myrow = mysql_fetch_array($results);

51:while ($row = mysql_fetch_assoc($results))

Автор: AnNE DoM.ini Jan 7 2011, 21:11

47:$results = mysql_query("SELECT * FROM music WHERE category='1' ORDER BY golosa DESC LIMIT $lim, 10",$db);

Следи за типом кавычек.

Автор: Glavar Jan 7 2011, 21:30

AnNE DoM.ini спс БИГ!

Автор: Glavar Jan 8 2011, 18:11

Помогите найти проблему:
Скрипт:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «


Обработчик:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Все время показывает: Изменения не сохранены

Автор: AnNE DoM.ini Jan 8 2011, 18:30

Ёпрст, ты читай, что функции возвращают хотя-бы.
mysql_query возвращает интовый идентификатор ресурса, указывающего на запрос и boolean false в случае неудачи.

Так-что тебе надо проверять просто:


$result = mysql_query(...);
if(result)
{
echo "Изменения сохранены!";
}
else
{
echo "Изменения не сохранены!";
}

Автор: Glavar Jan 8 2011, 20:37

Нашол поломку! Одну переменную не ту взял.

Автор: AnNE DoM.ini Jan 8 2011, 20:43

'TRUE' - это строка, содержащая 4 символа, а не булевая "истина", булевая истина записывается просто true

В моём коде, если мускул вернёт false - оно пойдёт в ветку else, а если вернёт число - оно будет воспринято, как истинно.

Автор: Glavar Jan 8 2011, 21:11

9. Как удалить любой файл и папку с сервера?

Автор: AnNE DoM.ini Jan 8 2011, 21:14

unlink('/путь/к/файлу/или/папке');

Автор: Glavar Jan 8 2011, 21:17

Спс все заработало

Автор: AnNE DoM.ini Jan 8 2011, 21:26

Ну ёклмн, не бывает "почему-то" в программировании, пиши сюда, что за ошибка, и нафиг тебе какой-то ssh2_sftp_unlink ?

Автор: Glavar Jan 9 2011, 21:36

AnNE DoM.ini все заработало

Автор: Glavar Jan 12 2011, 10:11

Друзья помогите с сортировкой по убыванию:
http://uaimage.com/image/943c79e2

Автор: fli Jan 12 2011, 12:34

так?
select * from test order by (num1+num2);

Автор: Glavar Jan 12 2011, 16:24

(fli @ Jan 12 2011, 12:34) Перейти к цитате

так?
select * from test order by (num1+num2);

спс! помогло, но не совсем то...

Автор: info_defender Jan 12 2011, 18:12

select (num1+num2) from test order by (num1+num2) desc

Автор: Glavar Jan 14 2011, 23:22

Подскажите где можно взять готовый список стран и городов?(очень надо СНГ и Европа)
Но уже с готовой формой:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Автор: HAMANN Jan 15 2011, 0:28

Находишь гуглом что-то вроде этого:

http://www.classifiers.ru/clas/info/11

Достаешь из базы в нужном тебе виде.

Аналогично с другими городами и странами.

Вот тебе готовый sql - города Украины
http://mikhailstadnik.com/uploads/ua-region-city.sql

А вот все, что нужно:
http://www.classifiers.ru/clas/info/1

Автор: Glavar Jan 19 2011, 18:26

как можно защитить лучше свой сайт от взлома. От такого http://forum.0day.kiev.ua/index.php?showtopic=209622.

Автор: AnNE DoM.ini Jan 19 2011, 18:49

Думать головой

Автор: Glavar Jan 19 2011, 19:20

Будем думать

Автор: Glavar Jan 21 2011, 14:56

как отправить сообщение на e-mail?
mail('[email protected]', 'the subject', 'the message', null,
'[email protected]');

[email protected] - вписал свое мыло, дало ошибку:
Warning: mail() [function.mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in ...\save_user.php on line 36

Автор: reiten Jan 21 2011, 15:49

Сделать то, что написано в сообщении об ошибке:
- либо поправить php.ini, установив там параметр sendmail_from
- либо отправлять вот так:

mail($to, $subject, $message, "From: ". $from. "\r\n");

Автор: Glavar Jan 21 2011, 15:54

; For Win32 only.
SMTP = localhost
smtp_port = 25

; For Win32 only.
;sendmail_from = [email protected]
как надо поправить?

Автор: reiten Jan 21 2011, 16:34

Как написано, так и править. Если php работает под Win32, то надо указать адрес и порт smtp-сервера, через который будет уходить почта (SMTP и smtp_port) + адрес, от которого идет рассылка (раскоментировать и исправить строку sendmail_from).

Если под Unix - то чуть ниже есть вот такая строка:

; sendmail_path =

Ее надо поправить на что-то вроде
sendmail_path = /usr/sbin/sendmail

Автор: Glavar Jan 22 2011, 0:27

не пашет

Автор: AnNE DoM.ini Jan 22 2011, 1:52

1. google "windows php send mail"
2. http://www.simplecoding.org/php-mail-pod-windows.html
3. ?????
4. PROFIT!

Автор: Glavar Jan 22 2011, 19:40

http://www.simplecoding.org/php-mail-pod-windows.html сделал как тут показано, даже зарегался на маили.ру . Ничего не получилось! в браузере пишет что сообщение отправлено, но оно никуда не уходит.
Менял порты, смотрел у кого какие были проблемы, исправлял и дошел до :

11.01.22 19:00:01 ** spam message rejected. Please visit http://mail.ru/notspam/ or report details to [email protected]. Error code: 1B1B28BFD73527EC847D386BFDE4F956F43EAC805673F8FEA853297B672F1E60233F463ED5288CAC
0F199C72693CEDB0269AB755808F76B6<EOL>

Автор: AnNE DoM.ini Jan 22 2011, 21:57

spam message rejected = письмо расценено как спам, отправка запрещена.

Автор: Glavar Jan 23 2011, 12:41

это я и сам понял

Автор: Glavar Jan 23 2011, 14:47

а есть какаето альтернативная программа или сайт с формой?

Автор: AnNE DoM.ini Jan 23 2011, 16:52

Забей на почту, на хостинге - работать будет. Просто оставь там функцию mail и всё.

Автор: Glavar Jan 23 2011, 18:43

я хотел сделать хост из своего старого компьютера

Автор: AnNE DoM.ini Jan 23 2011, 20:02

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

Автор: fli Jan 23 2011, 22:01

Подкиньте, плиз, пример кода с формой для отправки почты через локальный почт.сервер.
Благодарю.

Автор: AnNE DoM.ini Jan 23 2011, 23:07


<?
if($_POST['submit']=='ok')
{
$sendResult = mail('[email protected]','Тема письма',$_POST['message']);
if($sendResult)
{
echo "Письмо отправлено нормально";
}
else
{
echo "Письмо не отправлено";
}
}
?>
<from method='post'>
<textarea name='message'></textarea> <input type='submit' value='Отправить письмо'>
</form>

Автор: fli Jan 24 2011, 9:27

(AnNE DoM.ini @ Jan 23 2011, 23:07) Перейти к цитате


......


ммм, а как через smtp сервер отправлять?
чтобы указать сервер, порт, имя пользователя?

И можете показать синтаксис функций типа onclick. Например чтобы при нажатии мышкой по textarea она очищалась. Спасибо.

Автор: AnNE DoM.ini Jan 24 2011, 10:58

(fli @ Jan 24 2011, 9:27) Перейти к цитате

ммм, а как через smtp сервер отправлять?
чтобы указать сервер, порт, имя пользователя?

И можете показать синтаксис функций типа onclick. Например чтобы при нажатии мышкой по textarea она очищалась. Спасибо.

http://www.phpclasses.org/package/14-PHP-Sends-e-mail-messages-via-SMTP-protocol.html
Гуглом хотя-бы пользовался.

<textarea onclick='this.value=""'></textarea>

Автор: fli Jan 24 2011, 11:30

(AnNE DoM.ini @ Jan 24 2011, 10:58) Перейти к цитате

<textarea onclick='this.value=""'></textarea>

спасибо. Искал, просто то что находил не работало, а понять код я не мог. umnik2.gif

Автор: Glavar Jan 25 2011, 14:22

$r = mysql_query("SELECT * FROM test Limit 1, 10",$db);

как бы сделать Limit 1, и до последнего?

Автор: паZитифф Jan 25 2011, 14:25

$r = mysql_query("SELECT * FROM test",$db);


Автор: Glavar Jan 25 2011, 14:32

(паZитифф @ Jan 25 2011, 15:25) Перейти к цитате

$r = mysql_query("SELECT * FROM test",$db);


не совсе то мне надо выбирать со 2 значения и до последного.
но я подумал и вот как сделал:

$gol = mysql_num_rows(mysql_query("SELECT * FROM test",$db));
$r = mysql_query("SELECT * FROM test Limit 1, $gol",$db);

Автор: Glavar Jan 25 2011, 14:52

все вопрос отпал ))

Автор: AnNE DoM.ini Jan 25 2011, 17:48

Правильно так:


select * from table where id>min(id)


Без использования не нужного, в данном случае mysql_num_rows

Автор: Glavar Jan 26 2011, 22:46

Подскажите как вывести количество одинаковых данныхЖ
Пример
1. Игорь
2. Вова
3. Дмитрий
4. Вова
5. Вова
6. Вова
7. Игорь

Вывод
1. Вова - 4
2. Игорь - 2
3. Дмитрий - 1

Автор: Powerhead Jan 26 2011, 23:53

(Glavar @ Jan 26 2011, 22:46) Перейти к цитате

Подскажите как вывести количество одинаковых данныхЖ
Пример
1. Игорь
2. Вова
3. Дмитрий
4. Вова
5. Вова
6. Вова
7. Игорь

Вывод
1. Вова - 4
2. Игорь - 2
3. Дмитрий - 1

А где данные хранятся?

Автор: AnNE DoM.ini Jan 27 2011, 0:40

мускул-же небось
select name,sum(count(name)) from table group by name

Автор: Glavar Jan 27 2011, 9:42

(AnNE DoM.ini @ Jan 27 2011, 1:40) Перейти к цитате

мускул-же небось
select name,sum(count(name)) from table group by name

Чет я не понял как оно работает. Но эту проблему решил.

Автор: YoGi Jan 29 2011, 20:26

подскажите, вот к примеру есть форма

<select name=operation>
<option value=1>Умножение</option>
<option value=2>Деление</option>
<option value=3>Сложение</option>
<option value=4>Вычитание</option>
</select>

и есть такая функция

function matchOperation ($a, $b, $operation) {

switch ($operation) {

case "Сложение" :
echo $a + $b ;
break;
case "Умножение" :
echo $a * $b ;
break;
case "Вычитание" :
echo $a - $b ;
break;
case "Деление" :
echo $a / $b ;
break;
}

вопрос как подвязать выбор действия в форме, к действию в функции и вывести результат?

Автор: iProphet Jan 29 2011, 20:56

<script>
function matchOperation (form) {

var operation = form.operation.value;
var a = число, можно достать из поля;
var b = тоже любое число, можно написать просто, можно откуда-то вытащить;
switch (operation) {
case "3" :
alert (a+b);
break;
case "1" :
alert (a*b);
break;
case "4" :
alert (a-b);
break;
case "2" :
alert (a/b);
break;
}
</script>


<form action="" name="qwe">
<select name="operation" onchange="matchOperation (this.form)">
<option value=1>Умножение</option>
<option value=2>Деление</option>
<option value=3>Сложение</option>
<option value=4>Вычитание</option>
</select>
</form>


Это если хочешь на Javascript осуществить, если на php, то подругому.

Автор: YoGi Jan 29 2011, 21:18

хочу на пхп)

Автор: iProphet Jan 29 2011, 21:38

Содержимое html:

<form action="путь к php файлу" method="post">
<select name=operation>
<option value=1>Умножение</option>
<option value=2>Деление</option>
<option value=3>Сложение</option>
<option value=4>Вычитание</option>
</select>
</form>



Содержимое php файла:

function matchOperation ($a, $b, $operation) {

switch ($operation) {
case "1" :
echo $a * $b;
break;
case "2" :
echo $a / $b;
break;
case "3" :
echo $a + $b;
break;
case "4" :
echo $a - $b;
break;
}
}

if($_POST['operation']) {

$operation = intval ($_POST['operation']);
$a = 2; //Может быть любое другое число
$b = 2; //Может быть любое другое число

matchOperation ($a, $b, $operation);
}

Автор: vGamBIT Jan 29 2011, 21:42

(YoGi @ Jan 29 2011, 21:18) Перейти к цитате

хочу на пхп)

Приблизительно так(код на наличие опечаток не проверял):

<select name="operation">
<option value=1>Умножение</option>
<option value=2>Деление</option>
<option value=3>Сложение</option>
<option value=4>Вычитание</option>
</select>
к html надо добавить еще форму для отправки параметров(в данном случае a и b )
<?php

function matchOperation ($a, $b, $operation) {

switch ($operation) {

case 3:
echo $a + $b;
break;
case 1:
echo $a * $b;
break;
case 4:
echo $a - $b;
break;
case 2 :
echo $a / $b;
break;
}
if(isset($_GET['operation']) && isset($_GET['a']) && isset($_GET['b'])) //проверка ли переданы данные
  matchOperation($_GET['a'], $_GET['b'], $_GET['operation')  );
?>

UPD: Вижу меня уже опередили, но мой вариант немного отличается, т.к. использован метод GET, а он предпочтительней в ситуациях когда значения параметров не изменяют данные.

Автор: YoGi Jan 29 2011, 22:20

спасибо сейчас попробую

vGamBIT приблизительно так и думал, а если вместо GET использовать POST? мы ведь isset проверяем прописана ли переменная, а переменная через форму передается POSTом?

использовал POST, получилось smile.gif


Автор: Glavar Jan 30 2011, 20:15

есть код:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Он показывает все файлы что есть в данной папке, как ограничить формат файлов?
как тут использоватьpreg_match('/[.](JPG)|(jpg)') ?

Автор: vGamBIT Jan 30 2011, 20:19

function printQueue($queue, $path)
    {
        foreach ($queue as $file)
        {
            if(preg_match( ....BLAHBLAHBLAH....))
             printFile($file, $path);
        }
    }

Даже наверное лучше так:

  while (false !== ($file = readdir($handle)))
            {
                if (is_dir($path.$file) && $file != '.' && $file !='..')
                    printSubDir($file, $path, $queue);
                else
                   if(preg_match( ....BLAHBLAHBLAH....))
                     $queue[] = $file;
            }

Автор: Glavar Jan 30 2011, 20:23

(vGamBIT @ Jan 30 2011, 20:19) Перейти к цитате

function printQueue($queue, $path)
    {
        foreach ($queue as $file)
        {
            if(preg_match( ....BLAHBLAHBLAH....))
             printFile($file, $path);
        }
    }

Даже наверное лучше так:

  while (false !== ($file = readdir($handle)))
            {
                if (is_dir($path.$file) && $file != '.' && $file !='..')
                    printSubDir($file, $path, $queue);
                else
                   if(preg_match( ....BLAHBLAHBLAH....))
                     $queue[] = $file;
            }



спс помогло и там, и там написал(навсяк)

Автор: vGamBIT Jan 30 2011, 20:33

Достаточно одной проверки, лишние действия - лишняя нагрузка на сервер, потеря быстродействия, больший размер кода.

Автор: Glavar Jan 30 2011, 21:09

спс за совет

Автор: Cach Jan 31 2011, 18:16

Может кто-то помочь с сортировкой?
Есть код, плана:

$result = mssql_query("SELECT a,b FROM table ORDER BY a DESC, b DESC");

Хочется, что бы выводимый результат сортировался (a/b)*100 DESC (В формуле a и b тоже должны быть DESC)

Автор: thisisit Jan 31 2011, 18:21

А ты вычисляй значения (a/b*100) при добавлении записи в таблицу, назови его каким-то z и тогда сортировка будет ORDER BY z DESC и даже можно будет использовать индекс по полю z и не грузить базу тупыми запросами.

Автор: Cach Jan 31 2011, 18:27

(thisisit @ Jan 31 2011, 18:21) Перейти к цитате

А ты вычисляй значения (a/b*100) при добавлении записи в таблицу, назови его каким-то z и тогда сортировка будет ORDER BY z DESC и даже можно будет использовать индекс по полю z и не грузить базу тупыми запросами.

В том то и проблема, что таблица уже готова и заполнена. Изменять её нельзя не при каких условиях

Автор: AnNE DoM.ini Jan 31 2011, 18:35

select *,(a/b*100) as order_field from table order by order_field

Автор: thisisit Jan 31 2011, 18:39

Всегда можно изменять. Изучай ALTER TABLE. Если не хочется, можно создать вторую таблицу, где хранить (id, z).
Капец, это же реляционная база данных, она создана для этого.

Автор: Cach Jan 31 2011, 18:42

(thisisit @ Jan 31 2011, 18:39) Перейти к цитате

Всегда можно изменять. Изучай ALTER TABLE. Если не хочется, можно создать вторую таблицу, где хранить (id, z).
Капец, это же реляционная база данных, она создана для этого.

Что изменять можно - я знаю. Только если что-то там трону, выхвачу по шее)))

(AnNE DoM.ini @ Jan 31 2011, 18:35) Перейти к цитате

select *,(a/b*100) as order_field from table order by order_field

Мне бы так, что бы А и В были DESC. Мне нужно подставлять в формулу от большего к меньшему

Автор: thisisit Jan 31 2011, 18:42

(AnNE DoM.ini @ Jan 31 2011, 18:35) Перейти к цитате

select *,(a/b*100) as order_field from table order by order_field

А вот так делать нельзя, когда-то такой перебор начнет ложить всю базу smile.gif

Автор: AnNE DoM.ini Jan 31 2011, 18:46

Ну, таблицы разные бывают, если там 3 записи, то можно и забить

Автор: fli Feb 2 2011, 17:15

Помогите с запросом:
в поле "cat", типа set, есть значения: a,b,c,d,e,f
Нужно строго выбрать поля со значениями, например там где поле имеет значения b,d,e; или a,f; итд.
Может как-то через find_in_set можно? подскажите.

И еще. Делаю экспорт таблицы через phpmyadmin в формат sql;
Если импортировать этот файл, то русские буквы отображаются не корректно: барби
кодировка таблицы и атрибутов cp1251. При импорте стоит utf8. Если поставить cp1251 или latin1 пишет
#1273 - Unknown collation: '
'

mysql> show variables like 'character%';

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Подскажите, как побороть?

Автор: AnNE DoM.ini Feb 2 2011, 18:43

set names 'cp1251'

Автор: fli Feb 3 2011, 9:59

Спасибо.
Дивное дело.
Поля типа varchar нормально отображаются. А вот поле text: системы

UPD: Короче, лучше делать копию через mysqldump.exe. Все норм вроде.

Автор: YoGi Feb 21 2011, 21:54

подскажите, имеется :

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «


информация о графических файлах, переданных в uploads показывается в тестовом виде, а как вывести на страницу сами загруженные файлы?

Автор: R_E_W Feb 27 2011, 8:44

Если заранее известно что файлы графические то нужно в тег img вставить путь к картинке(относительный или абсолютный)
т.е. в вашем случае вместо echo "$file<br/>"; будет что-то типо
echo "<img src='$c.$file' /><br />";

Автор: Crazy* Mar 25 2011, 11:14

Помогите, а то голова кипит!

$email_header = "From: Crazy*<[email protected]>\nMIME-Version: 1.0\nContent-Type: text/plain; charset=Windows-1251\n";
        $email_subject = "Тема";
        $email_body = "МОЙ ТЕКСТ";
        @mail($email, "=?windows-1251?B?".base64_encode($email_subject)."?=", $email_body, $email_header);


при отправке с моего сервера (линька), изначально вообще письма не приходили.... почитал маны, настроил сервер.
в итоге что имеем, письма приходят только на те почтовики, которые не запрашивают емейл отправителя, (gmail.com \ bigmir.net (ибо использует тот же гмейл))
вот беда sad.gif

Подскажите, что делать.... dash2.gif dash2.gif dash2.gif dash2.gif

Автор: AnNE DoM.ini Mar 25 2011, 12:27

Вот тебе отправная точка
http://help.ubuntu.ru/wiki/%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D1%81%D0%BF%D0%B0%D0%BC%D0%B0_%D0%BD%D0%B0_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5_smtp_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D0%B0

Не используй @ в коде.

Автор: reiten Mar 25 2011, 18:51

Настрой smtp-релей через тот же gmail.com и почта будет ходить куда угодно.

Автор: usja Mar 25 2011, 19:53

(Crazy* @ Mar 25 2011, 11:14) Перейти к цитате


Подскажите, что делать.... dash2.gif dash2.gif dash2.gif dash2.gif

http://phpclub.ru/detail/article/mail
Идеальный вариант - отправка через smtp. В интернете есть различные классы для работы с смтп. Если используете фреймворки - то отправка еще проще происходит.
Больше всех проблем будут с mail.ru и mail.ua/
mail.ru требует прописывать SPF в днс

(YoGi @ Feb 21 2011, 21:54) Перейти к цитате


информация о графических файлах, переданных в uploads показывается в тестовом виде, а как вывести на страницу сами загруженные файлы?

вы используете
readdir($handle)

а это чтение файла как текстового. Для отображения вам нужно, либо как предлагали - через тег <img>
либо выдавать браузеру заголовок о том, что чтение происходит графического файла:

header ('Content-type: image/jpeg');

но, в этом случае, заголовок должен идти первым. Учитывая, что у вас помимо графики есть и текст, то лучше использовать вывод изображения через тег <img>.
Не забывайте, что в папке, где вы сохраняете графические файлы, или любые другие, которые принимает от пользователей, должны быть закрыты на выполнение.

Автор: Crazy* Mar 26 2011, 11:13

(reiten @ Mar 25 2011, 18:51) Перейти к цитате

Настрой smtp-релей через тот же gmail.com и почта будет ходить куда угодно.

Вот не плохой вариант, есть примеры ?
У меня сейчас прописан только локалхост - как релей. То есть будет достаточно, вместо локалхоста вписать smtp.gmail.com ?

(usja @ Mar 25 2011, 19:53) Перейти к цитате

http://phpclub.ru/detail/article/mail
Идеальный вариант - отправка через smtp. В интернете есть различные классы для работы с смтп. Если используете фреймворки - то отправка еще проще происходит.
Больше всех проблем будут с mail.ru и mail.ua/
mail.ru требует прописывать SPF в днс

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

Автор: usja Mar 26 2011, 13:11

(Crazy* @ Mar 26 2011, 11:13) Перейти к цитате

Ну или как описали выше, пустить через гугл??

Тут http://phpcoder.ws/2009-04/otpravka-pisem-iz-php-cherez-smtp-server.html есть пример и описание как пользоваться классом, там же есть и пример.

Если есть возможность установить из PEAR библиотеку Mail (можно её просто скачать и подключить в скрипт):

<?php
require_once "Mail.php";

$from = "Sandra Sender <[email protected]>";
$to = "Ramona Recipient <[email protected]>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";

$host = "mail.example.com";
$username = "smtp_username";
$password = "smtp_password";

$headers = array ('From' => $from,
   'To' => $to,
   'Subject' => $subject);
$smtp = Mail::factory('smtp',
   array ('host' => $host,
     'auth' => true,
     'username' => $username,
     'password' => $password));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
   echo("<p>" . $mail->getMessage() . "</p>");
  } else {
   echo("<p>Message successfully sent!</p>");
  }
?>


У меня сейчас прописан только локалхост - как релей. То есть будет достаточно, вместо локалхоста вписать smtp.gmail.com ?

нет. Для гугла нужна будет аутентификация (в примерах выше там есть возможность указать настройки подключения).

Автор: YoGi Mar 31 2011, 9:06

Если заранее известно что файлы графические то нужно в тег img вставить путь к картинке(относительный или абсолютный)
т.е. в вашем случае вместо echo "$file<br/>"; будет что-то типо
echo "<img src='$c.$file' /><br />";


все равно не отображается sad.gif

Автор: iProphet Mar 31 2011, 18:28

(R_E_W @ Feb 27 2011, 9:44) Перейти к цитате

Если заранее известно что файлы графические то нужно в тег img вставить путь к картинке(относительный или абсолютный)
т.е. в вашем случае вместо echo "$file<br/>"; будет что-то типо
echo "<img src='$c.$file' /><br />";

Напиши лучше
echo '<img src="' . $c . $file . '" /><br />';

Автор: YoGi Mar 31 2011, 18:52

(iProphet @ Mar 31 2011, 19:28) Перейти к цитате

Напиши лучше
echo '<img src="' . $c . $file . '" /><br />';


да так действительно лучше drinks.gif

а почему echo "<img src='$c.$file' /><br />"; не сработала?

Автор: AnNE DoM.ini Apr 1 2011, 22:50

(YoGi @ Mar 31 2011, 19:52) Перейти к цитате

да так действительно лучше drinks.gif

а почему echo "<img src='$c.$file' /><br />"; не сработала?

Потому что вывод ошибок надо включать и смотреть, что там написано - не хватает операторов склеивания строк перед $c.$file и после

Автор: iProphet Apr 2 2011, 4:31

(YoGi @ Mar 31 2011, 19:52) Перейти к цитате

да так действительно лучше drinks.gif

а почему echo "<img src='$c.$file' /><br />"; не сработала?

А я думаю это из-за того что точка строит.

Автор: Glavar May 2 2011, 17:06

спс сделал

Автор: AnNE DoM.ini May 2 2011, 17:17

Полный запрос для $result2 - в студию.

Автор: Glavar May 2 2011, 17:27

$('#dialog #send_up').click(function(){
    var login = $("#dialog #login").val();
    var email=$('#dialog #email').val();
    var password=$('#dialog #password').val();
    var password2=$('#dialog #password2').val();
    var lastname=$('#dialog #lastname').val();
    var name=$('#dialog #name').val();
    var thirdname=$('#dialog #thirdname').val();
var fupload=$('#dialog #fupload').val();
    var fack='';var group='';
    if (t1==1){fack=$('#dialog #fack').val();} else {fack=$('#dialog #fack1').val();}
    if (t1==1){group=$('#dialog #group').val();} else {group=$('#dialog #group1').val();}
        $.ajax({
                type: "POST",
                url: "save_user.php",
                data: {
                    email:email,
                    login:login,
                    password:password,
                    password2:password2,
                    lastname:lastname,
                    name:name,
                    thirdname:thirdname,
                    fack:fack,
                    group:group,
                    bool:t1,
fupload:fupload
                },  
                success: function(save) {alert(save);}    
        });});});


<input type="FILE" name="fupload" id="fupload" /> и возможно ли так отправить через аякс в пхп?

Автор: паZитифф May 2 2011, 18:04

(Glavar @ May 2 2011, 18:27) Перейти к цитате

код


<input type="FILE" name="fupload" id="fupload" /> и возможно ли так отправить через аякс в пхп?


Можно, я использовал скрипт http://webdeveloperplus.com/jquery/ajax-multiple-file-upload-form-using-jquery/, немного переделав под себя

Нашел еще такой скрипт http://www.webtoolkit.info/ajax-file-upload.html, но я его непробовал

Автор: Glavar May 3 2011, 21:44

Немогу загрузить коректно картинку:
HTML:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Ajax:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

PHP:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «


После загрузки не могу открыть файл dash2.gif

Автор: AnNE DoM.ini May 3 2011, 21:59

Что значит "не могу открыть файл"?

Автор: Glavar May 3 2011, 22:10

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

Автор: AnNE DoM.ini May 4 2011, 0:25

куда загружаешь? Есть ли там файл, не нулевой-ли у него размер?

Автор: parkee May 4 2011, 0:42

(AnNE DoM.ini @ May 4 2011, 1:25) Перейти к цитате

куда загружаешь? Есть ли там файл, не нулевой-ли у него размер?

Он же кинул скрипт под спойлер. Или в каком смысле "куда"?

Код вроде бы рабочий должен быть...
Судя по ошибке, стоит в свойствах посмотреть кто владелец файла и права на доступ к нему.
Ну и для успокоения души можешь сравнить хеш-сумму файлов )
Скорее всего траблы нужно искать в настройках сервера.

ЗЫ. Я надеюсь что ты не весь скрипт закинул... иначе с какой радости проверка только на клиентской стороне? Нужно проверять ещё и на стороне сервера по МIME-типу.. ну то такое.

Автор: Glavar May 4 2011, 7:46

(parkee @ May 4 2011, 1:42) Перейти к цитате

Он же кинул скрипт под спойлер. Или в каком смысле "куда"?

Код вроде бы рабочий должен быть...
Судя по ошибке, стоит в свойствах посмотреть кто владелец файла и права на доступ к нему.
Ну и для успокоения души можешь сравнить хеш-сумму файлов )
Скорее всего траблы нужно искать в настройках сервера.

ЗЫ. Я надеюсь что ты не весь скрипт закинул... иначе с какой радости проверка только на клиентской стороне? Нужно проверять ещё и на стороне сервера по МIME-типу.. ну то такое.

файлы не нулевые, размеры совпадают и хеш-сумма. я тоже думю с правами трабл, но как поменять?

Автор: parkee May 4 2011, 9:16

(Glavar @ May 4 2011, 8:46) Перейти к цитате

файлы не нулевые, размеры совпадают и хеш-сумма. я тоже думю с правами трабл, но как поменять?

а хз ))
Ну попробуй глянь от кого апач запускается, раздай нужные права.
Или в пхп поиграйся с http://www.php.net/manual/ru/function.chmod.php и http://php.net/manual/ru/function.umask.php.

Отпишешься как там, никогда с таким не сталкивался)

Автор: Glavar May 4 2011, 22:09

чет топять не сохраняет картинку:
Форма:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Обработчик:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
ny_elk.gif

Автор: AnNE DoM.ini May 5 2011, 0:08

добавь в свойства формы enctype="multipart/form-data"

Автор: Glavar May 8 2011, 18:06

Подскажите почему может не работать буква И(�?) в утф-8, остальные все работают

Автор: AnNE DoM.ini May 8 2011, 23:28

Ты уверен, что там "И"?

Автор: Glavar May 9 2011, 8:41

(AnNE DoM.ini @ May 9 2011, 0:28) Перейти к цитате

Ты уверен, что там "И"?

Угу, сам ставлю и после сохранения та крякозябра. код не я писал, а там шифровка дурная какая то(в панеле сохранения), думаю из-за этого И не пишет, причем "и" - работает. ниже фрагмент шифровки: (пробывал штирлицом, не взял)
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Автор: AnNE DoM.ini May 9 2011, 11:41

Ну, это на base64 похоже

Автор: alex_kolyada May 9 2011, 16:08

Вопрос дурацкий, так что решил новую тему не открывать.

Такой код:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
работает. Суть в том, что самопальный $error подхватывается шаблонизатором (templater.php), который выводит страницу с учётом $error.
А аналогичный код:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
шаблон не подключает, в сорсах страницы - пустота. Уже пару часов бьюсь, понять в чем беда не могу sad.gif

PS: если запихивать в exit("ТЕКСТ или $error"), этот ТЕКСТ или $error выводятся. Отсюда и вывод, что почему-то не работает одна строчка с подключением шаблонизатора.

Автор: AnNE DoM.ini May 9 2011, 17:41

Включи вывод ошибок

Автор: alex_kolyada May 9 2011, 17:43

(AnNE DoM.ini @ May 9 2011, 18:41) Перейти к цитате

Включи вывод ошибок
Извините, какой именно вывод ошибок? Я не понял о чем вы.

Автор: I am Legend May 9 2011, 17:44

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «


Переменная то существует)
Тебе надо проверять на что то другое. Например на наличие ошибки) Или же присваивать переменную прямо в if.

Автор: alex_kolyada May 9 2011, 17:46

Я пробовал присваивать переменную прямо в if (так было изначально). Это я уже сейчас вынес для наглядности.
Это если вы имеете в виду такое:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Притом, в этом условии шаблон тоже не подключается:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Автор: AnNE DoM.ini May 9 2011, 17:46

(alex_kolyada @ May 9 2011, 18:43) Перейти к цитате

Извините, какой именно вывод ошибок? Я не понял о чем вы.

ini_set('display_errors', 'On');
error_reporting(E_ALL);

Автор: alex_kolyada May 9 2011, 17:52

Включил, вижу нотисы. Не вижу здесь ничего полезного sad.gif
После всех нотисов по-прежнему выводится мой exit($error), без шаблона.
Что я должен был там увидеть? :/

Автор: I am Legend May 9 2011, 17:57

а die()?

Автор: alex_kolyada May 9 2011, 18:00

Аналогично. Насколько я знаю, die() и exit() абсолютно идентичны.

Автор: AnNE DoM.ini May 9 2011, 18:01

Проверь, чтобы в templater.php не отключался вывод ошибок.
Перед if(!query)
сделай var_dump($query);

Автор: alex_kolyada May 9 2011, 18:09

templater.php - это

$file = file_get_contents($path);
и несколько строк типа
$file = str_replace('{export}', $export, $file);
И всё.
дамп переменной: bool(false), как и должно быть.

Автор: AnNE DoM.ini May 9 2011, 22:34

Бррр, а у тебя часрм не вываливается что-то ранньше, чем запрос с пустой ошибкой?

Автор: alex_kolyada May 9 2011, 23:05

Нет, и ведь exit("с любым сообщением") возвращает это сообщение перед выходом, значит, раньше ему ничего не мешает.

Автор: AnNE DoM.ini May 9 2011, 23:21

весь код templater.php запость

Автор: alex_kolyada May 9 2011, 23:23

Разочаруетесь, т.к. я писал ранее что он из себя представляет.

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Автор: AnNE DoM.ini May 9 2011, 23:28

закоменти прег_реплейс и посмотри, что получится, вполне вероятно что эта штука что-то лишнее отрезает.

Автор: alex_kolyada May 9 2011, 23:39

Ннннеа, ноль эффекта.
Мне кажется, я где-то круто налажал.
Только где - не знаю.
Схема предельно проста: в файле php определяется путь шаблона $path и переменные, которые необходимо будет подставить в шаблон. Затем, на каждом выходе из скрипта я инклужу templater.php, который заменяет в $path вхождения в фигурных скобках на соответствующие переменные, удаляя затем следы своей работы (кстати, без строчки подчищения {вставки в фигурных скобках все равно не показываются}. И все.

Проблемный участок находится в функции, может это как-то влияет (магия?)

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Работающий кусок находится вне функций:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Автор: AnNE DoM.ini May 9 2011, 23:43

А $file - не пустой?

Автор: alex_kolyada May 9 2011, 23:45

(AnNE DoM.ini @ May 10 2011, 0:43) Перейти к цитате

А $file - не пустой?
Нет. Вставил
print_r ($file);
после
$file = file_get_contents($path);
- напечатало шаблон.

Автор: AnNE DoM.ini May 9 2011, 23:52

Так, значит шаблон оно напечатало, сразу после file_get_contents(), а print $file - печатать не хочет.

Значит, давай пиши перед "print $file" - "print_r($file)"
Вывелось?

Автор: alex_kolyada May 9 2011, 23:56

Да, вывело как и положено, обработанный.

Автор: AnNE DoM.ini May 9 2011, 23:57

Ну, тогда получается завтык в "print $file", поробуй поменять на "echo $file"

Автор: alex_kolyada May 10 2011, 0:01

Ноль реакции.

Я думаю, тут как-то замешана функция.
Цепочка такая: index.php(в нем задан $path)<--functions.php(тут задалось $error и include("templater.php"))
До $error доходит, инклудить не хочет, exit($error) выводит $error и останавливается. Загвоздка в инклуде, хотя ошибок инклуда нету. Просто не инклудится.

Автор: parkee May 10 2011, 0:04

Попробуй require, хотя он отработает независимо от условия, но все же.. для теста.
А вообще, может скинешь в архиве файлы?.. Чтоб гадать меньше. А то я уже запутался в этих обрывках кода %)

Автор: AnNE DoM.ini May 10 2011, 0:07

Так, когда ты пишешь print_r($file); перед "print $file" - оно выводит ту ошибку, которую должно вывести?

Автор: alex_kolyada May 10 2011, 0:12

(parkee @ May 10 2011, 1:04) Перейти к цитате

Попробуй require, хотя он отработает независимо от условия, но все же.. для теста.
А вообще, может скинешь в архиве файлы?.. Чтоб гадать меньше. А то я уже запутался в этих обрывках кода %)
require() тоже не работает.
Все файлы скидывать не стоит, т.к.:
1. я не уверен, что тот, кто их потом будет использовать, не огорчится.
2. я не хочу показывать тот бардак, что там творится. будет еще непонятнее, т.к. я остановился посередине перевода скрипта (тоже недоделанного) на шаблоны и все идет вперемешку.

Я могу попробовать нарисовать схемку, если осталось еще что-то непонятное, хотя мне кажется, что объяснить еще проще, чем я делал это до этого, нельзя.

(AnNE DoM.ini @ May 10 2011, 1:07) Перейти к цитате

Так, когда ты пишешь print_r($file); перед "print $file" - оно выводит ту ошибку, которую должно вывести?
нет, оно даже не выводит шаблон, который я вывожу
print_r ($file);
после
$file = file_get_contents($path);
Будто templater.php не инклудится вообще.

Все, что я вижу, это:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Автор: AnNE DoM.ini May 10 2011, 0:19

(alex_kolyada @ May 10 2011, 1:12) Перейти к цитате

нет, оно даже не выводит шаблон

Что-же ты тогда написал, что оно что-то выводит, а?
Давай пробуй дописывай перед file_get_contents
"global $error, $path, итд "

Автор: alex_kolyada May 10 2011, 0:24

Писал. Писал и про то, что не инклудит. smile.gif
Идею с global понял. Щас попробую.

Автор: alex_kolyada May 10 2011, 0:35

Получилось! Комбинация:

global $path;

и локальная $error.
Видимо, я не учёл, что $path внутри функции не виден, следовательно, шаблонизатор ничего не подключает. Себе на заметку: нужно добавить в шаблонизатор проверку на существование файла smile.gif

PS: уже в третий раз AnNE DoM.ini выручает, ему бы медаль за помощь в этой ветке форума дать!

Автор: AnNE DoM.ini May 10 2011, 0:39

В принципе так делать плохо, шаблонизатор надо вызывать через функцию, по типу
$template->render($template_name, $var_to_render);
и вызов этой функции - происходит всегда, а до неё - ты только устанавливаешь шаблон, и список переменных которые надо выводить.

Автор: alex_kolyada May 10 2011, 0:42

Да, я знаю. Спасибо за замечание. Пытался разобраться со smarty, но не осилил. Нарыл в гугле вот такой простой способ, что-то додумал, вроде работает smile.gif
Да и что-то тяжелее тут не нужно, слишком маленькая работа. Инициализация класса будет отнимать половину времени работы скрипта smile.gif

Если нечего будет делать и будет желание - напишу класс или отдельные функции. Наверное, это имеет смысл, когда переменных для замены - туча, а шаблон на несколько сотен строк. Тут же, как я написал выше, проще пройтись str_replace по этому несчастному шаблону один раз и заменить все разом.

Автор: Powerhead Jun 20 2011, 18:04

Вопрос по php: Какой смысл все вопросы по php сваливать в одну тему, если на каждый вопрос можно создавать отдельную тему? В принципе, таково предназначение форумов, иначе получается оффлайн чат.

як показала практика, теми виду "Вопросы по ..." дуже зручні для вирішення невеликих тривіальних питань, на які найчастіше достатньо однієї чіткою відповіді від знаючої людини.
Створювати окремі теми ніхто не забороняє, але іноді достатньо треду в стилі питання-відповідь.

Автор: Levik Jun 20 2011, 20:10

У мене питання а є property в php...
так щоб зрозуміло приведу пркилад на с++...

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «



Ось на php
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «


чи те що привів реалізацію так воно і є а?

Автор: cj_bionic Jun 21 2011, 18:58

Использовать PHP в CSS файле..

Реально ли это? Смысл в том, что надо дописать функционал немного. В зависимости от переменной (язык сайта), подставлять в CSS разные картинки.

Автор: parkee Jun 21 2011, 19:17

Ну технически реально, настроив обработку цсс пхп-интерпретатором и в цсс в урл вставить пхп-код, но это такой дикий маразм... %)
Чем не устраивает яваскриптом подменять урл в цсс?

Автор: Glavar Jun 21 2011, 19:19

(cj_bionic @ Jun 21 2011, 19:58) Перейти к цитате

Использовать PHP в CSS файле..

Реально ли это? Смысл в том, что надо дописать функционал немного. В зависимости от переменной (язык сайта), подставлять в CSS разные картинки.

Теоретически возможно, но на практике ни разу не видел. Можно реализовывать в самом пхп подключение разных css в зависимости от чего угодно.
Но если хочеш чтоб оно было динамично и качественней, то юзай JavaScript && jQuery

Автор: AnNE DoM.ini Jun 22 2011, 1:34

php+css удобно использовать для скинования сайта, когда другая морда сайта отличается только раскрасской, и морды создаются динамически, типа партнёрки всякие.

Автор: cj_bionic Jun 22 2011, 9:49

(parkee @ Jun 21 2011, 20:17) Перейти к цитате

Ну технически реально, настроив обработку цсс пхп-интерпретатором и в цсс в урл вставить пхп-код, но это такой дикий маразм... %)
Чем не устраивает яваскриптом подменять урл в цсс?


Я слабо помню JS. Можно ткнуть носом в пример?

Что есть: style.css в котором прописан класс и в нем путь к картинке хэдера на сайте. В самом шаблоне просто <див класс=хєдер>
есть 2 домена yyy.com и yyy.com.ua. В самописной CMS в зависимости от HTTP_POST, т.е. от того что в строке браузера набрано - врубается нужный языковой шаблон.

Надо: прописать в этом style.css такую же зависимость. Т.к. для русской и англ. версии сайта хєдер должен быть разным.

цмс писал не я %)

Автор: parkee Jun 22 2011, 11:30

Ну проще всего подключить jQuery...

<!DOCTYPE html>
<HTML>
    <HEAD>
        <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
        <TITLE>script</TITLE>
        <script TYPE="text/javascript" SRC="jquery.js"></SCRIPT>
        <LINK REL="stylesheet" HREF="style.css" TYPE="text/css">
    </HEAD>
    <BODY>
    
        <script>
        $(document).ready(function(){
                var link = document.location.href;
                if(link.indexOf("yyy.com.ua") + 1)
                {
                    $(".lol").css('background-color', '#FF0000');
                }
                else
                {
                    $(".lol").css('background-color', '#00FF00');
                }
            });
        </SCRIPT>


        <DIV CLASS="lol">
        </DIV>
    </BODY>
</HTML>

Если нужно менять много свойств в цсс, то можно засунуть объект:
$(".lol").css({'background-color':'#00FF00', 'width':'1000px', 'height':'25px'});

Автор: cj_bionic Jun 22 2011, 15:23

Итак, вот что я добавил в темплейт:

[b]<script type="text/javascript" src="/js/jquery-1.2.6.js"></script>
<LINK REL="stylesheet" HREF="css/style.css" TYPE="text/css">[/b]
<div class="rotation">

[b]<script>
        $(document).ready(function(){
                var link = document.location.href;
                if(link.indexOf("www.yyy.ua") + 1)
                {
                    $(".back").css('background', '#A4DBFA url(/img/flash/ru_left.jpg)');
                }
                else
                {
                    $(".back").css('background', '#A4DBFA url(/img/flash/en_left.jpg)');
                }
            });
        </SCRIPT>[/b]

<div class="back">


Жирным выделил то, что добавил в темплейт.

И вот что после замены темплейта мне говорят:

Fatal error: Smarty error: [in /.../tpls/default.tpl line 7]: syntax error: unrecognized tag 'var' (Smarty_Compiler.class.php, line 580) in /.../lib/smarty/Smarty.class.php on line 1088

Автор: parkee Jun 22 2011, 15:39

1. Нафига тег <script> пихать в див? %)
2. Шаблонизатор смарти давно ковырял. Мало что помню уже.
но http://www.smarty.net/forums/viewtopic.php?p=63453:

it looks like you edited the template with dreamweaver and dreamweaver inserted javascript containing "{" and "}" into the template.
"{" and "}" are the smarty delimiters, so smarty falsely wants to interpret the javascript-code in the template.
enclose the javascript-block in a {literal}...{/literal} block to prevent smarty from parsing it. that should help.


То бишь, говорят чтоб яваскрипт-код заключался в {literal}...{/literal}

http://codestorage.ru/javascript-v-shablonax-smarty/

Автор: darklight Jun 22 2011, 15:51


<div class="rotation">
    <div class="back">test</div>
</div>
<script type="text/javascript">
{literal}
$(document).ready(function(){
var link = location.hostname;
if( link.indexOf("localhost") != -1 )
{
    $(".back").css('background', '#A4DBFA url(/img/flash/ru_left.jpg)');
}
else
{
    $(".back").css('background', '#A4DBFA url(/img/flash/en_left.jpg)');
}
});
{/literal}
</script>

Автор: cj_bionic Jun 22 2011, 15:54

а я сделал немного не так, скрипт действительно вынес выше дива и взял в литералы. Все заработало, спасибо большое всем за помощь! smile.gif

Автор: sunnykaktys Jun 24 2011, 0:02

хочу разобраться в коде пхп, знаю С. какие сайты/эл. учебники почитать?
в какой среде удобнее писать код?

цель - написание и вставка на сайт программ для всяческих расчетов

Автор: AnNE DoM.ini Jun 24 2011, 0:53

php.net
Всегда ваш, К.О.

Автор: aisthetes Jul 6 2011, 13:00

Не знаю что искать, может поможите сформулировать вопрос:

есть ссылки типа ?action=main, ?action=main&cat=1, ?action=main&ref=3

А хочу сделать так чтоб при нажатии на них, ссылка вышла типа ?action=main&cat=1&ref=3. Соответственно, если повторно нажимать на ссылки, переменные пропадали. Как это называется или как сделать?

Автор: aminchenko Jul 6 2011, 13:29

(aisthetes @ Jul 6 2011, 14:00) Перейти к цитате

Не знаю что искать, может поможите сформулировать вопрос:

есть ссылки типа ?action=main, ?action=main&cat=1, ?action=main&ref=3

А хочу сделать так чтоб при нажатии на них, ссылка вышла типа ?action=main&cat=1&ref=3. Соответственно, если повторно нажимать на ссылки, переменные пропадали. Как это называется или как сделать?


Это не ссылки типа, а передача значения переменной методом GET.

Можешь более подробно написать что ты хочешь сделать, т.к. лично я не понял.
Что и зачем и где должно пропадать?
Ты же сам эти ссылки в теории генерируешь.

Автор: aisthetes Jul 6 2011, 13:49

(aminchenko @ Jul 6 2011, 14:29) Перейти к цитате

Это не ссылки типа, а передача значения переменной методом GET.

Можешь более подробно написать что ты хочешь сделать, т.к. лично я не понял.
Что и зачем и где должно пропадать?
Ты же сам эти ссылки в теории генерируешь.

Сперва разобрать ссылку, потом собрать с новыми переменными, ну и перейти по ней

Для фильтра полей делаю

Как кстати написать preg_split чтоб било по двум символам & и ?

Автор: AnNE DoM.ini Jul 6 2011, 15:27

Нафиг тебе бить регуляркой $_SERVER['REQUEST_URI'], если у тебя есть $_GET ??

Автор: aisthetes Jul 6 2011, 16:17

(AnNE DoM.ini @ Jul 6 2011, 16:27) Перейти к цитате

Нафиг тебе бить регуляркой $_SERVER['REQUEST_URI'], если у тебя есть $_GET ??

чтоб не перечислять все переменные, и сделать уневерсальную функцию

Автор: AnNE DoM.ini Jul 6 2011, 22:13

Ты, кажется, сам не понимаешь чего хочешь, keit объясни по-подробней

Автор: aisthetes Jul 7 2011, 9:24

(aisthetes @ Jul 6 2011, 14:49) Перейти к цитате

Сперва разобрать ссылку, потом собрать с новыми переменными, ну и перейти по ней

Для фильтра полей делаю


так как это называеться? Не знаю что искать...

Автор: Glavar Jul 18 2011, 21:18

подскажите где можно почитать про все возможности вытащить всю информацию с картинки, как php, так и яву можно. (например dpi, pixel, качество и т.п.)

Автор: Vadyus Jul 18 2011, 21:39

(Glavar @ Jul 18 2011, 22:18) Перейти к цитате

подскажите где можно почитать про все возможности вытащить всю информацию с картинки, как php, так и яву можно. (например dpi, pixel, качество и т.п.)

http://php.net/manual/en/book.image.php

Автор: AnNE DoM.ini Jul 18 2011, 22:14

И вот это
http://www.php.net/manual/en/intro.exif.php

Автор: Glavar Jul 19 2011, 19:01

(AnNE DoM.ini @ Jul 18 2011, 23:14) Перейти к цитате

И вот это
http://www.php.net/manual/en/intro.exif.php

немогу найти как узнать dpi и megapixel картинки

Автор: parkee Jul 19 2011, 19:38

fp.gif
megapixels = height * width / 1000000

А dpi то хз.. никогда не понимал его предназначения.
Чем будет отличаться изображение 1000px на 1000px 300dpi от аналогичного на 100dpi? Количество точек ведь одинаковое... %)

А нафиг тебе этот параметр?

Глянул exif-данные пары фоток... DPI можно прочитать из XResolution, YResolution, если ResolutionUnit == Дюйм

Автор: AnNE DoM.ini Jul 19 2011, 22:26

разрешение в мегапикселях - это width*height/ (1024*1024)
dpi - dots per inch, величина которая связывает размеры картинки в пикселях с размерами в сантиметрах, т.е. картинка 1000*1000 пикселей при печати с качеством 300dpi должна получиться 3,1*3,1 дюйма (грубо говоря), т.е 8*8 см. Для справки, разрешение мониторов находиться примерно, в районе 72dpi

Автор: parkee Jul 20 2011, 1:20

При чем тут двоичная система счисления?
В байте(том, который октет) - 8 бит. И хоть ты на голове стой, а 1000 бит быть не может и принято было считать как 2^10. Но ведь эти "кило" не имеют ничего общего с теми "кило", которые картошки. Только исторически сложилось так что названия мер совпали, хотя изначально они были разными. Да и сейчас по не прижившемуся стандарту оно "киби".
Пиксель же - просто точка, которая может содержать 8/16/24/32 бита для определения её цвета. И тут "Мега" не имеет никакого отношения к двоичной системе.
Так с какой же, извиняюсь, усрачки в мегапикселе нарисовалось (1024*1024) пикселя? Это обычный 10^6, а никак не 2^20.

А за ликбез про dpi спасибо. =)

Автор: AnNE DoM.ini Jul 20 2011, 13:10

(parkee @ Jul 20 2011, 2:20) Перейти к цитате

При чем тут двоичная система счисления?
Так с какой же, извиняюсь, усрачки в мегапикселе нарисовалось (1024*1024) пикселя? Это обычный 10^6, а никак не 2^20.

Мда, я молодец, таки да мегапиксель это 10^6 будет, а не 2^20; просто для меня кило/мега/гига это давно уже степени двойки, а не десятки smile.gif
Да и с маркетинговой точки зрения поделив на 10^6 - получитм большее значение smile.gif

Автор: parkee Jul 21 2011, 0:00

Распространенная болячка) Меня тоже иногда так клинит..)
А с маркетинговой точки зрения и 9.1 мегапиксель нефиг делать округляется до 10 =)) %)

Автор: Некто Jul 21 2011, 12:44

(Glavar @ Jul 19 2011, 20:01) Перейти к цитате

немогу найти как узнать dpi и megapixel картинки

в жпеге разве есть dpi?

Автор: Glavar Jul 25 2011, 10:09

как подключить (установить) dll ? (exif, rar и т.п.)

Автор: AnNE DoM.ini Jul 25 2011, 15:27

скидываешь dll в extension_dir (обычно "php/extensions/") и потом в php.ini пишешь extension=php_exif.dll

Автор: Glavar Jul 26 2011, 12:18

есть адресс: localhost/index?id=(1.....255), как можно сделать, что б в урл не писало
localhost/index?id=1, localhost/index?id=2: а было localhost/index/hello_miha или localhost/hello_tata

Автор: AnNE DoM.ini Jul 26 2011, 12:44

Кури mod_rewrite

Автор: Glavar Jul 26 2011, 12:49

(AnNE DoM.ini @ Jul 26 2011, 13:44) Перейти к цитате

Кури mod_rewrite

а без htaccess никак?

Автор: AnNE DoM.ini Jul 26 2011, 13:03

никак

Автор: Glavar Jul 27 2011, 10:03

после написания этого кода:

RewriteEngine on
      RewriteRule ^product-([0-9]+)\.html$ product.php?id=$1

ничего не меняется
Что не так?

Автор: AnNE DoM.ini Jul 27 2011, 12:43

Что значит "ничего не меняется"?

Автор: parkee Jul 27 2011, 12:48

В правиле ошибки нету.

Options +FollowSymLinks

Писал?
Ибо тут либо симлинкс выключен в апаче.. либо вообще мод_реврайт не подключен troll.png

Автор: Glavar Jul 27 2011, 13:41

(parkee @ Jul 27 2011, 13:48) Перейти к цитате

В правиле ошибки нету.
Options +FollowSymLinks

Писал?
Ибо тут либо симлинкс выключен в апаче.. либо вообще мод_реврайт не подключен troll.png

угу
на локалке вообще не реагирует, а на хосте не подключает css и не показывет картинки

Автор: parkee Jul 27 2011, 18:42

пфф.. ну так проверяй пути.. на крайняк конфиги/странички в студию... нунах телепатией страдать

картинки/цсс.. в мод_реврайт можно юзать ключ [R] для отладки, так удобнее смотреть что конкретно тебе пытается отдать апач..
проставь его и смотри что запрашивается и почему оно не совпадает с путями, по которым лежит цсс/картинки...

Автор: Glavar Jul 27 2011, 18:52

Вот одна из страничек и запрос:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

RewriteRule ^item_(.+)$ test/item.php?id=$1 [L] - при этом запросе все норм
а нужно бы:
RewriteRule ^item/(.+)/$ test/item.php?id=$1 [L] - а при этом, белая страница и текст

Автор: parkee Jul 27 2011, 19:45

хм.. ну из того что я вижу, то такое может быть только если у тебя там есть папка item из которой запрашивается CSS, то бишь эта регулярка из-за точки принимает любые символы, а значит что такое http://www.site.com/item/css/style.css/ будет тоже редиректить на test/item.php?id=css/style.css

Если дело в этом, то вариант RewriteRule ^item/([A-Za-z0-9]+)/?$ test/item.php?id=$1 [L] должен работать...

Автор: Glavar Jul 27 2011, 20:01

(parkee @ Jul 27 2011, 20:45) Перейти к цитате

хм.. ну из того что я вижу, то такое может быть только если у тебя там есть папка item из которой запрашивается CSS, то бишь эта регулярка из-за точки принимает любые символы, а значит что такое http://www.site.com/item/css/style.css/ будет тоже редиректить на test/item.php?id=css/style.css

Если дело в этом, то вариант RewriteRule ^item/([A-Za-z0-9]+)/?$ test/item.php?id=$1 [L] должен работать...

у меня есть каталог в котором есть папка с цсс(скажем: item/css/style.css), но .штакас лижит в каталоге item, то как поступать?

Автор: parkee Jul 27 2011, 20:09

Ну так чем не устраивает точку заменить на конкретные нужные символы?..
Зачем там любые символы?
Из-за этого оно и хавает все слеши/точки итп и отдает item.php, вместо нужного css.
Что ты хотел сказать, в данном случае, расположением htaccess?

Автор: Glavar Jul 27 2011, 20:15

RewriteRule ^view/([A-Za-z0-9]+)/$ branson/view.php?tmp=$1 [L]
вот заменил, но не пойму как с цсс быть?
а универсальной функции нет вместо http://www.site.com/item/css/style.css ??

Автор: parkee Jul 27 2011, 20:17

Что-то я не пойму, цсс так и не прилинковались?

Автор: Glavar Jul 27 2011, 20:19

(parkee @ Jul 27 2011, 21:17) Перейти к цитате

Что-то я не пойму, цсс так и не прилинковались?

да прилинковалась, но... good2.gif

Автор: parkee Jul 27 2011, 20:21

Ну так в чем теперь проблема то?))
Опиши толком что не устраивает.. как есть и как хочешь чтоб было..)

я на турничек..) через пару часов отвечу..

Автор: Glavar Jul 27 2011, 21:19

(parkee @ Jul 27 2011, 21:21) Перейти к цитате

Ну так в чем теперь проблема то?))
Опиши толком что не устраивает.. как есть и как хочешь чтоб было..)

я на турничек..) через пару часов отвечу..

спс тебе большое за помошь drinks.gif все устраивает good2.gif

Автор: Dreyk Jul 28 2011, 9:39

Вообще, насколько я помню, можно записать

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^item/(.+)/$ test/item.php?id=$1 [L]


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

Автор: Glavar Sep 17 2011, 22:48

спс

Автор: Glavar Oct 11 2011, 20:30

Добрый вечер!
передаю в переменной $date = '2011-10-08 10:24:37';
столкнулся с вопросом: как отсортировать записи в базе, т.к. то что написано ниже не выполняеться?

$all_news_bs = mysql_query("SELECT * FROM news WHERE $date > date ORDER BY date DESC LIMIT 5");

где date -> DateTime

Автор: Illarion Oct 11 2011, 21:33

(Glavar @ Oct 11 2011, 21:30) Перейти к цитате

Добрый вечер!
передаю в переменной $date = '2011-10-08 10:24:37';
столкнулся с вопросом: как отсортировать записи в базе, т.к. то что написано ниже не выполняеться?
$all_news_bs = mysql_query("SELECT * FROM news WHERE $date > date ORDER BY date DESC LIMIT 5");

где date -> DateTime

Взгляни сюда http://mysql.ru/docs/man/Date_and_time_functions.html , там подробно описываются операции с датой и временем.

Автор: Glavar Oct 11 2011, 22:15

пока ничего не получилось, не могу найти что то подобное

Автор: Dreyk Oct 12 2011, 16:06

кавычки вокруг $date поставь

Автор: Glavar Oct 12 2011, 16:38

(Dreyk @ Oct 12 2011, 16:06) Перейти к цитате

кавычки вокруг $date поставь

незнаю почему, но сработало только так:
$lastdate = strtotime($_POST[lastdate]);
$date = date('Y-m-d H:i:s', $lastdate);
$all_news_bs = mysql_query("SELECT * FROM news WHERE $date>date ORDER BY date DESC");
dash2.gif

Автор: Glavar Nov 7 2011, 13:13

Добрый день! buba.gif
Подскажите как решить задачку:
есть в таблице 2 поля:
1. datestart = "2011-11-11 11:11:11" (DATE TIME) - поле отвечает за дату старта
2. timelnght = 90 (INT) - поле отвечает за количество дней
Задача: отсортировать записи по дате окончания (2011-11-[11+90] 11:11:11"), а между собой потом по времени.
Как такое сделать в Mysql запросе?
P.S.

mysql_query(" ... ORDER BY (DATE(datestart)+ INTERVAL timelnght DAY) AND TIME(datestart)");

но AND TIME(datestart) - все отсортировует только по времени и не учитывает сортировки перед ним

Автор: Hunter7 Nov 7 2011, 20:47

mysql_query(" ... ORDER BY (DATE(datestart)+ INTERVAL timelnght DAY) , datestart");
через запятую перечисляются сортировки...
TIME(...) погоды не делает, развечто замедлит запрос

Автор: wm.morgun Dec 15 2011, 10:00

(Glavar @ Nov 7 2011, 13:13) Перейти к цитате

Добрый день! buba.gif
Подскажите как решить задачку:
есть в таблице 2 поля:
1. datestart = "2011-11-11 11:11:11" (DATE TIME) - поле отвечает за дату старта
2. timelnght = 90 (INT) - поле отвечает за количество дней
Задача: отсортировать записи по дате окончания (2011-11-[11+90] 11:11:11"), а между собой потом по времени.
Как такое сделать в Mysql запросе?
P.S.
mysql_query(" ... ORDER BY (DATE(datestart)+ INTERVAL timelnght DAY) AND TIME(datestart)");

но AND TIME(datestart) - все отсортировует только по времени и не учитывает сортировки перед ним

Если делаются сортировки по дате окончания, то надо эту дату окончания хранить в отдельном поле, плюс иметь индекс по этому полю. Если надо иметь период отдельным полем и делать по ней сортировки, то обновлять одно из полей (дату конца или период) триггером, например:

DELIMITER //
CREATE TRIGGER dateend_insert BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
  SET NEW.dateend = DATE(NEW.datestart) + INTERVAL NEW.timelnght DAY;
END;//

CREATE TRIGGER dateend_update BEFORE UPDATE ON table_name
FOR EACH ROW
BEGIN
  SET NEW.dateend = DATE(NEW.datestart) + INTERVAL NEW.timelnght DAY;
END;//

DELIMITER;

Автор: psyhonut Sep 16 2012, 20:58

(wm.morgun @ Dec 15 2011, 11:00) Перейти к цитате

триггером, например:

Не слушай его. Триггеры - это предпоследнее, о чем надо думать, когда реализуешь такой функционал.

Автор: psyhonut Sep 16 2012, 21:11

(Glavar @ Oct 11 2011, 21:30) Перейти к цитате

$all_news_bs = mysql_query("SELECT * FROM news WHERE $date > date ORDER BY date DESC LIMIT 5");

где date -> DateTime

Ты когда показываешь свой код, показывай сюда, как выглядит запрос после интерпретации.
Т.е. типа так:
$query = "SELECT * FROM news WHERE $date > date ORDER BY date DESC LIMIT 5";
$all_news_bs = mysql_query($query);
echo $query;

И показывай кроме строки
$query = "SELECT * FROM news WHERE $date > date ORDER BY date DESC LIMIT 5";

еще и то, что будет после
echo $query;


Ой, я некрофил :-)

Автор: wm.morgun Sep 23 2012, 22:30

(psyhonut @ Sep 16 2012, 21:58) Перейти к цитате

Не слушай его. Триггеры - это предпоследнее, о чем надо думать, когда реализуешь такой функционал.

Действительно, триггеры последнее, о чем надо думать, ведь для начала, желательно, предложить свой вариант ;-)

Автор: YoGi Nov 25 2012, 15:47

Подскажите, есть пример:

форма для отправки данных в базу:



<html>
<head>
<title>
</title>
<link href ="подключение css"/>
</head>
<body>
<div id="header"></div>
<div id="content">
<h1>!!!!!!</h1>
<p>заполните форму</p>
<form action="scripts/create_user.php" method ="POST">
<fieldset>
<label for="name" > name :</label>
<input type = "text" name='atm' size="50"/></br>
<label for="city" > city :</label>
<input type = "text" name='city' size="50"/></br>
<label for="street" > street :</label>
<input type = "text" name='street' size="50"/></br>
<label for="number" > number :</label>
<input type = "text" name='number' size="50"/></br>
<label for="note" > note :</label>
<input type = "text" name='note' size="50"/></br>
</fieldset>
</br>
<fieldset class="center">
<input type = "submit" value="отправить" />
<input type = "reset" value="очистить" />
</fieldset>
</form>
</div>
<div id="footer"></div>
</body>
</html>



есть файл который обрабатывает форму:


require 'Z:\home\localhost\www\user\scripts\database_connection.php'';
  
    $name=trim($_POST['name']);
    $city=trim($_POST['city']);
    $street=trim($_POST['street']);
    $number=trim($_POST['number']);
    $note=trim($_POST['note']);
$insert_sql = "INSERT INTO user_run (name, city, street, number, note) VALUES('$name','$city','$street','$number','$note')";

mysql_query($insert_sql)
        or die(mysql_error());


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

блин я туплю...все работает.sad.gif

Автор: -RC- Nov 25 2012, 17:26

а зачем trim используешь?

Автор: YoGi Nov 25 2012, 19:11

(-RC- @ Nov 25 2012, 17:26) Перейти к цитате

а зачем trim используешь?


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

тут другой вопрос возник, база в utf8, передаю через форму данные, а данные в базу отображаются в виде знаков вопроса, менял на cp1251 такая же фигня...

Автор: Spectral Nov 25 2012, 19:16

Выполняю десериализацию JSON. Где посмотреть, что за класс получился? Подскажите IDE, где можно остановить по чекпоинту и увидеть окружение, в т. ч содержимое переменных.

ps Попроще, чем Eclipse, Zend.. а то там со средой дольше разбираться, чем писать.

Автор: -RC- Nov 25 2012, 19:55

(YoGi @ Nov 25 2012, 19:11) Перейти к цитате

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

тут другой вопрос возник, база в utf8, передаю через форму данные, а данные в базу отображаются в виде знаков вопроса, менял на cp1251 такая же фигня...

нужно проверить MySQL connection collation

в my.cf должно быть тогда:
[mysqld]
character-set-server=utf8
collation-server=utf8_unicode_ci


а лучше так
init-connect="SET NAMES utf8"

также если нет доступа к my.cf или ты не админ сервера, то сделай после подключения к бд

mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_unicode_ci'");

(Spectral @ Nov 25 2012, 19:16) Перейти к цитате

Выполняю десериализацию JSON. Где посмотреть, что за класс получился? Подскажите IDE, где можно остановить по чекпоинту и увидеть окружение, в т. ч содержимое переменных.

ps Попроще, чем Eclipse, Zend.. а то там со средой дольше разбираться, чем писать.

phpEd наверное покажется таким же злым? )

Автор: YoGi Nov 26 2012, 9:15

(-RC- @ Nov 25 2012, 19:55) Перейти к цитате

нужно проверить MySQL connection collation

в my.cf должно быть тогда:
[mysqld]
character-set-server=utf8
collation-server=utf8_unicode_ci
а лучше так
init-connect="SET NAMES utf8"

также если нет доступа к my.cf или ты не админ сервера, то сделай после подключения к бд

mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_unicode_ci'");
phpEd наверное покажется таким же злым? )


в my.cnf прописано init-connect="SET NAMES utf8", сервер локальный, так что права есть, база и таблицы в utf8, игрался с разными кодировками, или при передаче в базе знаки вопроса, или отображаются только цифры.
когда пишу запрос через phpmyadmin, все нормально sad.gif

Автор: -RC- Nov 26 2012, 9:48

в пхп пропиши

mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_unicode_ci'");

Автор: Vo1 Nov 27 2012, 15:49

(-RC- @ Nov 26 2012, 10:48) Перейти к цитате

в пхп пропиши

mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_unicode_ci'");

это выполняет SET NAMES utf8

помоему у него дело в том, что нету <meta http-equiv="content-type" content="text/html; charset=utf-8" />
или php header() smile.gif

Автор: -RC- Nov 27 2012, 16:51

ну просто были бы кракозяблики, а "??????" это когда с mysql не может забрать в нужной кодировке

Автор: YoGi Nov 27 2012, 21:30

(Vo1 @ Nov 27 2012, 15:49) Перейти к цитате

это выполняет SET NAMES utf8

помоему у него дело в том, что нету <meta http-equiv="content-type" content="text/html; charset=utf-8" />
или php header() smile.gif


charset прописывал smile.gif

Автор: iProphet Nov 28 2012, 0:11

Сохраните файл в кодировке utf-8
И проверьте в какой кодировки у Вас таблицы в mysql

Если у вас только кирилица и латиница то сделайте все в cp1251

Я всегда держу в голове что кодировка должна быть везде одинаковой: файл, база, http

Автор: YoGi Nov 29 2012, 20:36

ясно спс, читаю Маклафлина пытаюсь что нибудь простенькое сделать, возник небольшой затык:


<?
require 'подключение бд';
$search=$_POST['search'];
if (!$search){
    echo 'введите имя';
}
$select_query = "SELECT*FROM users WHERE name LIKE '%$search%'";
$result=mysql_query($select_query);
    $row = mysql_fetch_array($search);
    $name=$row['name'];
    $surname=$row['surname'];
    $email=$row['email'];
    $note=$row['note'];
?>

<html>
<head>
<title></title>
</head>
<body>
<div id="header"></div>
<div id="content">
<div class="cards_profile">
<h1>заголовок</h1>
<p>
<? echo "<table border=1>";
echo "<tr><td>$name</td>,<td>$surname</td>,<td>$email</td>,<td>$note</td></tr>";
echo "</table>"; ?>
</p>
</div>
</div>
<div id="footer"></div>
</body>
</html>


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


"; echo "$name,$surname,$email,$note,"; echo ""; ?>


Автор: -RC- Nov 29 2012, 21:18

У тебя нет формы, соответственно submit
в форме каждое поле должно иметь name

которое ты потом будешь присваивать через Get или Post

причем лучше так
if (!empty($_POST['search']))
$search = htmlspecialchars($_POST['search']);
или другую проверку входящих переменных

и выводеть лучше через if isset, а то будут warning, что переменные не определены

Автор: YoGi Nov 29 2012, 21:29

форма есть :


<html>
<head>
<title></title>
</head>
<body>
<div id="header"></div>
<div id="content">
<h1>search:</h1>
<p>введите имя:</p>
<form action="scripts/search.php" method ="POST">
<fieldset>
<label for="search" > search :</label>
<input type = "text" name="search" size="200"/></br>
</fieldset>
</br>
<fieldset class="center">
<input type = "submit" value="отправить" />
<input type = "reset" value="очистить" />
</fieldset>
</form>
</div>
<div id="footer"></div>
</body>
</html>

простенькая форма разобраться с механизмом поиска, потом проверок добавлю.

Автор: -RC- Dec 11 2012, 22:34

header ("Location: show_error.php");

Автор: YoGi Dec 24 2012, 12:36

хочу сделать авторизацию, что бы администратор имел доступ ко всем страницам, а обычные пользователи нет.
создал три таблицы:

users:user_id,user_login,user_pass
groups: id,name
user_groups:users_id,groups_id в ней данные из первой и второй таблицы.

далее идет login.php


<?
session_start();
// подключение к БД
if(isset($_POST['submit']))
{$query = mysql_query("SELECT user_id, user_pass FROM users WHERE user_login='".mysql_real_escape_string($_POST['login'])."' LIMIT 1");
$data = mysql_fetch_assoc($query);
if($data['user_pass'] === md5(md5($_POST['password'])))
{ header('Location:\cards\cards_pr\scripts\bridge.php');
exit();
}
else
{
print "Вы ввели неправильный логин/пароль";
}
}
?>
<form method="POST">
Логин <input name="login" type="text"><br>
Пароль <input name="password" type="password"><br>
<input name="submit" type="submit" value="Войти">
</form>
?>


после того как пользователь залогинился он переходит на bridge.php

<?
// подключение к БД
session_start();
$query = mysql_query("SELECT groups_id FROM user_groups WHERE users_id= mysql_real_escape_string($_SESSION['user_id'])");
$auto_gr = mysql_fetch_assoc($query);
if($auto_gr['groups_id'] ==1){
//header('Location:\show_error.php');
print("123");
exit();
}else{
//header('Location:\show_all.php');
print("123");
exit();
}

?>


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

p.s может в запросе ошибка?

Автор: -RC- Dec 24 2012, 13:35

а не лучше ли при авторизации слздавать $_SESSION['role'], куда прописывать роль, админ или юзер.

if( !isset($_SESSION['authorized']) || $_SESSION['role'] != 'admin')
или же вместо 'admin' integer переменную
дальше твой код

типо такого

Автор: YoGi Dec 24 2012, 14:28

(-RC- @ Dec 24 2012, 13:35) Перейти к цитате

а не лучше ли при авторизации слздавать $_SESSION['role'], куда прописывать роль, админ или юзер.

if( !isset($_SESSION['authorized']) || $_SESSION['role'] != 'admin')
или же вместо 'admin' integer переменную
дальше твой код

типо такого


чет не вкурю то есть в логине.пхп передаем логин в $_SESSION, и назначаем ему группу в bridge.php?

Автор: -RC- Dec 24 2012, 14:39

можно сразу в login.php вызывать функцию что-то типа:
$_SESSION['role'] = setRole ($id);

а реализация setRole будет дергать из базы твои права.

Автор: elevenelven Dec 24 2012, 14:46

Перед этой строчкой.
header('Location:\cards\cards_pr\scripts\bridge.php');

Мы же будем работать с ролями и дальше по проекту?! Так зачем тут bridge.php который как контрольный пункт в игре Хитмен?

mysql_query("UPDATE users SET user_hash
Что за user_hash? В описании таблицы `users` небыло никакого хеша.

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

Можно сразу выбрать джойном его роль и группу.

$data = mysql_fetch_assoc($query);
if($data['user_pass'] === md5(md5($_POST['password']))){
$_SESSION['current-user'] = $data;
}

А в bridge.php в зависимости от роли генерировать перенаправление. А в перенаправленом файле позволять читать только тем, кто находиться в группе с правами чтения\выполнения.

Автор: -RC- Dec 24 2012, 16:20

и еще на UPDATE рекомендуется тоже ставить лимиты, для таких случаев.
+ я бы добавил дополнительную фильтрацию переменных через strip_tags или htmlspecialchars, + в том числе проверку на /[^(\w)|(\x7F-\xFF-)|(\s)]/

Автор: elevenelven Dec 24 2012, 16:56

Еще раз перечитал задачу. YoGi я не думаю что есть смысл применять тут груповую политику. Достаточно ролевой.

users:user_id,user_login,user_pass_md5_hash, role
roles: id,name
------------------------------------------------------


<?
session_start();
// подключение к БД
if(isset($_POST['submit']))
{$query = mysql_query("SELECT * FROM users WHERE user_login='".mysql_real_escape_string($_POST['login'])."' LIMIT 1");
$data = mysql_fetch_assoc($query);
if($data['user_pass'] === md5(md5($_POST['password'])))
{

$_SESSION['current-user'] = $data;

if($data['role'] == 0){//Обычный пользователь
header('Location:/index.php'); die();
}elseif($data['role'] == 1){//Модератор
header('Location:/control-panel.php'); die();
}elseif($data['role'] == 1){//Администратор
header('Location:/admin-panel.php'); die();
}
}
else
{
print "Вы ввели неправильный логин/пароль";
}
}
?>
<form method="POST">
Логин <input name="login" type="text"><br>
Пароль <input name="password" type="password"><br>
<input name="submit" type="submit" value="Войти">
</form>
?>
------------------------------------------------------

Что касается самого вопроса, почему не работает, может у вас структура данных в БД немного запуталась.

Автор: YoGi Dec 24 2012, 17:03

ссасибо всем за помощь, вечером поробую, ролевая политика заинтересовала видимо действительно нет смісла исользовать груы , если всего два типа user/admin, хотел росто разобраться с груповой.

Автор: -RC- Dec 24 2012, 17:20

если ставите session_start();
не забудьте тогда уже и присвоить переменные.

ведь на следующих страничках необходимо будет проверять пользователя.

Автор: OldStyleBoY Aug 31 2013, 23:10

Подскажите, застрял sad.gif
Есть определенная папка, в ней находятся папки, так вот мне нужно узнать все название папок и запихнуть их в select.


<?php
$dir = opendir("a");
while($name = readdir($dir)){
    if($name == "." or $name == "..")
        continue;
    if(is_dir($name))
        echo "<b>[$name]</b><br />";
    else
        echo "$name<br />";
}
closedir($dir);
?>

Название папок у меня выводятся, но когда добавляю :

echo "<select>$name<br />";


то появляется поле селект, но там не выводятся название попок sad.gif

Автор: Navern Sep 1 2013, 0:05

(OldStyleBoY @ Sep 1 2013, 0:10) Перейти к цитате

Подскажите, застрял sad.gif
Есть определенная папка, в ней находятся папки, так вот мне нужно узнать все название папок и запихнуть их в select.


<?php
$dir = opendir("a");
while($name = readdir($dir)){
    if($name == "." or $name == "..")
        continue;
    if(is_dir($name))
        echo "<b>[$name]</b><br />";
    else
        echo "$name<br />";
}
closedir($dir);
?>

Название папок у меня выводятся, но когда добавляю :

echo "<select>$name<br />";


то появляется поле селект, но там не выводятся название попок sad.gif


Название папок нужно в опции вставлять,а не конкретно в селект
<select>
<option>$name</option>
<option>$name</option>
</select>

Автор: паZитифф Sep 1 2013, 10:02

<?php
$dir = opendir("a");
$option = '';
while($name = readdir($dir)){
    if($name == "." or $name == "..")
        continue;
    if(is_dir($name))
        $option .= "<option>[$name]</option>";
    else
        $option .= "<option>$name</option>";
}
closedir($dir);

echo "<select>$option</select>";
?>


Если надо чтобы название папки заметно отличалось от названия файла, можно задать background-color (только так). Или можно использовать сторонние плагины.

Автор: nerve Jan 1 2014, 17:18

хочу вывести данные из майскл в виде таблицы.
сначала создаю таблицу с нужными заголовками, потом в цикле вывожу данные из базы.
выглядит не очень. подскажите как лучше сделать.
и еще вопрос: я воспользовался конструкцией do-while, однако рекомендуют использовать просто while. но с просто while не выводится первая строка из таблицы. как быть?


» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «


http://piccy.info/view3/5682835/3855d902f35e5b170c6190ad9b43873f/http://i.piccy.info/a3c/2014-01-01-15-13/i9-5682835/500x221-r

Автор: kapals Jan 1 2014, 22:08

вынеси таблицу за пределы цикла

Автор: nerve Jan 6 2014, 16:05

решение:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

цикл с обращением к базе и выводом значений построчно надо делать внутри тегов таблицы.

Автор: Yes Feb 1 2014, 2:48

Prestashop - Помощь за деньгиsmile.gif
Помогите добавить небольшой функционал в раздел Заказы Prestashop.
Тот, что AdminOrdersContoller.php, версия престы 1.5.6.2
Нужно в таблице заказов добавить такие поля:
Цены приходная и расходная, стоимость доставки, прибыль с заказа, налог, название перевозчика.

И отдельно вывести такие значения:
Всего приход, всего расход, всего налог, всего прибыль, всего доставки, средняя прибыль с заказа, средняя корзина.
Проверить, чтобы все новые поля фильтровались соответственно выбранным датам на странице заказов.

Работы не много, но у меня знаний не хватает. Я электрик, а не программистsmile.gif
Некоторые значения получаются математическими действиями со значениями, которые уже загружены из БД, другие надо подгрузить из другой ветки БД.
Денег скажем $30-40 ну или как договоримся.
Оплата - на карту или другим взаимно удобным способом. Можно лично в руки, если вы из Киева.
Пишите в ПМ

Автор: kobzon Jul 21 2014, 13:32

Всім доброго дня!
Задумався над такою штукою... Треба написати скрипт(на пхп напевно), щоб робот заходив на мій сайт (вантажні перевезення) і продивлявся сторінки наприклад по 2 хв кожну, і потім змінював айпі, і знову так само. ЯКа ціль? Підвищити відвідуваність, і можливо підніметься трастовість. Що скажете? Яка ціна такого завдання? (Головне в бан не попасти від ПС))

Invision Power Board
© Invision Power Services