Jump to content

Yarik Voronov

Expert
  • Posts

    226
  • Joined

  • Last visited

Everything posted by Yarik Voronov

  1. obj, obj.parentNode.parentNode не определены (равны NULL) в выше приведенном примере. Надо определиться в том каким способом создается строка. либо клонируем предидущую либо ручками прописывам создание всех ее элементов.
  2. и собственно сама форма должна выглядеть по иному <tr> <td><input type="text" name="number[]" width="160"></td> <td><input type="text" name="date_1[]" width="160"></td> <td><input type="text" name="theme_1[]" width="160"></td> <td><input type="text" name="target[]" width="160"></td> <td><input type="text" name="sender[]" width="160"></td> <td><input type="button" name="btnNext[]" value="+" onClick="add_new_row()"></td> </tr> так как в результате отправляется массив значений
  3. собсвенно. думать надобно что удалить требуется. var newInput=document.createElement("INPUT"); newInput.width="100"; newInput.type="button"; newInput.value="Стереть"; newInput.onclick=delete_tr; newCell.appendChild(newInput); } function delete_tr() //собсна функция удаления строки. строки ли? { var obj=window.event.srcElement; var todel = obj.parentNode.parentNode.parentNode.parentNode; //table element document.body.removeChild(todel); } И вообще все значительно просче function add_new_row() { var obj=window.event.srcElement; var toClone = obj.parentNode.parentNode; var newRow = toClone.cloneNode(true); toClone.parentNode.appendChild(newRow); var e = newRow.children.length-1; newRow.children[e].children[0].onclick = delete_tr; newRow.children[e].children[0].value = "-"; } function delete_tr() { var obj=window.event.srcElement; var todel = obj.parentNode.parentNode; todel.parentNode.removeChild(todel); }
  4. 2 Azadi, LokiDi L0ck попробую и то и другое. Спасибо
  5. Итак, я тут пока поразвлекался со старым примером: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>поиск через форму в таблице</title> <style type="text/css"> /*<![CDATA[*/ BODY { font-family:Arial, Helvetica, sans-serif; font-size:10pt; } TABLE { border-collapse:collapse; border-bottom:1px dotted #9E9E9E; width:800px; } TABLE TD { border:1px dotted #9E9E9E; padding:0.2em 0.2em 0.2em 0.5em; } TABLE TH { border:1px solid #FFFFFF; } .hidden { display:none; } /*]]>*/ </style> <script language="javascript" type="text/javascript"> //<![CDATA[ var Contents = new Array( new Array("улица подбельского","сокольническая","001"), new Array("черкизовская","сокольническая","002"), new Array("преображенская площадь","сокольническая","003"), new Array("сокольники","сокольническая","004"), new Array("красносельская","сокольническая","005"), new Array("комсомольская","сокольническая","006"), new Array("красные ворота","сокольническая","007"), new Array("чистые пруды","сокольническая","008"), new Array("лубянка","сокольническая","009"), new Array("охотный ряд","сокольническая","010"), new Array("библиотека им. ленина","сокольническая","011"), new Array("кропоткинская","сокольническая","012"), new Array("парк культуры","сокольническая","013"), new Array("фрунзенская","сокольническая","014"), new Array("спортивная","сокольническая","015"), new Array("ленинские горы","сокольническая","016"), new Array("университет","сокольническая","017"), new Array("проспект вернадского","сокольническая","018"), new Array("юго-западная","сокольническая","019"), new Array("красногвардейская","замоскворецкая","020"), new Array("домодедовская","замоскворецкая","021"), new Array("орехово","замоскворецкая","022"), new Array("царицыно","замоскворецкая","023"), new Array("кантемировская","замоскворецкая","024"), new Array("каширская","замоскворецкая/каховская","025"), new Array("каховская","каховская","026"), new Array("варшавская","каховская","027"), new Array("коломенская","замоскворецкая","028"), new Array("автозаводская","замоскворецкая","029"), new Array("павелецкая","замоскворецкая","030"), new Array("новокузнецкая","замоскворецкая","031"), new Array("театральная","замоскворецкая","032"), new Array("тверская","замоскворецкая","033"), new Array("маяковская","замоскворецкая","034"), new Array("белорусская","замоскворецкая","035"), new Array("динамо","замоскворецкая","036"), new Array("аэропорт","замоскворецкая","037"), new Array("сокол","замоскворецкая","038"), new Array("войковская","замоскворецкая","039"), new Array("водный стадион","замоскворецкая","040"), new Array("речной вокзал","замоскворецкая","041"), new Array("киевская","арбатско-покровская","042"), new Array("смоленская","арбатско-покровская","043"), new Array("арбатская","арбатско-покровская","044"), new Array("площадь революции","арбатско-покровская","045"), new Array("курская","арбатско-покровская","046"), new Array("бауманская","арбатско-покровская","047"), new Array("электрозаводская","арбатско-покровская","048"), new Array("семеновская","арбатско-покровская","049"), new Array("измайловский парк","арбатско-покровская","050") ); function initData () { var searchResults = document.getElementById('searchResults'), rowsCount = searchResults.rows.length; for (var i=0, endi=Contents.length; i<endi; i++) { var tr = searchResults.insertRow(rowsCount); for (var j=0, endj=Contents[i].length; j<endj; j++) tr.appendChild(__createTdElement (Contents[i][j])); tr.setAttribute('id', 'resrow'+i); rowsCount++; } } function __createTdElement (text) { var td = document.createElement('td'); var txt = document.createTextNode(text); td.appendChild(txt); return td; } function filter() { var param = document.getElementById('param').value; var searchparam = document.getElementById('key').value; var rFun = document.getElementById('criteria').value ==1 ? function (a,b) {return a.search(b)>=0 ? true : false} : function (a,b) {return a.search(b)==0 ? true : false}; for (var i=0, end=Contents.length; i<end; i++) { if (rFun(Contents[i][param],searchparam)) document.getElementById('resrow'+i).className=''; else document.getElementById('resrow'+i).className='hidden'; } } //]]> </script> </head> <body onload="initData()"> <div style="text-align:center; width:100%; margin-bottom:15px;"> Критерии поиска <select name="param" id="param"> <option value="0" selected="selected">станция</option> <option value="1">линия</option> <option value="2">код станции</option> <option value="0">поле 4</option> <option value="0">поле 5</option> </select> <select name="creteria" id="criteria" onchange="if (document.getElementById('key').value!='') filter();"> <option value="1" selected="selected">содержит</option> <option value="2">начинается</option> </select> <input onkeyup="filter();" name="key" id="key" /> </div> <table id="searchResults" cellpadding="0" cellspacing="0" align="center" summary="Результаты поиска"> <tr style="background-color:#9A9A9A;"> <th width="300" height="20">Cтанция</th> <th width="260" height="20">Линия</th> <th width="20" height="20">Код станции</th> <!--<th width="60" height="20">поле 4</th> <th width="60" height="20">поле 5</th>--> </tr> </table> </body> </html> Может увидите полезное. Чтож ближе к телу. Имхо, алгоритм поиска по уже существующей таблице: 1. таблица это двумерный массив. тогда нам надо пройтись по всем строкам таблицы [Table].rows.length; 2. нам надо найти соответстующий критерию поиска столбец (param = станция/код станции/ветка = 0/1/2), а точнее вложенный в столбец текст: [Table].rows[RowIndex].getElementsByTagName('TD').item(param).innerHTML; для осла, если не ошибаюсь, будет так [TableRow].getElementsByTagName('TD')[param].innerHTML; document.getElementsByTagName() использовано для надежности, могут между <td></td> быть например пробелы. 3. дальше "дело техники"... Удалить строку: [Table].deleteRow([RowIndex]);
  6. я немного конечно не понял вопроса. рискну предположить: менять алгоритм поиска (ищем индекс вложенного массива, значения которого соответствуют заданным критериям) здесь наверно не стоит, здесь можно поменять алгоритм отображения результатов поиска. я бы наверно убрал еще первый элемент вложенного массива исходных данных - зачем он нужен, когда мы и так знаем каким по счету будет этот вложенный элемент. вообще, если поиск по каким-то причинам не работает, то в IE есть всплывающие подсказки на ту строку где он (осел) сподкнулся
  7. Господа (и дамы тоже). А вот у меня давно зреет вопрос на засыпку (сам уже почти засыпался ). А кто нибудь знает достойный (по функциональности сравнимый с PSPad или Dreamweaver) редактор для GNU/Linux платформы? Я лично перепробовал несколько: Nvu, Bluefish, Amaya. но пока ничего удобного в них не нашел. Сейчас пользуюсь встроенным в openSuSE редактором Kate (похож на Notepad++) для быстрых правок. все виндовское лежит на виртуальной машине. Короче неудобно. PS: извиняюсь, что залез не в свою тему.
  8. 2 AndyMac. по верстке формы. простейший вариант: 1.берете div задаете ему некоторый padding, заливаете background-color оранжевым, туда же в background div'а репитите по горизонтали полоску градиентного фона шириной один пиксель. 2. помещаете в div форму с input type="password" потом картинку с надписью "ВХОД". на картинку вешаете событие onclick="this.parentNode.submit()" 3. в тотже div помещаете соответсвующую надпись с ссылкой. И наверно все... <div> <form action="[myaction script]"> <input type="password" value="12345" /> <img src="" border="0" alt="вход" onclick="this.parentNode.submit();"/> </form> Некоторый текст <a href="">вход</a> </div> Если JScript не предполагает страница, то можно использовать вариации на тему style + button: <button type="submit"><img src="" /></button> или любые другие
  9. в ослике 6 sp2 поиск работает. и собственно только в осле и будет работать стопроцентно а таблица(ы) с классом dataRow не выравниваются относительно таблицы заголовков, потому что имеют абсолютное позиционирование. т.е. выпадают из потока документа, в котором находится таблица заголовков. также таблица(ы) значений (dataRow) не выравниваются относительно друг друга, потому что, во-первых, длина контента в них разная (см. спецификацию HTML как происходит вычисление длины и ширины таблицы (ячейки, столбца). когда контент не помещается), а во-вторых, новая таблица - новый блочный элемент со своими margin, padding, width, height. На мой взгляд красивее будет переписать код и поместить все в одну таблицу и оперировать скрытием-отображением ее строк. (см insertRow, appendChild, createElement) по вопросу добавления данных в массив см. Array.push(). например: Array.push(Array(value1,value2,...,valueN)); где value1 - valueN получаем из значений соответствующих инпутов формы.
  10. Насколько большой вес? 500Кило? или 5 Метров? эта большая картинка на сервер загружается? //..... $size = getimagesize($src); var_dump($size); //.... вывод браузера от картинки которая не ресайзиться (var_dump()) в студию + версию РНР
  11. 2 vonsap чтобы размеры картинки поменялись виртуально или физически? если виртуально то Если физически, то копать в сторону GD (библиотека в РНР для работы с графическими изображениями) Если вы сами не понимаете куда вам вставить в код работу с GD, то куда уж нам простым кодерам... Рискну предположить что надо создать превьшку тогда вставить можно где-то в середине этого кода if($_FILES['files']['name']!=""){ unlink($c_dir . "/" . $id . ".jpg"); if(!move_uploaded_file($_FILES['files']['tmp_name'], $c_dir . "/" . $id . ".jpg")){ echo "Файл изображения не скопирован! "; } } if($_FILES['tumb']['name']!=""){ unlink($c_dir . "/" . $id . "_thumb.jpg"); if(!move_uploaded_file($_FILES['tumb']['tmp_name'], $c_dir . "/" . $id . "_thumb.jpg")){ echo "Файл превью не скопирован! "; } } else { // делаем маленькую превьюшку из большого изображения если оно было получено }
  12. Ньдя.... Pavel_html, хочется сказать "Аффтар, убяй сябя" (с) Но не скажу. Судя по коду может быть несколько ошибок. 1. таблица не создается из-за недопустимой длины поля VARCHAR 2. запись не вноситься, тогда $query="INSERT INTO comments_$id VALUES( ''NULL, '$name', '$email', '$body' )"; 3. страница не редиректиться потому что есть ошибки в JS, скорее всего window.location.href 4. страница редиректиться но весь вывод ошибок остается на старой странице. 5. страница редиректа не содержит в себе никакого кода. З.Ы. и вообще редирект можно сделать средствами РНР через header("Location: http://example.com?exampleVAR=exampleID"); З.З.Ы: Pavel_html, доки надо не курить, а изучать....
  13. скорее всего сначала вырезал градиент, его оптимизировал, потом вырезал логотип - его оптимизировал. потом совместил... получил расхождение в несколько тонов, так как оптимизировал разные рисунки. надо сначала оптимизировать основную картинку, потом из нее резать то что нужно при такой ситуации
  14. >> homm: ТОгда копай в сторону ?SHOW TABLES?, и составляй с помошью него хитрый запрос с UNION. > rus: То есть объединение таблиц? нет. объединение в одном запросе нескольких операторов SELECT (SELECT) UNION (SELECT); причем количество полей выборки должно совпадать для каждого запроса select. и именование полей выборки будет использовано первого select'a ps: скачайте мануал, наконец
  15. SELECT COUNT(*) FROM table дает нам количество записей в таблице (допустим 100 записей) SELECT * FROM table LIMIT m,n говорит что надо выбрать n записей, начиная с записи с порядковым номером m т.о. если из количества полученного при первом запросе не вычесть один, то второй запрос вернет ноль рядов. т.к. записи с порядковым номером 100 не существует, т.к. нумерация начинается с 0 $result = mysql_query("SELECT COUNT(*) as count FROM table",$db); $myrow = mysql_fetch_row($result); $result = mysql_query("SELECT * FROM table LIMIT {$myrow['count']-1}, 1",$db); или так $result = mysql_query("SELECT COUNT(*)-1 as count FROM table",$db); $myrow = mysql_fetch_row($result); $result = mysql_query("SELECT * FROM table LIMIT {$myrow['count']}, 1",$db);
  16. ок. проверял? я так подозреваю что нет. count(); дает количество записей (одна, две, сто), но последний элемент будет (ноль, один, 99). так?
  17. 2 Девятилап, минус один сделать забыли... (в MySQL как и в PHP значения нумеруются начиная с 0). и тут все равно два этапа, как никрути
  18. Да есть такая ерунда. это наверно дрим CS3 English? мне помогла руссификация. но пришлось вид и сайты настраивать заново. Но собственно руссифицировал его я не для этого, так из любопытства. P.S.: Когда панелька пропала в 10 или сотый раз я просто перестал ее включать и перешел на хот-кеи
  19. в два этапа. первым запросом подстчитываете количество записей. вычитаете из количества один, вторым запросом выбираете с полученной позиции одну запись, используя LIMIT m,1 где m = n - 1, а n - это количество записей в таблице. http://forum.htmlbook.ru/viewtopic.php?pid=55426#p55426
  20. Это не факт что большое количество записей, говорит о частом обновлении. тут действует (и в вашем и в моем случае) фактор вероятности в десятые-сотые-тысячные доли секунды. для мускула запрос на обновление и запрос на выборку суть равнозначны - имхо, кто первый пришел тот первым и получил, и так далее по очереди. вопрос только в том что, выбирая результат запроса mysql_fetch_array(); будет выдана первая запись и чтобы добраться до последней надо заставить мускул пройтись по всей таблице и отдать всю инфу. а это лишний траффик и нагрузка на сервер для поставленной задачи. так вот, имхо, обработав ваш запрос (или мой) MySQL продолжит обрабатывать следующие запросы. а вот будут они на выборку или обновление - это есмь великая тайна. так что шанс "пролететь" точно с последней записью есть у всех.
  21. 2 rus. это хорошо когда записей не более пары сотен, а вот когда идет пересчет на 1000 или десятки тысяч? И при 1000-5000 человек в день - что делать будете?
  22. 2 Serjinio Позвольте полюбопытсвовать - зачем? может подойтет $n = mysql_insert_id();? собственно для таблиц с auto increment есть такой книжный вариант (правда там было в другом контексте...): SELECT * FROM cityGeoBase WHERE cityCode = (SELECT MAX(cityCode) FROM cityGeoBase); где cityCode - есть поле auto increment; когда же auto increment нет, то с LIMIT такое не пройдет, потому что требуется явное указание значениея. поэтому делать следует в два этапа: SELECT COUNT(cityCode)-1 FROM cityGeoBase; SELECT * FROM cityGeoBase LIMIT [значение count],1; третий вариант отсортировать таблицу по убыванию и выбрать первую запись (LIMIT 1) делать не советую, тормозит хорошо и вообще требует доп условий (того же auto increment) http://www.mysql.ru/webboard/index.html?n1...8&n2=2&page=203 прочая информация: http://www.mysql.ru/webboard/index.html?n1...4&n2=3&page=256 http://www.spravkaweb.ru/mysql/sql/select http://www.kamaikin.ru/artical/sql/1/8/ http://xpoint.ru/forums/programming/theory...ead/29653.xhtml может конечно есть и 4 и 5 и n+1 варианты. буду рад узнать
  23. ессссс ли же хочется (нестерпимо хочется, ну очень хочется) пожечь пользователю мозг, то копать в сторону MIME (Multipurpose Internet Mail Extensions) 1. Изучаете доки http://ru.wikipedia.org/wiki/MIME http://www.google.ru/search?aq=0&complete=...D1%81%D0%BA&lr= http://web.opennet.ru/docs/RUS/mime_rfc/index.html http://www.realcoding.net/article/view/1851 http://www.spravkaweb.ru/php/sovet/mail http://coding.csportal.ru/php/Send-Mail-Wi...Attachment.html http://www.softtime.ru/scripts/mailattach.php http://www.spravkaweb.ru/php/sovet/mail/file 2. Создаете в почтовике письмо (любое) в html формате с вложенной картинкой. сохраняете на диск, открываете текстовым редактором и смотрите код и заголовки и ссылки на прикрепленную картинку. делаете по аналогии. 3. Не удивляемся если количество подписчиков упало или если ваш сайт занесен в списки "злостных" спамеров или жалобы на то что письмо не дошло (из-за почтового антаспам фильтра) или и т.д. и т.п. альтернатива: если это рассылка предпочтительнее сделать RSS канал (щелкнул по ссылке - вот и сам сайт и с нужной инфой и с иконками и с логотипом и с разными наворотами)
  24. Позвольте не согласиться. Все надо использовать когда уместно. если мне надо включить десяток простых html страничек с выводом значением допустим одной переменной, то да require() то что нужно. Но если у меня есть ветвистый алгоритм и эта сотня страничек в свою очеред содержит дальнейшее ветвление и выполнение операций, то тащить их все require() в первоначальный файл не имеет смысла. только память забиваем и увеличиваем время распарсивания. потому что то что подключено require(), еще не значит что может понадобиться. а парсер по ненужному содержанию все-равно пройдется.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy