[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. by_nikita

    by_nikita Member

    Joined:
    1 Dec 2010
    Messages:
    46
    Likes Received:
    11
    Reputations:
    5
    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($idmd5($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 а если данные ввести неверно то пишет неверно.в чем проблема?
     
  2. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    И что не нравиться? )))
     
  3. Skofield

    Skofield Elder - Старейшина

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    Может подразумевалось, что, если оставить поле ввода данных пустым и нажать на кнопку вход, то войдет нормально, а если данные неправильны, то выдаст ошибку. Вопрос в том, почему пропускает пустую строку?
     
  4. Scofild

    Scofild Member

    Joined:
    26 Jun 2007
    Messages:
    29
    Likes Received:
    43
    Reputations:
    0
    Есть скрипт который записывает 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 тех кто по ним перешёл?
     
    #19644 Scofild, 7 Dec 2011
    Last edited: 7 Dec 2011
  5. by_nikita

    by_nikita Member

    Joined:
    1 Dec 2010
    Messages:
    46
    Likes Received:
    11
    Reputations:
    5
    должно проходить авторизацию , а он тупиться и не переход . на страницу интер переход она полностью пустая. а должно на эту же только авторизованным
     
  6. Dimon32

    Dimon32 New Member

    Joined:
    6 May 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    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</bon 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</bon 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);
    У меня подозрение на то что у хостера может какая то функция отключена сервера? Или дело в другом?
     
  7. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    Пустой массив передается скорее всего или вообще не массив.
     
    1 person likes this.
  8. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Оформите нормально этот кусок кода.
    Попробуйте отловить проблему при помощи try-catch, предварительно сказав об этом объекту PDO
     
  9. Dimon32

    Dimon32 New Member

    Joined:
    6 May 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    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
     
    #19649 Dimon32, 8 Dec 2011
    Last edited: 8 Dec 2011
  10. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    Dimon32, покажи где объявляешь переменную объект $dbh и вообще все ее изменения по коду (лучше выложить код целиком).
    я так понимаю это переменная класса PDOStatement и его возможно не поддерживает твой хостинг.
    Проверь соответствует ли твой хостинг этим критериям: (PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
    То есть если на хостинге пхп меньше версии 5.1, то работать вроде как и НЕ должно.
     
  11. Dimon32

    Dimon32 New Member

    Joined:
    6 May 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    Вот такие параметры сервера:
    На счет переменной: вот код целиком
     
    #19651 Dimon32, 8 Dec 2011
    Last edited: 8 Dec 2011
  12. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    в 'connections/connect.php' все параметры к БД правильно указал? Таблицу соответствующую на хостинге создал же?
     
  13. Dimon32

    Dimon32 New Member

    Joined:
    6 May 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    Да в том то и дело!
    Все остальное работает - и вывод и редактирование таблицы.
    (Это плагин jQgrid на JavaScript)
    Только этот поиск не работает.
     
  14. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    ну тогда последнее от балды, что в голову пришло: кодировка сайта и БД совпадают?
    На денвере и блок поиска работал, как я понял?
     
  15. Dimon32

    Dimon32 New Member

    Joined:
    6 May 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    На денвере ВСЕ работало. Кодировка изначально везде UTF-8.
    На сервере записи в БД тоже в кодировке UTF-8
     
  16. Vici

    Vici Banned

    Joined:
    1 Dec 2011
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Не работает 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);
     
     
  17. Todin

    Todin Member

    Joined:
    28 Jan 2011
    Messages:
    47
    Likes Received:
    7
    Reputations:
    0
    Vici, если в url нет query-части, то функция parse_url() не будет создавать такой элемент массива.
    В коде, который ты показал url = http://site.ru/index.php
    query-части нет
     
  18. Skofield

    Skofield Elder - Старейшина

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    vernite akk=, preg_matc? и двойные кавычки экранировать нужно.
    решение - http://forum.antichat.ru/showpost.php?p=2932039&postcount=1653
     
  19. Edward

    Edward Banned

    Joined:
    11 Feb 2010
    Messages:
    329
    Likes Received:
    21
    Reputations:
    -1
    Народ, объясните пожалуйста преимущества разработки проектов при помощи фреймверков, например Zend ? Помимо того, что все делится на представление информации, функционал, т. е. MVC, и помимо того, что степень безопасности выше, чем у собственного го*но кода ?

    Например я скачал этот фреймверк, сам он весит 50 или 60 МБ, если на нем реализовать минимальный какой - то проект, то весь сайт получится около 60 МБ ? В то время как без фреймверка все весило бы около 5 МБ ? Получается его стоит использовать только для очень крупных проектов ?
     
  20. bad_boy

    bad_boy Elder - Старейшина

    Joined:
    30 Dec 2004
    Messages:
    187
    Likes Received:
    33
    Reputations:
    3
    Edward, конкретно Zend для больших, да. Для твоих 5мб подойдёт Kohana, CodeIgnighter.
    Плюсы - много чего готового. Например, ORM в кохане, делает взгляд на БД объектным. Ты в коде просто описываешь структуту а дальше будешь работать с БД, как с объектом(примерно как с массивом, на деле (url )), куда будут подтягиваться данные по мере неоходимости.
    Минусы - разбираться во фреймворке дело муторное, но полезное. К тому же, если выпустят релиз с багой ты её словишь и можешь попасть под взлом, код фреймоврка перекапывать почти нереально. Надо уметь настраивать фреймворк, знать что и где подключается/отключается и знать как работать с его модулями.

    Для меня идеальным стал вариант самописного фреймворка. Погугли MVC на хабре, мимо нужной статьи не пройдёшь, там достаточно написанно, чтобы сделать свой ФВ под нужды.

    ---

    Ах да, преимущества. Намного более выгодно по времени и трудозатратам освоить какой-нибудь фреймворк. Осваиваться будет не быстро, зато потом можно на нём будет клепать функциональные сайты очень быстро. Собственно, во многих web-студиях так и работают, штатые кодеры осваивают фреймворк и далее работают с ним.
     
    #19660 bad_boy, 9 Dec 2011
    Last edited: 9 Dec 2011
    1 person likes this.
Thread Status:
Not open for further replies.