PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (22): В начало « ... 7 8 9 10 [11] 12 13 14 15 ... » В конец

> Найдено сообщений: 329
MAXUS Отправлено: 24 Февраля, 2014 - 13:49:23 • Тема: Вывести значение ячейки по значению соседней • Форум: Вопросы новичков

Ответов: 18
Просмотров: 975
Crowley пишет:
MAXUS пишет:
Т.е. все вместе как-то так:

Вот, все работает, спасибо.

А чтобы обновить значение ячейки data запрос должен быть таким? :
PHP:
скопировать код в буфер обмена
  1.  
  2.        $fr = mysql_fetch_assoc($result);
  3.         $id = $fr['id'];
  4.         $login = $fr['login'];
  5.         $passw = $fr['passw'];
  6.         $frdata = $fr['data'];
  7.         mysql_query("UPDATE Auth SET(id='$id',login='$login',password='$passw',data='$frdata') WHERE $id", $conn);
  8.  


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

ЗЫ Кстати, это был общий пример. Там в предыдущем бы от инкапсуляции защититься не мешало бы. Но это отдельная тема.
MAXUS Отправлено: 24 Февраля, 2014 - 08:24:29 • Тема: Вывести значение ячейки по значению соседней • Форум: Вопросы новичков

Ответов: 18
Просмотров: 975
teddy пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `data` FROM `table` WHERE `login`='$login' AND `password`='$password'


проверяем if-ом результат "фетч-а" если все хорошо то выводим это слово echo $row['data']
а иначе говорим что неверный логин или пароль


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

Сорри. Вопрос снят.
(Добавление)
Crowley пишет:
В обоих случаях выводится запись, что логин\пароль неправильный.
(Добавление)
PHP:
скопировать код в буфер обмена
  1.  
  2. $login = $_POST['login'];
  3. $passw = $_POST['passw'];
  4. $conn = mysql_connect ("localhost","login","password");
  5. $db = mysql_select_db ("Base",$conn);
  6. $result = mysql_query("SELECT * FROM `Auth` WHERE `login`='$login' AND `password`='$password'",$conn);
  7.     $fr = mysql_fetch_assoc($result);
  8.     if($fr == "")
  9.         {
  10.         echo "Ошибка! Логин или пароль введен неверно!<br>";
  11.         print_r($fr);
  12.         }
  13.         else
  14.         {
  15.         $frdata = $fr['data'];
  16.         echo "$frdata";
  17.         }
  18.  


Во-первых, у тебя нет переменной $password, а есть $passw... Поэтому в запрос передается пустое значение и, соответственно, приходит пустой результат.
Во-вторых, наличие в результате запроса с SELECT строк лучше проверять через функцию mysql_num_rows($result).
В-третьих, если ты знаешь, что в случае удачи запрос должен вывести только одну строку, то используй в запросе LIMIT 1.

Т.е. все вместе как-то так:

PHP:
скопировать код в буфер обмена
  1.  
  2. $login = $_POST['login'];
  3. $passw = $_POST['passw'];
  4. $conn = mysql_connect ("localhost","login","password");
  5. $db = mysql_select_db ("Base",$conn);
  6. $result = mysql_query("SELECT * FROM `Auth` WHERE `login`='$login' AND `password`='$passw' LIMIT 1",$conn);
  7. if(mysql_num_rows($result)){
  8.         $fr = mysql_fetch_assoc($result);
  9.         $frdata = $fr['data'];
  10.         echo $frdata;
  11. }
  12. else echo "Ошибка! Логин или пароль введен неверно!<br>";
  13.  
MAXUS Отправлено: 18 Февраля, 2014 - 04:29:58 • Тема: двойное событие • Форум: JavaScript & VBScript

Ответов: 15
Просмотров: 2880
Barakuda пишет:
MAXUS, мне кажется что решение с применением jquery проще хотя бы тем, что более понятен при листинге программы ) ну и экономия байтов тоже важна, хоть не столь актуальна как в девяностых Хорошо


О какой экономии байтов идет речь?! Библиотека jq 1.9 весила больше 200 Kb, 1.11 весит 94 Kb (заметно оптимизировали, о чем этот говорит?), 2.1 - 81 Kb... В 200-300 Kb, по хорошему, в среднем вся страница вместе с картинками должна умещаться, не больше (по моим представлениям). Это не аргумент, кмк. В данном случае вместо почти 100 Kb мы имеем реально байты. Особенно, если учесть нижеследующее.

