ФорумПрограммированиеPHP для идиотов → Проверка валидности e-mail и построение дерева

Проверка валидности e-mail и построение дерева

  • nooble

    Сообщения: 21 Репутация: N Группа: Кто попало

    Spritz Дек. 25, 2012, 12:48 п.п.

    Здравствуйте!

    Задача: вывести из БД Mysql информацию (Имя с построением дерева (начальник-подчиненный), email, часы отработанные каждым человеком и часы отработанные в связке начальник + подчиненный) и все это внести в таблицу.

    Проблема: Просидел 2 дня, не смог толком разобраться с построением дерева, а так же запара в том, что не могу проверить валидность эмейла (эмейлы проверяются на стороне юзера, т.е он ни чего не вводит, инфа уже есть в базе, т.е нужно проверить емейл занесенный в базу).

    Код:
    <?php
    $con = mysql_connect("localhost","root","");
    if (!$con)
    {
    die('Could not connect: ' . mysql_error());
    }

    mysql_select_db("elizaveta", $con);

    $data = mysql_query("SELECT * FROM tbldata");


    echo "<center>";
    echo "<table border='1'>
    <tr>
    <th>Имя</th>
    <th>Email</th>
    <th>Часы</th>
    <th>Сумма часов с подчиненными</th>
    </tr>";


    while($row = mysql_fetch_array($data))
    {
    echo "<tr>";
    echo "<td>" .$row['name'] . "</td>";
    echo "<td>" . $row['email'] . "</td>";
    echo "<td>" . $row['value'] . "</td>";
    echo "<td>" . $row['value] . "</td>";
    echo "</tr>";
    }
    echo "</table>";

    echo "</center>";


    mysql_close($con);
    ?>[/php]

    Прошу помощи.
    Спустя 147 сек.
    Сейчас табличка выглядит вот так:
    [img]http://clip2net.com/clip/m137336/1356425182-clip-6kb.png[/img]
    Спустя 64 сек.
    А должна примерно вот так:
    [img]http://clip2net.com/clip/m137336/1356425288-clip-25kb.jpg[/img]
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz Дек. 25, 2012, 2:06 п.п., спустя 1 час 18 минут 26 секунд

    Бля, где структура БД? Что за манера нахуярить кучу кода, вместо сути проблемы ….
  • AlexanderC

    Сообщения: 270 Репутация: N Группа: Кто попало

    Spritz Дек. 25, 2012, 2:09 п.п., спустя 2 минуты 21 секунду

    echo "<td>" . (filter_var($row['email'], FILTER_VALIDATE_EMAIL) ? $row['email'] : ("(incorrect!) "  . $row['email'])) .  "</td>";
    Спустя 44 сек.
    А должна примерно вот так:

    smotri v "А должна примерно вот так: "
  • nooble

    Сообщения: 21 Репутация: N Группа: Кто попало

    Spritz Дек. 25, 2012, 2:30 п.п., спустя 21 минуту 23 секунды

    echo "<td>" . (filter_var($row['email'], FILTER_VALIDATE_EMAIL) ? $row['email'] : ("(incorrect!) "  . $row['email'])) .  "</td>";

    Большое спасибо!!! Работает.

    А не могли бы помочь с деревом? Был бы очень благодарен, просто от дерева зависит еще один столбец и без него не получиться решить эту проблему…
  • AlexanderC

    Сообщения: 270 Репутация: N Группа: Кто попало

    Spritz Дек. 25, 2012, 2:58 п.п., спустя 27 минут 53 секунды

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

    П.С желательно больше пояснений, а то так не понять что ваша фантазия желает…
  • nooble

    Сообщения: 21 Репутация: N Группа: Кто попало

    Spritz Дек. 25, 2012, 3:20 п.п., спустя 21 минуту 56 секунд

    П.С желательно больше пояснений, а то так не понять что ваша фантазия желает…

    Есть начальник и есть несколько подчиненных, необходимо выстроить дерево по parent, и что бы в колонке "Сумма часов с подчиненными" выводилась сумма часов начальников и подчиненных.

    На всякий случай прикрепляю дамп базы… http://clip2net.com/s/2DUNs

    В принципе на скриншоте (А должна примерно вот так…) это видно.
  • nooble

    Сообщения: 21 Репутация: N Группа: Кто попало

    Spritz Дек. 25, 2012, 3:28 п.п., спустя 7 минут 55 секунд

    CREATE TABLE IF NOT EXISTS `tbldata` (
    `id` int(11) NOT NULL auto_increment,
    `parent` int(11) NOT NULL,
    `name` varchar(255) collate utf8_bin NOT NULL,
    `email` varchar(255) collate utf8_bin NOT NULL,
    `value` int(11) NOT NULL,
    `text` text collate utf8_bin NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=9 ;


    – Дамп данных таблицы `tbldata`


    INSERT INTO `tbldata` (`id`, `parent`, `name`, `email`, `value`, `text`) VALUES
    (1, 0, 'john 1', '[email protected]', 5, 'Пётр I Вели?кий (Пётр Алексе?евич; 30 мая (9 июня) 1672 — 28 января (8 февраля) 1725) — царь Московский из династии Романовых (с 1682 года) и первый император всероссийский (с 1721 года). В российской историографии считается одним из наиболее выдающихся государственных деятелей, определившим направление развития России в XVIII веке.\r\n\r\nПётр был провозглашён царём в 1682 году в 10-летнем возрасте, стал править самостоятельно с 1689 года[1]. С юных лет проявляя интерес к наукам и западному образу жизни, Пётр первым из русских царей совершил длительное путешествие в Европу. По возвращении из него в 1698 году Пётр развернул масштабные реформы российского государства и общественного уклада. Одним из главных достижений Петра стало значительное расширение территорий России в Прибалтийском регионе после победы в Великой Северной войне, что позволило ему принять в 1721 году титул первого императора Российской империи. Через 4 года император Пётр I скончался, но созданное им государство продолжало интенсивно расширяться на протяжении всего XVIII века.'),
    (2, 0, 'john 2', 'johngmail.com', 2, 'Пётр родился в ночь на 30 мая (9 июня) 1672 года в Теремном дворце Кремля (в 7180 году по принятому тогда летоисчислению «от сотворения мира»).\r\n\r\nОтец — царь Алексей Михайлович — имел многочисленное потомство: Пётр был 12-м ребёнком, но первым от второй жены, царицы Натальи Нарышкиной. 29 июня в день Святых Петра и Павла царевич был крещён в Чудовом монастыре (по другим данным в храме Григория Неокесарийского, в Дербицах, протопопом Андреем Савиновым) и наречён Петром.\r\nПётр I. Парсуна XVII века.\r\n\r\nПобыв год с царицей, он был отдан на воспитание нянькам. На 4-м году жизни Петра, в 1676 году, умер царь Алексей Михайлович. Опекуном царевича стал его сводный брат, крёстный отец и новый царь Фёдор Алексеевич. Дьяк Н. М. Зотов учил Петра грамоте с 1677 по 1680 годы.\r\n\r\nСмерть царя Алексея Михайловича и воцарение его старшего сына Фёдора (от царицы Марии Ильиничны, в девичестве Милославской) отодвинули царицу Наталью Кирилловну и её родню, Нарышкиных, на задний план. Царица Наталья вынуждена была отправиться в село Преображенское под Москвой.'),
    (3, 1, 'john 3', '[email protected]', 8, 'Стрелецкий бунт 1682 года и приход к власти Софьи Алексеевны\r\n\r\n Основная статья: Стрелецкий бунт 1682 года\r\n\r\n27 апреля (7 мая) 1682 года после 6 лет мягкого правления скончался либеральный и болезненный царь Фёдор Алексеевич. Встал вопрос, кому наследовать престол: старшему болезненному и слабоумному Ивану согласно обычаю или малолетнему Петру. Заручившись поддержкой патриарха Иоакима, Нарышкины и их сторонники 27 апреля (7 мая) 1682 года возвели на престол Петра. Фактически к власти пришёл клан Нарышкиных и вызванный из ссылки Артамон Матвеев, объявленный «великим опекуном». Сторонникам Ивана Алексеевича было затруднительно поддерживать их претендента, который не мог царствовать из-за крайне слабого здоровья. Организаторы фактически дворцового переворота объявили версию о собственноручной передаче «скипетра» умирающим Феодором Алексеевичем своему младшему брату Петру, но достоверных свидетельств тому предъявлено не было.'),
    (4, 1, 'john 4', 'john@gmail', 4, 'Милославские, родственники царевича Ивана и царевны Софьи по их матери, усмотрели в провозглашении Петра царём ущемление своих интересов. Стрельцы, которых в Москве было более 20 тысяч, уже давно проявляли недовольство и своенравие; и, видимо, подстрекаемые Милославскими, 15 (25) мая 1682 выступили открыто: с криками, что Нарышкины задушили царевича Ивана, двинулись к Кремлю. Наталья Кирилловна, надеясь успокоить бунтовщиков, вместе с патриархом и боярами вывела Петра с братом на Красное крыльцо. Однако восстание не закончилось. В первые часы были убиты бояре Артамон Матвеев и Михаил Долгорукий, потом и другие сторонники царицы Натальи, в том числе два её брата Нарышкины.\r\n\r\n26 мая выборные от стрелецких полков явились во дворец и потребовали, чтобы старший Иван признавался первым царём, а младший Пётр — вторым. Опасаясь повторения погрома, бояре согласились, и патриарх Иоаким тотчас же совершил в Успенском соборе торжественный молебен о здравии двух наречённых царей; а 25 июня венчал их на царство.'),
    (5, 4, 'john 5', '[email protected]', 9, '29 мая стрельцы настояли, чтобы царевна Софья Алексеевна приняла на себя управление государством по причине малолетства её братьев. Царица Наталья Кирилловна должна была вместе с сыном — вторым царём — удалиться от двора в подмосковный дворец в селе Преображенском. В Оружейной палате Кремля сохранился двухместный трон для юных царей с маленьким окошечком в спинке, через которое царевна Софья и приближённые подсказывали им, как вести себя и что говорить во время дворцовых церемоний.'),
    (6, 4, 'john 6', '-', 7, 'Преображенское и потешные полки\r\nСолдат выборного солдатского полка Гордона, или Бутырского полка\r\n\r\nВсё свободное время Пётр проводил вдали от дворца — в сёлах Воробьёве и Преображенском. С каждым годом у него увеличивался интерес к военному делу. Пётр одел и вооружил своё «потешное» войско, состоявшее из сверстников по мальчишеским играм. В 1685 году его «потешные», одетые в иностранные кафтаны, под барабанный бой полковым строем шли через Москву из Преображенского в село Воробьёво. Сам Пётр служил барабанщиком[2].\r\n\r\nВ 1686 году 14-летний Пётр завёл при своих «потешных» артиллерию. Огнестрельный мастер Фёдор Зоммер показывал царю гранатное и огнестрельное дело. Из Пушкарского приказа были доставлены 16 пушек. Для управления тяжёлыми орудиями царь взял из Конюшенного приказа охочих к военному делу взрослых служителей, которых одели в мундиры иноземного покроя и определили потешными пушкарями. Первым надел иноземный мундир Сергей Бухвостов. Впоследствии Пётр заказал бронзовый бюст этого первого русского солдата, как он называл Бухвостова. Потешный полк стал называться Преображенским, по месту своего расквартирования — селу Преображенское под Москвой.'),
    (7, 1, 'john 7', 'zz', 1, 'В Преображенском, против дворца, на берегу Яузы был построен «потешный городок». При постройке крепости Пётр сам деятельно работал, помогал рубить бревна, устанавливать пушки. Здесь же расквартировывался созданный Петром «Всешутейший, Всепьянейший и Сумасброднейший Собор» — пародия на Православную Церковь. Сама крепость была названа Прешбургом, вероятно, по имени знаменитой в то время австрийской крепости Пресбург (ныне Братислава — столица Словакии), о которой он слышал от капитана Зоммера. Тогда же, в 1686 году, появились под Прешбургом на Яузе первые потешные суда — большой шняк и струг с лодками. В эти годы Пётр заинтересовался всеми науками, которые были связаны с военным делом. Под руководством голландца Тиммермана он изучал арифметику, геометрию, военные науки.\r\n\r\nПрогуливаясь однажды с Тиммерманом по селу Измайлово, Пётр зашёл на Льняной двор, в амбаре которого нашёл английский ботик. В 1688 он поручил голландцу Карштену Брандту отремонтировать, вооружить и оснастить этот бот, а затем спустить на Яузу. Однако Яуза и Просяной пруд оказались тесными для корабля, поэтому Пётр отправился в Переславль-Залесский, к Плещееву озеру, где заложил первую верфь для строительства судов. «Потешных» уже было два полка: к Преображенскому прибавился Семёновский, расположившийся в селе Семёновское. Прешбург уже совершенно походил на настоящую крепость. Для командования полками и изучения военной науки нужны были люди знающие и опытные. Но среди русских придворных таких не было. Так Пётр появился в Немецкой слободе.'),
    (8, 2, 'john 8', '[email protected]', 3, 'Немецкая слобода была ближайшей «соседкой» села Преображенское, и Пётр уже давно присматривался к её любопытной жизни. Всё большее и большее количество иностранцев при дворе царя Петра, как например, Франц Тиммерман и Карштен Брандт, были выходцами из Немецкой слободы. Всё это незаметно привело к тому, что царь стал частым гостем в слободе, где скоро оказался большим поклонником непринужденной иноземной жизни. Пётр закурил немецкую трубку, стал посещать немецкие вечеринки с танцами и выпивкой, познакомился с Патриком Гордоном, Францем Яковлевичем Лефортом — будущими сподвижниками Петра, завёл роман с Анной Монс. Против этого строго выступала мать Петра. Чтобы образумить 17-летнего сына, Наталья Кирилловна решила женить его на Евдокии Лопухиной, дочери окольничего.\r\n\r\nПётр не противоречил матери, и 27 января 1689 года была сыграна свадьба «младшего» царя. Однако менее чем через месяц Пётр покинул жену и уехал на несколько дней на Плещеево озеро. От этого брака Пётр имел двух сыновей: старший, Алексей, был наследником трона до 1718 года, младший, Александр, умер в младенчестве.');

  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz Дек. 25, 2012, 3:40 п.п., спустя 12 минут 16 секунд

    http://stackoverflow.com/questions/4242276/recursive-php-function-for-adjacency-list-display

    Работоспособность не проверял, первое, что дал гугл.
  • nooble

    Сообщения: 21 Репутация: N Группа: Кто попало

    Spritz Дек. 26, 2012, 10:24 д.п., спустя 18 часов 44 минуты 2 секунды

    Так, ну навоял я дерево, встроить в код толком не выходит. Вот код дерева:
    function ShowTree($ParentID, $lvl)
    {
       
       global $link;
       global $lvl;
       $lvl++;
       
       $sSQL="SELECT id,name,parent FROM tbldata WHERE parent=".$ParentID." ORDER BY name";
       $result=mysql_query($sSQL, $link);
       
       if (mysql_num_rows($result) > 0) {
           echo("<UL>\n");
           while ($row = mysql_fetch_array($result) ) {
               $ID1 = $row["id"];
               echo("<LI>\n");
               echo("<A HREF=\""."?ID=".$ID1."\">".$row["name"]."</A>"."  \n");
               ShowTree($ID1, $lvl);
               $lvl–;
           }
           echo("</UL>\n");
       }
       
    }


    если постишь код, то хотя бы отформатируй его
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz Дек. 26, 2012, 10:01 д.п., спустя 23 часа 36 минут 26 секунд

    в код не вникал, но какой смысл объявлять переменную-аргумент глобальной?
    function ShowTree($ParentID, $lvl) {

    global $link;
    global $lvl;


    и нахер вообще переменная $lvl, и зачем её декрементить в цикле?

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