1. Всем пользователям необходимо проверить работоспособность своего электронного почтового адреса. Для этого на, указанный в вашем профиле электронный адрес, в период с 14 по 18 июня, отправлено письмо. Вам необходимо проверить свою почту, возможно папку "спам". Если там есть письмо от нас, то можете не беспокоиться, в противном случае необходимо либо изменить адрес электронной почты в настройках профиля , либо если у вас электронная почта от компании "Интерсвязь" (@is74.ru) вы им долго не пользовались и хотите им пользоваться, позвоните в СТП по телефону 247-9-555 для активации вашего адреса электронной почты.
    Скрыть объявление

Кодинг на PHP

Тема в разделе "Вебстроительство", создана пользователем ansis, 13 июн 2006.

  1. ansis

    ansis

    Репутация:
    695
    ansis, 13 июн 2006
    Эта тема предназначена для обсуждения и решения любых проблем, связанных с программированием на языке скриптов PHP, обмена секретами, опытом и помощи другим пользователям.
     
    #1
  2. Gunman

    Gunman Ословед

    Репутация:
    2.216
    Gunman, 21 окт 2012
    Можно поподробнее? Просто таже ситуация что и тут:

    set_error_handler выполняется уже после Warning'a (
     
  3. KOMATOZZ

    KOMATOZZ Ословед

    Репутация:
    8.897
    KOMATOZZ, 27 окт 2012
    try catch
     
  4. ICQ

    ICQ

    Репутация:
    151
    ICQ, 15 янв 2013
    PHP:
      // Начинаем сессию  
      session_start();  
    ?> 
    <html> 
    <head> 
    <title>OnLine</title> 
    <style type = "text/css"> 
        a { 
            color: #006699; 
        } 
        a:hover{ 
            text-decoration: none; 
        } 
    </style> 
    <script type = "text/javascript"> 
    // Функция для скрытия/показа ников пользователей/администраторов 
    function look(type){ 
    param=document.getElementById(type); 
    if(param.style.display == "none") param.style.display = "block"; 
    else param.style.display = "none" 

    </script> 
    </head> 
    <body> 
    <?php 
       
      
    // Устанавливаем соединение с базой данных  
      
    $db mysql_connect "localhost""root""" ); 
      
    mysql_select_db "site"$db ); 
       
      
    /* 
      * Если на наш сайт зашёл поисковой робот - а мы знаем трёх самых популярных, то 
      * заносим его имя в переменную, иначе переменной присваиваем пустое значение 
      */ 
      
    if ( ( substr $_SERVER['USER_AGENT'], 0) == 'Yandex' ) || ( substr $_SERVER['USER_AGENT'], 011) == 'YaDirectBot' ) ) { 
        
    $bot 'yandex'
      } else { 
        if ( ( 
    strpos $_SERVER['USER_AGENT'], 'Googlebot' ) !== false) || ( strpos $_SERVER['USER_AGENT'], 'Mediapartners-Google' ) !== false ) || ( strpos $_SERVER['USER_AGENT'], 'Google Search Appliance' ) !== false ) ) { 
            
    $bot 'google'
        } else { 
            if ( 
    substr $_SERVER['USER_AGENT'], 012 ) == 'StackRambler' ) { 
                
    $bot 'rambler'
            } else { 
                
    $bot ''
            } 
        } 
      } 
       
      
    // Если зашёл человек, то ... 
      
    if ( $bot == '' ) { 
       
      
    // Получаем уникальный id сессии  
      
    $id_session session_id();  
       
      
    // Проверяем, присутствует ли такой id сессии в базе данных   
      
    $res mysql_query "SELECT * FROM online WHERE id = '$id_session'" ); 
       
      
    // Если нам не удалось связаться с таблицой сессий, то выводим ошибку 
      
    if( !$res ) { 
        exit ( 
    "<p>Ошибка в запросе к таблице сессий</p>" );  
      } 
       
      
    /* 
      * Если сессия с таким номером уже существует,  
      * значит пользователь online - обновляем время его последнего посещения  
      * если это админ, то обновляем его как админа, иначе как пользователя, если нет имени в массиве сессий, то 
      * обновляем его как гостя 
      */ 
      
    if( mysql_num_rows $res ) > ) { 
        
    // Если есть имя в массиве, то значит - это вошедший пользователь 
        
    if ( isset ( $_SESSION["user"] ) & ( $_SESSION["user"] !== '' ) ) { 
            
    // Заносим его имя в переменную и делаем его имя безопасным, для дальнейшей работе с ним 
            
    $user trim stripslashes htmlspecialchars $_SESSION["user"] ) ) ); 
            
    // Если этот пользователь - админ, то обновляем его в базе как админа 
            
    if ( isset ($_SESSION["admin"] ) & ( $_SESSION["admin"] == 'yes' ) ) { 
                if ( !
    mysql_query "UPDATE online SET date = NOW(), users = '$user', admin = 'yes' WHERE id = '$id_session'" ) ) {  
                    exit ( 
    "<p>Ошибка при добавлении пользователя</p>" );  
                } 
            } else { 
                
    // Иначе - обновляем его как пользователя 
                
    if ( !mysql_query "UPDATE online SET date = NOW(), users = '$user' WHERE id = '$id_session'" ) ) {  
                    exit ( 
    "<p>Ошибка при добавлении пользователя</p>" );  
                } 
            } 
        } else { 
            
    // Если этот пользователь вошёл как гость, то обновляем его в базе как гостя 
            
    if ( !mysql_query "UPDATE online SET date = NOW(), users = '', admin = 'no' WHERE id = '$id_session'" ) ) {  
                exit ( 
    "<p>Ошибка при добавлении пользователя</p>" );  
            } 
        } 
      } else {  
        
    // Если такого id нет в базе, то посетитель только что  
        // вошёл - помещаем в таблицу нового посетителя  
        // Если это пользователь, то 
        
    if ( isset ( $_SESSION["user"] ) & ( $_SESSION["user"] !== '' ) ) { 
            
    // Заносим его имя в переменную и делаем безопасным 
            
    $user trim stripslashes htmlspecialchars $_SESSION["user"] ) ) ); 
            
    // Если в массиве сессий есть значение yes в элементе admin, то добавляем его как админа 
            
    if ( isset ($_SESSION["admin"] ) & ( $_SESSION["admin"] == 'yes' ) ) { 
                if ( !
    mysql_query "INSERT INTO online VALUES ('$id_session', NOW(), '$user', 'yes')" ) ) {  
                    exit ( 
    "<p>Ошибка при добавлении пользователя</p>" );  
                } 
            } else { 
                
    // Если не админ, но есть имя в массиве сессии, то добавляем его как пользователя 
                
    if ( !mysql_query "INSERT INTO online VALUES ('$id_session', NOW(), '$user', 'no')" ) ) {  
                    exit ( 
    "<p>Ошибка при добавлении пользователя</p>" );  
                } 
            } 
        } else { 
            
    // Если это гость, то добавляем гостя 
            
    if ( !mysql_query "INSERT INTO online VALUES ('$id_session', NOW(), '', 'no')" ) ) {  
                exit ( 
    "<p>Ошибка при добавлении пользователя</p>" );  
            } 
        } 
      } 
       
      } 
       
      
    /* 
      * Будем считать, что пользователи, которые отсутствовали  
      * в течении 10 минут - покинули сайт - удаляем их  
      * id_session из базы данных   
      */ 
      
    mysql_query("DELETE FROM online WHERE date < NOW() -  INTERVAL '10' MINUTE"); 
       
       
      echo 
    "<tt>"
      
    /* 
      * Мы будем выводить кол-во гостей, если они есть, то выводим их кол-во, 
      * иначе будем выводить слово - нет, вместо 0 
      */ 
      
    $count_sel mysql_query "SELECT COUNT(*) FROM online WHERE users = ''"$db ); 
      
    $count_row mysql_fetch_array $count_sel ); 
      if ( 
    $count_row[0] > ) { 
        echo 
    "Гостей: ".$count_row[0]."<br />"
      } else { 
        echo 
    "Гостей: нет<br />"
      } 
       
      
    /* 
      * Будем выводить кол-во пользователей, если их больше 0, то выведем ссылку, которая при нажатии на неё 
      * будет показывать/скрывать имена пользователей в виде ссылок на их персональные страницы, 
      * если пользователей не будет, то слово - пользователей, выведется как простое слово, а не ссылка 
      * и вместо 0, будет слово - нет. 
      */ 
      
    $count_sel mysql_query "SELECT COUNT(*) FROM online WHERE users != '' AND admin != 'yes'"$db ); 
      
    $count_row mysql_fetch_array $count_sel ); 
      if ( 
    $count_row[0] > ) { 
        
    /* 
        * Выводим список пользователей, предварительно скрыв их, и делаем ссылку, которая при нажатии может 
        * показать, а может и скрыть список пользователей 
        * Для того чтобы скрыть/показать список пользователей, мы воспользуемся простым javascript'ом, 
        * который будет менять стиль отображения для нашего div блока 
        */ 
        
    echo "<a href = \"javascript:look('users');\">Пользователей</a>: ".$count_row[0]."<br />"
        echo 
    "<div id = 'users' style = 'display:none'>"
        
    // Вытаскиваем список пользователей из таблицы 
        
    $select_users mysql_query "SELECT * FROM online WHERE users != '' AND admin != 'yes'"$db ); 
        
    $row_users mysql_fetch_array $select_users ); 
        
    // Если пользователи есть, то ... 
        
    if ( mysql_num_rows $select_users ) > ) { 
            echo 
    "<b>"
            
    /* 
            * Для того чтобы выводить список пользователей через запятую, нужно сначала просто вывести первое имя, 
            * а после выводить сообщение в цикле типа - , имя 
            */ 
            
    if ( mysql_num_rows $select_users ) > ) { 
                echo 
    "<a href = 'page.php?name=".$row_users["users"]."'>".$row_users["users"]."</a>"
                
    $row_users mysql_fetch_array $select_users ); 
                do { 
                    echo 
    ", <a href = 'page.php?name=".$row_users["users"]."'>".$row_users["users"]."</a>"
                } while ( 
    $row_users mysql_fetch_array $select_users ) ); 
                echo 
    "<br />"
            } else { 
                echo 
    "<a href = 'page.php?name=".$row_users["users"]."'>".$row_users["users"]."</a><br />"
            } 
            echo 
    "</b>"
        } 
        echo 
    "</div>"
      } else { 
        
    // Если пользователей нет, то выводим об этом соответствующую информацию. 
        
    echo "Пользователей: нет<br />"
      } 
      
    /* 
      * Если админы есть, то выводим он-лайн, иначе офф-лайн. 
      * И также как и пользователей в цикле выводим администраторов. 
      */ 
      
    $count_sel mysql_query "SELECT COUNT(*) FROM online WHERE admin = 'yes'"$db ); 
      
    $count_row mysql_fetch_array $count_sel ); 
      if ( 
    $count_row[0] > ) { 
        
    // Выводим список администраторов, предварительно скрыв их, и делаем ссылку, которая при нажатии может показать, а может и скрыть список администраторов 
        
    $count_sel mysql_query "SELECT COUNT(*) FROM online WHERE users != '' AND admin = 'yes'"$db ); 
        
    $count_row mysql_fetch_array $count_sel ); 
        if ( 
    $count_row[0] > ) { 
            echo 
    "<a href = \"javascript:look('admins');\">Администраторы</a>: <font color = 'green'><b>online</b></font><br />"
            echo 
    "<div id = 'admins' style = 'display:none'>"
            
    $select_admins mysql_query "SELECT * FROM online WHERE users != '' AND admin = 'yes'"$db ); 
            
    $row_admins mysql_fetch_array $select_admins ); 
            if ( 
    mysql_num_rows $select_admins ) > ) { 
                echo 
    "<b>"
                if ( 
    mysql_num_rows $select_admins ) > ) { 
                    echo 
    "<a href = 'page.php?name=".$row_admins["users"]."'>".$row_admins["users"]."</a>"
                    
    $row_admins mysql_fetch_array $select_admins ); 
                    do { 
                        echo 
    ", <a href = 'page.php?name=".$row_admins["users"]."'>".$row_admins["users"]."</a>"
                    } while ( 
    $row_admins mysql_fetch_array $select_admins ) ); 
                    echo 
    "<br />"
                } else { 
                    echo 
    "<a href = 'page.php?name=".$row_admins["users"]."'>".$row_admins["users"]."</a><br />"
                } 
                echo 
    "</b>"
            }     
            echo 
    "</div>"
      } 
      } else { 
        
    // Если администраторов нет, то выводим offline 
        
    echo "Администраторы: <font color = 'red'><b>offline</b></font><br />"
      } 
      
    /* 
      * Если есть поисковой робот, то проверяем есть ли он в базе, если есть, то обновляем время его посещения, 
      * иначе добавляем его в базу данных 
      */ 
      
    if ( $bot !== '' ) { 
        
    $bot_res mysql_query "SELECT * FROM bot WHERE name = '$bot'"$db ); 
        if ( 
    mysql_num_rows $bot_res ) > ) { 
            if ( !
    mysql_query "UPDATE bot SET date = NOW()" ) ) { 
                die ( 
    "Ошибка добавления робота в базу данных" ); 
            } 
        } else { 
            if ( !
    mysql_query "INSERT INTO bot VALUES ('$bot', NOW())" ) ) { 
                die ( 
    "Ошиба добавления робота в базу данных" ); 
            } 
        } 
        } 
         
        
    // Удаляем всех поисковых роботов из базы, которых не было 10 минут 
        
    mysql_query("DELETE FROM bot WHERE date < NOW() -  INTERVAL '10' MINUTE"); 
         
        
    // Выводим точно также как и пользователей, только уже кол-во поисковых ботов, и их имена не в виде ссылок 
        
    $count_sel mysql_query "SELECT COUNT(*) FROM bot"$db ); 
        
    $count_row mysql_fetch_array $count_sel ); 
        if ( 
    $count_row[0] > ) { 
            echo 
    "<a href = \"javascript:look('bots');\">Поисковых роботов</a>: ".$count_row[0]."<br />"
            echo 
    "<div id = 'bots' style = 'display:none'>"
            
    $select_bots mysql_query "SELECT * FROM bot"$db ); 
            
    $row_bots mysql_fetch_array $select_bots ); 
            if ( 
    mysql_num_rows $select_bots ) > ) { 
                echo 
    "<b>"
                if ( 
    mysql_num_rows $select_bots ) > ) { 
                    echo 
    $row_bots["name"]; 
                    
    $row_bots mysql_fetch_array $select_bots ); 
                    do { 
                        echo 
    ", ".$row_bots["name"]."</a>"
                    } while ( 
    $row_bots mysql_fetch_array $select_bots ) ); 
                    echo 
    "<br />"
                } else { 
                    echo 
    $row_bots["name"]."<br />"
                } 
                echo 
    "</b>"
            }     
            echo 
    "</div>"
      } else { 
        echo 
    "Поисковых ботов: нет<br />"
      } 
       
      
    /* 
      * Выводим рекордное кол-во человек на сайте. 
      * Если их сейчас больше, чем было в прошлом рекорде, то обновляем статистику, занося в базу кол-во 
      * пользователей, гостей, администраторов и общее кол-во посетителей, не учитывая поисковых роботов. 
      * Если пользователей меньше или столько же, то выводим информацию о рекордном кол-ве посетителей 
      */ 
      
    $record_res mysql_query "SELECT COUNT(*) FROM online"$db ); 
      
    $record_row mysql_fetch_array $record_res ); 
      
    $res_record mysql_query "SELECT * FROM record"$db ); 
      
    $row_record mysql_fetch_array $res_record ); 
      if ( 
    $record_row[0] > $row_record["record"] ) { 
        
    $rec $record_row[0]; 
        if ( !
    mysql_query "UPDATE record SET record = '$rec'"$db ) ) { 
            die ( 
    "Обновить рекорд не удалось!" ); 
        } 
        
    $record_res mysql_query "SELECT COUNT(*) FROM online WHERE users = ''"$db ); 
        
    $record_row mysql_fetch_array $record_res ); 
        
    $rec $record_row[0]; 
        if ( !
    mysql_query "UPDATE record SET guests = '$rec'"$db ) ) { 
            die ( 
    "Обновить рекорд не удалось!" ); 
        } 
        
    $record_res mysql_query "SELECT COUNT(*) FROM online WHERE users != '' AND admin != 'yes'"$db ); 
        
    $record_row mysql_fetch_array $record_res ); 
        
    $rec $record_row[0]; 
        if ( !
    mysql_query "UPDATE record SET users = '$rec'"$db ) ) { 
            die ( 
    "Обновить рекорд не удалось!" ); 
        } 
        
    $record_res mysql_query "SELECT COUNT(*) FROM online WHERE users != '' AND admin = 'yes'"$db ); 
        
    $record_row mysql_fetch_array $record_res ); 
        
    $rec $record_row[0]; 
        if ( !
    mysql_query "UPDATE record SET admins = '$rec'"$db ) ) { 
            die ( 
    "Обновить рекорд не удалось!" ); 
        } 
        
    $day date "d-m-Y в H:i" ); 
        if ( !
    mysql_query "UPDATE record SET date = '$day'"$db ) ) { 
            die ( 
    "Обновить рекорд не удалось!" ); 
        } 
      } 
      
    $rec_res mysql_query "SELECT * FROM record"$db ); 
      
    $rec_row mysql_fetch_array $rec_res ); 
      echo 
    "Рекордное кол-во человек: <b>".$rec_row["record"]."</b> ( Гостей: <b>".$rec_row["guests"]."</b>, Пользователей: 
    <b>"
    .$rec_row["users"]."</b>, Администраторов: <b>".$rec_row["admins"]."</b> ) было ".$rec_row["date"]; 
      echo 
    "</tt>"
    Подскажите плиз ,что тут надо убрать чтобы только поисковые боты остались,а другое не показывалось.
     
  5. ROMER

    ROMER Ословед

    Репутация:
    203.433
    ROMER, 16 янв 2013
    Если я правильно понял, необходимо отчистить код, и оставить только тот, где происходят действия с ботами. Если так то вроде бы вот:
    PHP:
    <html> 
    <head> 
    <title>OnLine</title> 
    <style type = "text/css"> 
        a { 
            color: #006699; 
        } 
        a:hover{ 
            text-decoration: none; 
        } 
    </style>
    </head> 
    <body> 
    <?php 
       
      
    // Устанавливаем соединение с базой данных  
      
    $db mysql_connect "localhost""root""" ); 
      
    mysql_select_db "site"$db ); 
       
      
    /* 
      * Если на наш сайт зашёл поисковой робот - а мы знаем трёх самых популярных, то 
      * заносим его имя в переменную, иначе переменной присваиваем пустое значение 
      */ 
      
    if ( ( substr $_SERVER['USER_AGENT'], 0) == 'Yandex' ) || ( substr $_SERVER['USER_AGENT'], 011) == 'YaDirectBot' ) ) { 
        
    $bot 'yandex'
      } else { 
        if ( ( 
    strpos $_SERVER['USER_AGENT'], 'Googlebot' ) !== false) || ( strpos $_SERVER['USER_AGENT'], 'Mediapartners-Google' ) !== false ) || ( strpos $_SERVER['USER_AGENT'], 'Google Search Appliance' ) !== false ) ) { 
            
    $bot 'google'
        } else { 
            if ( 
    substr $_SERVER['USER_AGENT'], 012 ) == 'StackRambler' ) { 
                
    $bot 'rambler'
            } else { 
                
    $bot ''
            } 
        } 
      }         
       
      
    /* 
      * Если есть поисковой робот, то проверяем есть ли он в базе, если есть, то обновляем время его посещения, 
      * иначе добавляем его в базу данных 
      */ 
      
    if ( $bot !== '' ) { 
        
    $bot_res mysql_query "SELECT * FROM bot WHERE name = '$bot'"$db ); 
        if ( 
    mysql_num_rows $bot_res ) > ) { 
            if ( !
    mysql_query "UPDATE bot SET date = NOW()" ) ) { 
                die ( 
    "Ошибка добавления робота в базу данных" ); 
            } 
        } else { 
            if ( !
    mysql_query "INSERT INTO bot VALUES ('$bot', NOW())" ) ) { 
                die ( 
    "Ошиба добавления робота в базу данных" ); 
            } 
        } 
        } 
         
        
    // Удаляем всех поисковых роботов из базы, которых не было 10 минут 
        
    mysql_query("DELETE FROM bot WHERE date < NOW() -  INTERVAL '10' MINUTE"); 
         
        
    // Выводим точно также как и пользователей, только уже кол-во поисковых ботов, и их имена не в виде ссылок 
        
    $count_sel mysql_query "SELECT COUNT(*) FROM bot"$db ); 
        
    $count_row mysql_fetch_array $count_sel ); 
        if ( 
    $count_row[0] > ) { 
            echo 
    "<a href = \"javascript:look('bots');\">Поисковых роботов</a>: ".$count_row[0]."<br />"
            echo 
    "<div id = 'bots' style = 'display:none'>"
            
    $select_bots mysql_query "SELECT * FROM bot"$db ); 
            
    $row_bots mysql_fetch_array $select_bots ); 
            if ( 
    mysql_num_rows $select_bots ) > ) { 
                echo 
    "<b>"
                if ( 
    mysql_num_rows $select_bots ) > ) { 
                    echo 
    $row_bots["name"]; 
                    
    $row_bots mysql_fetch_array $select_bots ); 
                    do { 
                        echo 
    ", ".$row_bots["name"]."</a>"
                    } while ( 
    $row_bots mysql_fetch_array $select_bots ) ); 
                    echo 
    "<br />"
                } else { 
                    echo 
    $row_bots["name"]."<br />"
                } 
                echo 
    "</b>"
            }     
            echo 
    "</div>"
      } else { 
        echo 
    "Поисковых ботов: нет<br />"
      } 
    ?>
     
  6. XoD

    XoD Самец :)

    Репутация:
    6.194.200
    XoD, 16 янв 2013
    Ну Ёмое ж в комментах все по русски написано! неужели так сложно голоой пару минут подумать и глазами внимательно посмотреть?

    Кстати, впору поднять вопрос о все чаще встречающейся безграмотности программистов. Речь не о безграмотности в коде, которая тоже повсюду (даже в этом клочке кода), а об обычном незнании русского языка! Откуда это повалилось? И незнание ли или все же нежелание писать правильно? Если второе, то еще обиднее за коллег. И ведь не понимают, что свою личную репутацию гробят и репутацию компании своей безграмотность. Впрочем, в этой стране редко какой программист печется о самообразовании и знает себе цену.
     
  7. ICQ

    ICQ

    Репутация:
    151
    ICQ, 16 янв 2013
    Спасибо.
     
  8. MIDAS

    MIDAS Ословед

    Репутация:
    2.100.393
    MIDAS, 21 янв 2013
    Что не так с этим запросом?
    PHP:
    UPDATE tilesandarticles SET TileVisibility='1' WHERE TileId=".$TileID
    Выводит: Unknown column 'LifeGame' in 'where clause'
    И так с любой колонкой, хотя колонка такая есть, ибо до этого ж как то он выводит данные на страницу с этих колонок.
     
  9. XoD

    XoD Самец :)

    Репутация:
    6.194.200
    XoD, 21 янв 2013
    MIDAS, хочешь помощи - обращайся вежливо! По вопросу: полностью строку из кода от начала и до конца запости, а то как -то между строк выбрал. Тогда будет смысл разбираться дальше.
    Вообще, на http://sqlinfo.ru умные люди с этой ошибкой всех шлют вот сюда - http://webew.ru/articles/3530.webew - почитай, может найдешь свое решение.
     
  10. Vedimak

    Vedimak Ословед

    Репутация:
    9.794
    Vedimak, 21 янв 2013
    Не красиво и не всегда безопасно писать переменные в тело запроса.
     
  11. XoD

    XoD Самец :)

    Репутация:
    6.194.200
    XoD, 21 янв 2013
    Ясен пень, но сейчас не о том. Наша задача сейчас не красоте и безопасности кода человека учить, а выцарапать их него необходимое и банально найти ошибку. А дальше пусть спрашивает, если интересно, а лучше книжки умные пусть идет читать.
     
  12. MIDAS

    MIDAS Ословед

    Репутация:
    2.100.393
    MIDAS, 21 янв 2013
    XoD,

    На счёт вежливости: я чего-то упустил? Или тут перед вопросом требуют писать приабмулу в стиле "Не велите казнить, велите слово молвить..."? Вроде с моей стороны никаких оскорблений, унижений итд в моём посте не содержится.

    Теперь о сути вопроса:

    PHP:
    <?php 
    if(isset($_POST["action"])) {
        include(
    "../../PHP/PROTECTED/BDconnect.php");
        
    $action substr($_POST["action"],0,6);    
        
    $TileID substr($_POST["action"],6);
        switch(
    $action) {
            case 
    "Delete"$sqlrequest="UPDATE tilesandarticles SET TileVisibility='1' WHERE TileId=".$TileID; break;
            case 
    "Repair"$sqlrequest="UPDATE tilesandarticles SET TileVisibility='0' WHERE TileId=".$TileID; break;
        }
        
    mysql_query($sqlrequest,$link) or die(mysql_error());
        unset(
    $_POST["action"]);
    }
    ?>
    Собственно вот код. Данные прилетают исправно, эхом проверено: все переменные есть. А вот колонку с именем TileId не находит.
    Никакие CMS не использую, пишу ручками, для подстветки синтаксиса дримвивер.

    Так вроде как и не в теле, однако це мой косяк - сам вырвал из контекста.
     
  13. XoD

    XoD Самец :)

    Репутация:
    6.194.200
    XoD, 21 янв 2013
    Без придирок к качеству кода. Попробуй в запрос добавить префиксом базу данных. db_name.field_name - что скажет в ответ?
     
  14. MIDAS

    MIDAS Ословед

    Репутация:
    2.100.393
    MIDAS, 21 янв 2013
    Пробовал. Ответ был схожим.

    Поковырявшись на том сайте в интернетах сейчас вот так:

    PHP:
    <?php if(isset($_POST["action"])) {    include("../../PHP/PROTECTED/BDconnect.php");    $action substr($_POST["action"],0,6);        $TileID substr($_POST["action"],6);    switch($action) {        case "Delete"$sqlrequest="UPDATE tilesandarticles SET TileVisibility=".number_format(0)." WHERE TileId='".$TileID."'"; break;        case "Repair"$sqlrequest="UPDATE tilesandarticles SET TileVisibility=".number_format(1)." WHERE TileId='".$TileID."'"; break;    }    mysql_query($sqlrequest,$link) or die(mysql_error());    unset($_POST["action"]);}?>
    Вроде как работает. Правда number_format() мне кажется лишним.
    А что насчёт качества кода?
     
  15. XoD

    XoD Самец :)

    Репутация:
    6.194.200
    XoD, 21 янв 2013
    А какой формат и вообще что содержится в $TileID? Если строка, то конечно в кавычки нужно ее заключать. По поводу number_format - ИМХО это лишнее. Просто если ты меняешь значение bool переменной, то достаточно без кавычек передавать 1 или 0. А number_format имеет смысл использовать, когда нужно вставить число из запроса.
     
  16. Vedimak

    Vedimak Ословед

    Репутация:
    9.794
    Vedimak, 21 янв 2013
    Человек переменную из POST запроса напрямую пихает в sql запрос. Уж лучше пусть это не работает, чем иметь такую дыру.

    Я вот об этом говорил, почитайте про sql инъекции.
    http://php.net/manual/ru/function.mysql-real-escape-string.php
     
  17. XoD

    XoD Самец :)

    Репутация:
    6.194.200
    XoD, 21 янв 2013
    Тогда уж лучше вот так - http://habrahabr.ru/post/12067/ и вот так http://www.php.su/security/

    А вообще, MIDAS, если что-то большое и публичное руками пишешь, то либо используй какой-то хороший фреймворк, если знаний хватает. Например Zend - он и в разработке вцелом очень поможет, и с базами работу удобнее и безопаснее сделает, но требует определенных знаний и опыта и существенно увеличивает нагрузку на сервер (поэтому все CMS, использующие в полной мере Zend, требуют минимум VPS для быстрой работы сайта), либо хотя бы возьми на вооружение готовый класс для работы с MySQL. Из второго варианта я могу тебе предложить два варианта. Первый - mysqli, второй - взять из стандартного пакета WordPRess файлик /wp-includes/wp-db.php - его очень легко без участия вордпресса использовать в своих скриптах. При этом он обеспечит безопасность и удобство работы с базой. Можно будет уже не трястись так сильно над фильтрацией входящих переменных, передаваемых в запрос.
     
  18. MIDAS

    MIDAS Ословед

    Репутация:
    2.100.393
    MIDAS, 22 янв 2013
    Да кого там большое и публичное. Так, диплом - сдать забыть.
    CMS когда-то копал (Joomla) но как-то приятнее ручками.
    А вот за mysqli итд - спасибо, посмотрю.
     
  19. Serge

    Serge Ословед

    Репутация:
    13.474.289
    Serge, 22 янв 2013
    Плохо.

    - Что будет, если я вручную состряпаю запрос и передам не тот параметр action, который ты ожидаешь - например в 2 символа...
    - вместо include - include_once
    - в PHP принято стараться использовать одинарные кавычки в строках
    - в SQL запросы нельзя вставлять параметры сцепкой строк, нужно как-то так
    Код:
    [COLOR=#000000][COLOR=#FF8000]// Formulate Query
    // This is the best way to perform an SQL query
    // For more examples, see mysql_real_escape_string()
    [/COLOR][COLOR=#0000BB]$query [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]sprintf[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"SELECT firstname, lastname, address, age FROM friends 
        WHERE firstname='%s' AND lastname='%s'"[/COLOR][COLOR=#007700],
        [/COLOR][COLOR=#0000BB]mysql_real_escape_string[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]$firstname[/COLOR][COLOR=#007700]),
        [/COLOR][COLOR=#0000BB]mysql_real_escape_string[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]$lastname[/COLOR][COLOR=#007700]));[/COLOR][/COLOR]
    
    - в switch нет раздела default
    - нет нужды дважды описывать логику формирования SQL запроса, нужно сохранить изменяемый параметр в переменную и уже после switch сформировать SQL запрос.

    Рекомендуется полностью осилить
    http://php.net/manual/en/function.mysql-query.php
     
  20. XoD

    XoD Самец :)

    Репутация:
    6.194.200
    XoD, 22 янв 2013
    Парню пофиг на безопасность и правильность, поскольку это всего лишь "школьная поделка" для диплома: показал и забыл. Я диплом защищал тоже сайтом. У меня был образовательный портал в помощь студентам и преподам очки/заочки + для проведения дистанционного обучения. Мне просто профессия не позволила сделать плохо и халтурно, поэтому и дизайн был на уровне, и безопасность, и код чистый и красивый. А можно было просто принести нечто, что раскрывало бы и демонстрировало тему моей ВКР, которая с программированием и безопасностью ничего общего не имеет. Внешне посмотрели, что работает и помогает в учебном процессе, отлично поставили и на мусорку.


    Согласен.


    Согласен. Там много чего еще передать можно, чтобы нафиг сломать все на свете.

    Согласен.

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

    Есть и прекрасно работает. http://www.php.net/manual/ru/control-structures.switch.php

    Да, это первое00, что глаз замазолило :) Но повторюсь, это просто на уровне школьной поделки для получения заветных корочек, логика и код не претендуют вообще ни на что, лишь бы работали.
     
  21. Serge

    Serge Ословед

    Репутация:
    13.474.289
    Serge, 23 янв 2013
    В его коде нет. Можно без дефолта, но считается признаком плохого кодинга.
    Это понятно, но мне кажется отношение к работе формируется на начальной стадии. Работа на о******сь не есть гут.
     
Загрузка...