А что касается листинга... В листинге проще. И то, если не понимать, где там что. А на самом деле листинг, который соответствует приведенному у VenZell коду jq - это ровно вот эти строки:

CODE (javascript):
скопировать код в буфер обмена
  1. var divs=document.querySelectorAll(".div");
  2. for(var i=0; i<divs.length; i++){
  3.         divs[i].addEventListener(
  4.                 "mouseover",
  5.                 function(event){
  6.                         if(ctrlKey) _with(this).addClass("active");
  7.                 }
  8.         );
  9.         divs[i].addEventListener(
  10.                 "click",
  11.                 function(event){
  12.                         _with(this).toggleClass("active");
  13.                 }
  14.         );
  15. }


Если сравнить с этим:

CODE (javascript):
скопировать код в буфер обмена
  1. $('.column-10').hover(function(e){
  2.     if (e.ctrlKey) {
  3.         $(this).addClass('active');
  4.     }
  5. });
  6. $('.column-10').click(function(e){
  7.     if ($(this).hasClass('active')) {
  8.         $(this).removeClass('active');
  9.     } else {
  10.         $(this).addClass('active');
  11.     }
  12. });

то код на js ненамного сложнее.

Остальное - это то, для чего подгружается jq...

Это функция, которая работает с CSS классами и включает removeClass, addClass, toggleClass! и hasClass:

CODE (javascript):
скопировать код в буфер обмена
  1. function _with(element){
  2.         function getPattern(className){return new RegExp("\\s"+className+"\\s|\\s"+className+"$|^"+className+"\\s|^"+className+"$","i")};
  3.         return {
  4.                 "removeClass":function(className){
  5.                         element.className.replace(getPattern(className), "");
  6.                 },
  7.                 "addClass":function(className){
  8.                         if(!this.hasClass(className)) element.className+=" "+className;
  9.                 },
  10.                 "toggleClass":function(className){
  11.                         if(!this.hasClass(className)) element.className+=" "+className;
  12.                         else element.className=element.className.replace(getPattern(className),"");
  13.                 },
  14.                 "hasClass":function(className){
  15.                         if(element.className.search(getPattern(className))<0) return false;
  16.                         else return true;
  17.                 }
  18.         }
  19. }


А это отлов нажатого Ctrl:

CODE (javascript):
скопировать код в буфер обмена
  1. var ctrlKey=false;
  2.  
  3. document.addEventListener(
  4.         "keydown",
  5.         function(event){
  6.                 if(event.keyCode==17) ctrlKey=true;
  7.         }
  8. );
  9. document.addEventListener(
  10.         "keyup",
  11.         function(event){
  12.                 if(event.keyCode==17) ctrlKey=false;
  13.         }
  14. );


ЗЫ А уж если понадобится еще и jq-ui к странице привязать, то об экономии байтов можно вообще не рассуждать. Это чудо техники весит в районе 400 Kb...
MAXUS Отправлено: 14 Февраля, 2014 - 21:25:17 • Тема: двойное событие • Форум: JavaScript & VBScript

Ответов: 15
Просмотров: 2880
VenZell пишет:
Решение <-- ссылка (при зажатом ctrl красит клетки по движению мыши; по клику на клетку переключает ее цвет)

CODE (javascript):
скопировать код в буфер обмена
  1. $('.column-10').hover(function(e){
  2.     if (e.ctrlKey) {
  3.         $(this).addClass('active');
  4.     }
  5. });
  6. $('.column-10').click(function(e){
  7.     if ($(this).hasClass('active')) {
  8.         $(this).removeClass('active');
  9.     } else {
  10.         $(this).addClass('active');
  11.     }
  12. });


