PHP: <?php require_once('engine/core.php'); $groups["title"] = "Вход | nana1.gixx.ru"; userlogin(); if(!$CURUSER) { if($_SERVER["REQUEST_METHOD"] == "POST") { $email = htmlspecialchars($_POST["email"]); $password = htmlspecialchars($_POST["password"]); $a = mysql_query("SELECT id FROM profiles WHERE email = '".mysql_real_escape_string($email)."' and password = '".mysql_real_escape_string($password)."'"); if(mysql_num_rows($a) > 0) { $b = mysql_fetch_assoc($a); $id = $b["id"]; logincookie($id, md5($email.$password)); header("Location: /spisok"); exit; } else { $error = "Неверный E-mail или пароль"; } } } require_once('engine/_head.php'); if(!$CURUSER) {?> <?php if(!empty($error)) { ?> <div class="pravila"> Ошибка! <?php echo $error; ?> </div> <?}?> <h1 style='margin-top:20px;'>Вход</h1> <form id="mform" action="/enter" method="post"> <table align="center" cellpadding="5"> <tr><td align="right" class="tt">Email:</td><td align="left"><input type="text" name="email" class="text" size="50" /></td></tr> <tr><td align="right" class="tt">Пароль:</td><td align="left"><input type="password" name="password" class="text" size="50" /></td></tr> </table><br /> <a id="v1" class="orange" href="#vote" onclick="jQuery('#mform').submit();">Войти</a> <a id="v1" class="green" href="/register">Регистрация</a> </form> <?php } else { ?> <h1>Ошибка! Вы уже вошли</h1> <div class="pravila">Вероятно, вы попали на эту страницу случайно, попробуйте зайти на главную и ссылка на эту страницу больше не должна появляться.<br />Если вы убеждены в том, что что-то работает не так, как надо обязательно свяжитесь с администрацией ресурса, чтобы они, в свою очередь, исправили проблему.</div> <? } require_once('engine/_foot.php'); ?> нажимаю на вход переходить на /enter а если данные ввести неверно то пишет неверно.в чем проблема?
Может подразумевалось, что, если оставить поле ввода данных пустым и нажать на кнопку вход, то войдет нормально, а если данные неправильны, то выдаст ошибку. Вопрос в том, почему пропускает пустую строку?
Есть скрипт который записывает ip в файл PHP: <?php $text .= "ip: $REMOTE_ADDR \n"; { $text ="\n\n-".date("d.m.Y (H:i:s)", time())."-\n" . $text; $file = fopen ("log.txt", "a+"); fwrite ($file,$text); fclose ($file); } ?> На сайте есть внешние ссылки, как с помощью этого скрипта записывать ip тех кто по ним перешёл?
должно проходить авторизацию , а он тупиться и не переход . на страницу интер переход она полностью пустая. а должно на эту же только авторизованным
Call to a member function fetch() на сервере На денвере все работает нормально, а вот на реальном сервере - выдает ошибку: PHP: <b>Warning</b>: Invalid argument supplied for foreach() in <b>/home/u2801/public_html/kurator/admin/_getdata.php</b> on line <b>36</b><br /> <br /> <b>Fatal error</b>: Call to a member function fetch() on a non-object in <b>/home/u2801/public_html/kurator/admin/_getdata.php</b> on line <b>93</b><br /> Показывает на ошибку вот тут(36 строка): PHP: foreach ($searchData->rules as $rule) { и вот тут(93 строка): PHP: while($row = $res->fetch(PDO::FETCH_ASSOC)) { Вот кусок кода в котором ошибка: Code: $qWhere = ''; //определяем команду (поиск или просто запрос на вывод данных) //если поиск, конструируем WHERE часть запроса if (isset($_POST['_search']) && $_POST['_search'] == 'true') { $allowedFields = array('lastname','name','otchestvo','reit','status','prefix'); // допустимые поля $allowedOperations = array('AND', 'OR'); // допустимые операии $searchData = json_decode($_POST['filters']); //ограничение на количество условий if (count($searchData->rules) > 10) {throw new Exception('Взломать не удастся!!! :)');} $qWhere = ' WHERE '; $firstElem = true; //объединяем все полученные условия foreach ($searchData->rules as $rule) { if (!$firstElem) { //объединяем условия (с помощью AND или OR) if (in_array($searchData->groupOp, $allowedOperations)) { $qWhere .= ' '.$searchData->groupOp.' '; } else { //если получили не существующее условие - возвращаем описание ошибки throw new Exception('Взломать не удастся!!! :)'); } } else { $firstElem = false; } $where .= "`".preg_replace('/-|\'|\"/', '', $rule->field)."`"; // очистка запроса от левых символов //вставляем условия if (in_array($rule->field, $allowedFields)) { switch ($rule->op) { case 'eq': $qWhere .= $rule->field.' = '.$dbh->quote($rule->data); break; case 'ne': $qWhere .= $rule->field.' <> '.$dbh->quote($rule->data); break; case 'gt': $qWhere .= $rule->field.' > '.$dbh->quote($rule->data); break; case 'lt': $qWhere .= $rule->field.' < '.$dbh->quote($rule->data); break; case 'le': $qWhere .= $rule->field.' <= '.$dbh->quote($rule->data); break; case 'ge': $qWhere .= $rule->field.' >= '.$dbh->quote($rule->data); break; case 'bw': $qWhere .= $rule->field.' LIKE '.$dbh->quote($rule->data.'%'); break; case 'cn': $qWhere .= $rule->field.' LIKE '.$dbh->quote('%'.$rule->data.'%'); break; /* case 'nc': $qWhere .= $rule->field." NOT LIKE '%".$dbh->quote($rule->data."%'"); break; case 'ew': $qWhere .= $rule->field." LIKE '%".$dbh->quote($rule->data."'"); break; case 'en': $qWhere .= $rule->field." NOT LIKE '%".$dbh->quote($rule->data."'"); break; */ default: throw new Exception('Взломать не удастся!!! :)'); } } else { //если получили не существующее условие - возвращаем описание ошибки throw new Exception('Взломать не удастся!!! :)'); } } } //------------------------------------------------------------------- //определяем количество записей в таблице $rows = $dbh->query('SELECT COUNT(id) AS count FROM main'); $totalRows = $rows->fetch(PDO::FETCH_ASSOC); $firstRowIndex = $curPage * $rowsPerPage - $rowsPerPage; //получаем список пользователей из базы $res = $dbh->query('SELECT * FROM main '.$qWhere.' ORDER BY '.$sortingField.' '.$sortingOrder.' LIMIT '.$firstRowIndex.', '.$rowsPerPage); //сохраняем номер текущей страницы, общее количество страниц и общее количество записей $response->page = $curPage; $response->total = ceil($totalRows['count'] / $rowsPerPage); $response->records = $totalRows['count']; $i=0; while($row = $res->fetch(PDO::FETCH_ASSOC)) { $response->rows[$i]['id']=$row['id']; $response->rows[$i]['cell']=array($row['id'], $row['lastname'], $row['name'], $row['otchestvo'], $row['reit'], $row['status'], $row['prefix']); $i++; } echo json_encode($response); У меня подозрение на то что у хостера может какая то функция отключена сервера? Или дело в другом?
Оформите нормально этот кусок кода. Попробуйте отловить проблему при помощи try-catch, предварительно сказав об этом объекту PDO
PHP: $qWhere = ''; //определяем команду (поиск или просто запрос на вывод данных) //если поиск, конструируем WHERE часть запроса if (isset($_POST['_search']) && $_POST['_search'] == 'true') { $allowedFields = array('lastname','name','otchestvo','reit','status ','prefix'); // допустимые поля $allowedOperations = array('AND', 'OR'); // допустимые операии $searchData = json_decode($_POST['filters']); //ограничение на количество условий if (count($searchData->rules) > 10) { throw new Exception('Взломать не удастся!!! :)'); } $qWhere = ' WHERE '; $firstElem = true; //объединяем все полученные условия foreach ($searchData->rules as $rule) { if (!$firstElem) { //объединяем условия (с помощью AND или OR) if (in_array($searchData->groupOp, $allowedOperations)) { $qWhere .= ' '.$searchData->groupOp.' '; } else { //если получили не существующее условие - возвращаем описание ошибки throw new Exception('Взломать не удастся!!! :)'); } } else { $firstElem = false; } $where .= "`".preg_replace('/-|\'|\"/', '', $rule->field)."`"; // очистка запроса от левых символов //вставляем условия if (in_array($rule->field, $allowedFields)) { switch ($rule->op) { case 'eq': $qWhere .= $rule->field.' = '.$dbh->quote($rule->data); break; case 'ne': $qWhere .= $rule->field.' <> '.$dbh->quote($rule->data); break; case 'gt': $qWhere .= $rule->field.' > '.$dbh->quote($rule->data); break; case 'lt': $qWhere .= $rule->field.' < '.$dbh->quote($rule->data); break; case 'le': $qWhere .= $rule->field.' <= '.$dbh->quote($rule->data); break; case 'ge': $qWhere .= $rule->field.' >= '.$dbh->quote($rule->data); break; case 'bw': $qWhere .= $rule->field.' LIKE '.$dbh->quote($rule->data.'%'); break; case 'cn': $qWhere .= $rule->field.' LIKE '.$dbh->quote('%'.$rule->data.'%'); break; default: throw new Exception('Взломать не удастся!!! :)'); } } else { //если получили не существующее условие - возвращаем описание ошибки throw new Exception('Взломать не удастся!!! :)'); } } } //------------------------------------------------------------------- //определяем количество записей в таблице $rows = $dbh->query('SELECT COUNT(id) AS count FROM main'); $totalRows = $rows->fetch(PDO::FETCH_ASSOC); $firstRowIndex = $curPage * $rowsPerPage - $rowsPerPage; //получаем список пользователей из базы $res = $dbh->query('SELECT * FROM main '.$qWhere.' ORDER BY '.$sortingField.' '.$sortingOrder.' LIMIT '.$firstRowIndex.', '.$rowsPerPage); //сохраняем номер текущей страницы, общее количество страниц и общее количество записей $response->page = $curPage; $response->total = ceil($totalRows['count'] / $rowsPerPage); $response->records = $totalRows['count']; $i=0; while($row = $res->fetch(PDO::FETCH_ASSOC)) { $response->rows[$i]['id']=$row['id']; $response->rows[$i]['cell']=array($row['id'], $row['lastname'], $row['name'], $row['otchestvo'], $row['reit'], $row['status'], $row['prefix']); $i++; } echo json_encode($response); Вот может так понятнее выглядит. Дело в том что на денвере работало все нормально. Перенес скрипт на удаленный сервер - выдает ошибку! P.S. Не понял - каким образоом отловить ошибку с PDO
Dimon32, покажи где объявляешь переменную объект $dbh и вообще все ее изменения по коду (лучше выложить код целиком). я так понимаю это переменная класса PDOStatement и его возможно не поддерживает твой хостинг. Проверь соответствует ли твой хостинг этим критериям: (PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) То есть если на хостинге пхп меньше версии 5.1, то работать вроде как и НЕ должно.
в 'connections/connect.php' все параметры к БД правильно указал? Таблицу соответствующую на хостинге создал же?
Да в том то и дело! Все остальное работает - и вывод и редактирование таблицы. (Это плагин jQgrid на JavaScript) Только этот поиск не работает.
ну тогда последнее от балды, что в голову пришло: кодировка сайта и БД совпадают? На денвере и блок поиска работал, как я понял?
На денвере ВСЕ работало. Кодировка изначально везде UTF-8. На сервере записи в БД тоже в кодировке UTF-8
Не работает parse_url почему-то. А именно вылетает ошибка: вот кусок кода из функции обработки PHP: $parsed_url = parse_url($url); $site = $parsed_url['host']; $path = $parsed_url['path']; $query = $parsed_url['query']; // в этой строчке проблема. вот кусок кода с передачей $url функции PHP: $url = "http://site.ru/index.php"; $query = $url.'?session_to_unset=1&token='.$token.'&_SESSION[!bla]='.urlencode('|xxx|a:1:{i:0;O:10:"PMA_Config":1:{s:6:"source";s:'.strlen($good_inj).':"'.$good_inj.'";}}').'&_SESSION[payload]='.urlencode($payload); $sess_test_page = send_data('GET',$query,'',$url,$cookie_array); $sess_test_page2 = send_data('GET',$url.'?token='.$token,'',$url,$cookie_array);
Vici, если в url нет query-части, то функция parse_url() не будет создавать такой элемент массива. В коде, который ты показал url = http://site.ru/index.php query-части нет
vernite akk=, preg_matc? и двойные кавычки экранировать нужно. решение - http://forum.antichat.ru/showpost.php?p=2932039&postcount=1653
Народ, объясните пожалуйста преимущества разработки проектов при помощи фреймверков, например Zend ? Помимо того, что все делится на представление информации, функционал, т. е. MVC, и помимо того, что степень безопасности выше, чем у собственного го*но кода ? Например я скачал этот фреймверк, сам он весит 50 или 60 МБ, если на нем реализовать минимальный какой - то проект, то весь сайт получится около 60 МБ ? В то время как без фреймверка все весило бы около 5 МБ ? Получается его стоит использовать только для очень крупных проектов ?
Edward, конкретно Zend для больших, да. Для твоих 5мб подойдёт Kohana, CodeIgnighter. Плюсы - много чего готового. Например, ORM в кохане, делает взгляд на БД объектным. Ты в коде просто описываешь структуту а дальше будешь работать с БД, как с объектом(примерно как с массивом, на деле (url )), куда будут подтягиваться данные по мере неоходимости. Минусы - разбираться во фреймворке дело муторное, но полезное. К тому же, если выпустят релиз с багой ты её словишь и можешь попасть под взлом, код фреймоврка перекапывать почти нереально. Надо уметь настраивать фреймворк, знать что и где подключается/отключается и знать как работать с его модулями. Для меня идеальным стал вариант самописного фреймворка. Погугли MVC на хабре, мимо нужной статьи не пройдёшь, там достаточно написанно, чтобы сделать свой ФВ под нужды. --- Ах да, преимущества. Намного более выгодно по времени и трудозатратам освоить какой-нибудь фреймворк. Осваиваться будет не быстро, зато потом можно на нём будет клепать функциональные сайты очень быстро. Собственно, во многих web-студиях так и работают, штатые кодеры осваивают фреймворк и далее работают с ним.