Из любопытства воспроизвел на JS:

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function _with(element){
  3.         function getPattern(className){return new RegExp("\\s"+className+"\\s|\\s"+className+"$|^"+className+"\\s|^"+className+"$","i")};
  4.         return {
  5.                 "removeClass":function(className){
  6.                         element.className.replace(getPattern(className), "");
  7.                 },
  8.                 "addClass":function(className){
  9.                         if(!this.hasClass(className)) element.className+=" "+className;
  10.                 },
  11.                 "toggleClass":function(className){
  12.                         if(!this.hasClass(className)) element.className+=" "+className;
  13.                         else element.className=element.className.replace(getPattern(className),"");
  14.                 },
  15.                 "hasClass":function(className){
  16.                         if(element.className.search(getPattern(className))<0) return false;
  17.                         else return true;
  18.                 }
  19.         }
  20. }
  21.        
  22. var divs=document.querySelectorAll(".div");
  23. for(var i=0; i<divs.length; i++){
  24.         divs[i].addEventListener(
  25.                 "mouseover",
  26.                 function(event){
  27.                         if(ctrlKey) _with(this).addClass("active");
  28.                 }
  29.         );
  30.         divs[i].addEventListener(
  31.                 "click",
  32.                 function(event){
  33.                         _with(this).toggleClass("active");
  34.                 }
  35.         );
  36. }
  37.  
  38. var ctrlKey=false;
  39.  
  40. document.addEventListener(
  41.         "keydown",
  42.         function(event){
  43.                 if(event.keyCode==17) ctrlKey=true;
  44.         }
  45. );
  46. document.addEventListener(
  47.         "keyup",
  48.         function(event){
  49.                 if(event.keyCode==17) ctrlKey=false;
  50.         }
  51. );
  52.  
MAXUS Отправлено: 14 Февраля, 2014 - 18:43:13 • Тема: двойное событие • Форум: JavaScript & VBScript

Ответов: 15
Просмотров: 2880
Удалено...
MAXUS Отправлено: 14 Февраля, 2014 - 18:28:58 • Тема: двойное событие • Форум: JavaScript & VBScript

Ответов: 15
Просмотров: 2880
Barakuda пишет:
MAXUS, вот Вы меня правильно поняли.


Наверное, так быстрее будет:

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <title>TEST</title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <style type="text/css">
  8. .parent{
  9. width: 320px;
  10. height: 320px;
  11. }
  12. .child{
  13. float: left;
  14. background: lightgrey;
  15. margin: 1px;
  16. width: 30px;
  17. height: 30px;
  18. }
  19. .child[data-selected]{
  20. background: red;
  21. }
  22. </style>
  23. <script>
  24. window.onload=function(){
  25.         var status=false;
  26.         function noDrag(){
  27.                 return false;
  28.         }
  29.         document.addEventListener(
  30.                 "mouseup",
  31.                 function(event){
  32.                         status=false;
  33.                         if(document.ondragstart==noDrag) document.ondragstart="";
  34.                 }
  35.         );
  36.  
  37.         function addDiv(){
  38.                 var div=parentDiv.appendChild(childDiv.cloneNode());
  39.                 div.addEventListener(
  40.                         "click",
  41.                         function(event){
  42.                                 if(this.getAttribute("data-selected")) this.removeAttribute("data-selected");
  43.                                 else this.setAttribute("data-selected", true);
  44.                         }
  45.                 );             
  46.         }
  47.         var parentDiv=document.createElement("div");
  48.         parentDiv.className="parent";
  49.         parentDiv.addEventListener(
  50.                 "mousemove",
  51.                 function(event){
  52.                         if(!status||event.target.className!="child") return false;
  53.                         event.target.setAttribute("data-selected", true);
  54.                 }
  55.         );
  56.         parentDiv.addEventListener(
  57.                 "mousedown",
  58.                 function(event){
  59.                         document.ondragstart = noDrag;
  60.                         status=true;
  61.                 }
  62.         );
  63.         var childDiv=document.createElement("div");
  64.         childDiv.className="child";
  65.         for(var i=0;i<100;i++) addDiv();
  66.         document.body.appendChild(parentDiv);
  67.        
  68. }
  69. </script>
  70. </head>
  71. <body>
  72. </body>
  73. </html>
  74.  


Просто в html файл это сохрани и запусти. Разберешься, значит, доделаешь, как надо в случае чего...

Добавление: Тока я чето, видать, тоже недопонял. В моем примере жмешь на див и ведешь мышь, тогда красится. А на клик перекрашивается.
MAXUS Отправлено: 14 Февраля, 2014 - 11:27:36 • Тема: двойное событие • Форум: JavaScript & VBScript

Ответов: 15
Просмотров: 2880
Barakuda пишет:
Вы не совсем правильно поняли суть моего вопроса. Мне нужно чтоб замененный класс сохранялся таковым.
Я делаю редактор карты, мне нужно чтоб я занес курсор над полем, нажал кнопку, провел линию - и дивы над которыми я провел курсором - поменяли цвет. Далее я отпустил кнопку, и спокойно убрал курсор с поля. Потом снова занес, кликнуд на нужном диве один раз, он поменял свой цвет, и я снова убрал курсор с поля.. вот как то так...

идеально было это чтоб mousemove (ну или hover) срабатывали только при click ЛКМ... вот это я безуспешно пытался реализовать. Улыбка


А линия кривая что ли может быть? Т.е. можно вообще будет все закрасить?
(Добавление)
Barakuda пишет:
есть матрица 10х10 из 100 дивов, когда провожу над дивами курсором - они меняют цвет, но нужно сделать так, чтоб по клику выбранный див менялся обратно.
Проблема в том, что чтоб дойти до нужного дива - я провожу курсором над остальными дивами, и если мне не нужно на них менять цвет - он всё равно меняется.

как сделать так, чтоб например при нажатом ctrl свойство mouseover срабатывало, а без нажатого ctrl - можно было работать кликом?


Как минимум:

1. Надо вводить переменную, скажем status, которая устанавливается в true при mousedown на диве и откатывается в false при mouseup на document. Также при mousedown на диве он должен (судя по всему) краситься или обесцвечиваться в зависимости от текущего состояния (но тут масса нюансов).
2. Вводить обработчик события onmousemove или на document или на родительский div-контейнер. Обработчик должен красить div-ы только если переменная status==true, а target=дочерний div (т.е. любой из тех, которые можно красить), и ничего не делать, если status==false.

Вощем, задача на самом деле не из простых. Тупо даже на том, что драг надо будет грамотно отменить, уже нюансы начинаются.
MAXUS Отправлено: 06 Февраля, 2014 - 20:06:48 • Тема: JS Documentation • Форум: JavaScript & VBScript

Ответов: 15
Просмотров: 2516
nerv пишет:
MAXUS пишет:
А я несколько раз реально написав пару строк на js (ну банальную операцию какую-нибудь) получал от клиента надменное "давайте не будем изобретать велосипед, используйте jquery"

мы теперь так формулируем относительно жуквери: давайте сделаем проще и быстрей на ангуляре Улыбка

*примерно так


Ангулар - хорошая штука, конечно. Вызвала уважение. Но там тоже своя сципифика. И jq, насколько я понял, она не заменит. Хотя могу ошибатьсяУлыбка
MAXUS Отправлено: 06 Февраля, 2014 - 19:44:52 • Тема: JS Documentation • Форум: JavaScript & VBScript

Ответов: 15
Просмотров: 2516
esterio пишет:
MAXUS
А что Вас смущает там? Как по мне так знать как написать на чистом JS лучше нежели на каждый пук вешать плагины к JQ


Дак и я о том жеУлыбка СлезюсьУлыбка От того, что есть сайт, на котором описывается как вместо одной строчки на jq можно написать одну строчку на jsУлыбка

PS Причем, с некоторым смущением даже я бы сказал предлагаетсяУлыбка
PSS А я несколько раз реально написав пару строк на js (ну банальную операцию какую-нибудь) получал от клиента надменное "давайте не будем изобретать велосипед, используйте jquery". Вот не вру.
MAXUS Отправлено: 06 Февраля, 2014 - 18:31:08 • Тема: Выбор дочерних элементов (полностью ветки) • Форум: SQL и Архитектура БД

Ответов: 6
Просмотров: 59
3d_killer пишет:
Столкнулся с вопросом, имею древовидное меню вида:
ID NAME PARENT

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

Благодарю за ответы


А насколько большой каталог? Сколько строк? Я имею в виду во всей SQL таблице?
MAXUS Отправлено: 06 Февраля, 2014 - 17:43:11 • Тема: JS Documentation • Форум: JavaScript & VBScript

Ответов: 15
Просмотров: 2516
esterio пишет:
в продолжение темы
http://youmightnotneedjquery[dot]com/
Не весь код понравилься, но в общем пригодиться


Вот это, конечно, удивительный сайтУлыбка Меня переполняют чувства!

В том смысле, что этот уникальный обратный процесс напоминает, как космонавты учатся ходить по Земле после долгого пребывания на орбитеУлыбка
MAXUS Отправлено: 06 Февраля, 2014 - 12:40:40 • Тема: Утечки памяти JS • Форум: JavaScript & VBScript

Ответов: 20
Просмотров: 3641
nerv пишет:
еще ссылка
http://learn[dot]javascript[dot]ru/memory-leaks


Кстати, поизучав вопрос утечек в jq пришел к выводу, что в этом смысле опасно мешать его с нативным кодом. Например, любая навеска события через jq череповата боком, если мешать jq и нативный js.

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $( window ).load(function() {
  3.         $("#someElement").bind("click", function(){alert("jqBinded")});
  4.         document.getElementById("someElement").parentNode.removeChild(document.getElementById("someElement"));
  5. });
  6.  


Тут будет утечка.

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. window.onload=function(){
  3.         document.getElementById("someElement").addEventListener("click", function(){alert("jsBinded")});
  4.         document.getElementById("someElement").parentNode.removeChild(document.getElementById("someElement"));
  5. }
  6.  


А тут не будет... Хотя операции одни и те же.

Соответственно, опасно мешать jq с другими фреймворками, которые работают с js напрямую. Во всяком случае, надо точно знать как работают оба и не давать им пересекаться в таком ключе.


(Добавление)
OrmaJever пишет:
Хотя... после прогрузки страницы память выдедилась под ноды и на протяжении всего скрипта не удаляется (ждёт вызова showStack) что тоже немного странно. По-моему в данном случае showStack не должна быть доступна снаружи leak иначе это и правда беда.


Дак в этом как раз смысл замыкания. Функция отрабатывает, но если на ее область видимости остаются ссылки, то эта область видимости сохраняется, пока эти ссылки не будут разорваны.
MAXUS Отправлено: 06 Февраля, 2014 - 10:50:08 • Тема: Утечки памяти JS • Форум: JavaScript & VBScript

Ответов: 20
Просмотров: 3641
OrmaJever пишет:
MAXUS пишет:
Можно замыканиями стока утечек наделать

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


CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function leak(){
  3.         var stack={};
  4.         var node=document.createElement("div");
  5.         for(var i=0;i<10;i++){
  6.                 stack[i]=document.body.appendChild(node.cloneNode());
  7.                 stack[i].id="id"+i;
  8.                 stack[i].parentNode.removeChild(stack[i]);
  9.         }
  10.         showStack=function(){
  11.                 console.log(stack);
  12.         }
  13. }
  14.  
  15. window.onload=function(){
  16.         leak();
  17. }
  18.  


Запусти этот код. Потом в консоли вызови showStack(), увидишь, что ноды не удалились, поскольку присутствуют в стэке. Они просто открепились от документа, но остались в памяти. А вот если убрать функцию showStack(), то ноды и объект stack удалятся, что можно проверить в GC profile, сняв heap snapshot и во view "containment" проверить detached nodes... И это не вина браузера, а пример не верно составленного кода.

(Добавление)
nerv пишет:
MAXUS пишет:
В таком случае простым delete(нужный объект) это не решается?

решается. Разница только в том, что когда ссылок много проще так.

А еще правильней создавать объекты (экземпляры класса) через собственные конструкторы и прописывать деструкторы в них


Дак вот я и не пойму. Есть, например объект x. В твоем примере мы вызываем x.destroy() и запускаем функцию, которая убивает все ключи объекта, но не сам объект.

Во-первых, чем запись delete(x) сложнее, чем x.destroy()?
Во-вторых, объект-то у тебя не удаляется, а просто очищается. Если нужно очистить объект, то вместо delete(x) используем x={}, что быстрее, чем запускать функцию, которая перебирает ключи, согласись.

Или я чего-то не догоняю?
MAXUS Отправлено: 05 Февраля, 2014 - 21:21:11 • Тема: Утечки памяти JS • Форум: JavaScript & VBScript

Ответов: 20
Просмотров: 3641
OrmaJever пишет:
MAXUS пишет:
Т.е. утечки в интерпретаторах, конечно, имеются в виду

Но тогда как это относится к коду, ну в смысле это грубо говоря баг в браузере, js кодом это не как не исправить, и смысл это обсуждать)))


А вот это совершенно не факт. Можно замыканиями стока утечек наделать. И браузер будет не при чем.
MAXUS Отправлено: 04 Февраля, 2014 - 12:37:37 • Тема: Утечки памяти JS • Форум: JavaScript & VBScript

Ответов: 20
Просмотров: 3641
IllusionMH пишет:
MAXUS, запускаете свой код на догое время и смотрите на состояние памяти. На глаз так никто отлавливать не будет.


Понятно... Я думал шаблоны утечек кто-нибудь выкупит сходу.
(Добавление)
OrmaJever пишет:
MAXUS пишет:
А чем вызвана ирония?

Интерпретатор должен следить за всем, и по-моему утечки памяти возможны только в компилируемых языках.


А... Ну, тут все равно что говорить "чайник вскипел". В смысле, вскипает не чайник, а вода в немУлыбка Т.е. утечки в интерпретаторах, конечно, имеются в видуУлыбка

Страниц (22): В начало « ... 7 8 9 10 [11] 12 13 14 15 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB