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

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

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

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Star_s проверьте еще раз как первый так и второй ваши варианты, чудес, знаете ли, не бывает. Куда именно вы дописали код? Почему вы вписали текст "Error: '".mysql_error()."'"; а выводится "E:"? Вряд ли дело в этом, но попробуйте mysql_error($conn); Плюс попробуйте вывести какого типа переменная $r: var_dump($r);
     
    _________________________
    1 person likes this.
  2. Star_s

    Star_s New Member

    Joined:
    4 Feb 2010
    Messages:
    24
    Likes Received:
    2
    Reputations:
    0
    вписал в фунуцию querry() сюда:
    PHP:
    ...
    if( 
    $select == )
    {
        
    $ar mysql_affected_rows($r);
        echo 
    "Err: '".mysql_error($conn)."'";
        
    mysql_close($conn);
        return 
    $ar;
    }
    ...
    var_dump($r):
    И вот, что странно - решил проверить что возвращает функция mysql_query($querry, $conn) - дописал:
    PHP:
    ...
    $r mysql_query($querry$conn);
    var_dump($r);
    это в коде функции querry.
    И оказывается, mysql_query возвращает bool(true), а ведь в документации написано:
    то есть она должна возвращать ресурс.
    но, начав читать дальше, я узнал что
    Ясно. Но как тогда пользоваться mysql_affected_rows(, если ей в качестве параметра нужно указывать resource link_identifier, а не bool?

    Вот что ещё в доке написано:
    Почему-то кажется, что у меня выскакивает ошибка именно поэтому.
    Что такое транзакция и что такое подтверждение? Знающие люди, объясните пожалуйста!
     
  3. Star_s

    Star_s New Member

    Joined:
    4 Feb 2010
    Messages:
    24
    Likes Received:
    2
    Reputations:
    0
    Я всё понял! Ошибка выскакивает и в том и в другом случае, просто в первом случае была проверка была такая (сразу редирект и ошибку не видно):
    PHP:
    if( ($r querry('INSERT INTO `testtable` VALUES (222, "'.$title.'", "'.$text.'")'0)) == -)
        
    $content .= "\t\t\tОшибка в базе данных.";
    else
        
    header('Location: /admin/?module=papers');
    То есть, я проверял, не вернула ли функция mysql_affected_rows() значение -1 (что означает, что запрос был неудачным). Но запрос был удачным и она возвращала FALSE, т.к. от mysql_query ей в качестве параметра передавался не указатель на ресурс, а TRUE.

    И если запрос с INSERT, то mysql_query будет всегда возвращать только TRUE или FALSE, а не указатель на ресурс.

    Потому что всегда изменяется (добавляется) только одна строка! Можно только узнать удачный был запрос или нет!
     
    #16143 Star_s, 10 Aug 2010
    Last edited: 10 Aug 2010
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Star_s с помощью одного INSERT можно добавлять произвольное количество строк. Все, я увидел, где у вас ошибка. http://php.net/mysql_affected_rows - читаем какой параметр принимает функция. Вы передаете ей результат функции mysql_query, а функция принимает указатель на _соединение_, а не на ресурс. То есть должно быть:
    PHP:
    $ar mysql_affected_rows($conn);
    Функция mysql_affected_rows возвращала False не потому, что запрос удачен, а потому что передаваемый параметр ошибочен, возбуждалась ошибка и функция возвращала False.
     
    _________________________
  5. Star_s

    Star_s New Member

    Joined:
    4 Feb 2010
    Messages:
    24
    Likes Received:
    2
    Reputations:
    0
    Gifts, точно, спасибо! Вот я запарился. Всё от невнимательности. Жаль нормально плюсануть не могу
     
    1 person likes this.
  6. restart_05

    restart_05 Member

    Joined:
    5 May 2009
    Messages:
    164
    Likes Received:
    6
    Reputations:
    0
    Подскажите легкий способ генерации ключа и проверки его в php коде.
     
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    restart_05 функция gen - генерирует ключ для заданного логина, функция check - проверяет ключ данному логину и возвращает True - если ключ правилен, и False - в другом случае. Переменная $rand_str - произвольная длинная строка для обеспечения безопасности генератора
    PHP:
    $rand_str '2jt9vjs045@_u8j%^E#smv889475^%';
    function 
    gen($login)
    {
    global 
    $rand_str;
    for (
    $i=0;$i<7;$i++) $login md5($rand_str.$login,$i 2);
    return 
    md5($login);
    }
    function 
    check($login$key)
    {
    global 
    $rand_str;
    for (
    $i=0;$i<7;$i++) $login md5($rand_str.$login,$i 2);
    if (
    md5($login)===$key) return True;
    return 
    false;
    }
     
    _________________________
  8. restart_05

    restart_05 Member

    Joined:
    5 May 2009
    Messages:
    164
    Likes Received:
    6
    Reputations:
    0
    Мне нужно генерировать его для домена. Возможно ли получать ключ в формате xxxx-xxxx-xxxx-xxxx.
     
    #16148 restart_05, 10 Aug 2010
    Last edited: 10 Aug 2010
  9. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    restart_05 Если хотите продавать свой скрипт и выдавать лицензии на домен - то ionCube, без внешних модулей это будет трата времени.

    И не наглейте, "подскажите" и "сделайте все вместо меня, со свистелками и прочим, как мне надо" - на античате прокатывает редко
     
    _________________________
  10. restart_05

    restart_05 Member

    Joined:
    5 May 2009
    Messages:
    164
    Likes Received:
    6
    Reputations:
    0
    Я же не говорю сделайте, подталкните на мысль, дальше я сам. Мне просто нужно получать ключ в формате xxxx-xxxx-xxxx-xxxx.
     
  11. OSW

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

    Joined:
    12 Jul 2007
    Messages:
    325
    Likes Received:
    56
    Reputations:
    7
    ну попробуй вместо переменной $login использовать 4 переменные и выводить их в том формате, какой тебе нужен. Основную мысль тебе подсказали - экспериментируй.
     
  12. restart_05

    restart_05 Member

    Joined:
    5 May 2009
    Messages:
    164
    Likes Received:
    6
    Reputations:
    0
    И что нового ты открыл мне ???
    Выводи в том формате в каком тебе нужно )) Я и спрашиваю как мне вывести...
     
    #16152 restart_05, 10 Aug 2010
    Last edited: 10 Aug 2010
  13. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    П****ц, программисты.
    explode() ?
    for () ?
    while() ?
    preg_match() ?
    Мало ф-ций и конструкций языка?

    1.Можно разделить explode();
    2.Можно в цикле обойти и пихать нужное кол-во символов в массив.
    3.Можно с регекспами поработать, только в данном случае с експлоде() будет легче. Например, делаешь разделитель и все.
    Домен узнаешь через parse_url(); => host
    Или через те же регулярки.


    http://php.net/manual/en/function.parse-url.php

    // Gifts: здесь не матерятся
     
    #16153 .::f-duck::., 10 Aug 2010
    Last edited by a moderator: 10 Aug 2010
  14. restart_05

    restart_05 Member

    Joined:
    5 May 2009
    Messages:
    164
    Likes Received:
    6
    Reputations:
    0
    strtolower($_SERVER['HTTP_HOST'])
     
  15. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    руками, используя интерпретатор.
    PHP:
    $text '1234567890ABCDEF';
    echo 
    implode('-',str_split($text,4));
    Моя функция выводит 32 символа, дарю еще одну функцию http://php.net/substr Теперь у вас есть все что вам нужно
     
    _________________________
  16. restart_05

    restart_05 Member

    Joined:
    5 May 2009
    Messages:
    164
    Likes Received:
    6
    Reputations:
    0
    ок Спасибо!
     
  17. GrinGoO

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

    Joined:
    1 Jul 2008
    Messages:
    98
    Likes Received:
    95
    Reputations:
    -1
    Есть файл вида login:pass:email . Нужно оставить вида login:pass , Как сделать? Знаю, что можно использовать explode(), но не могу допереть что то как это всё в цикл запихнуть) Напишите код плиз) Чтобы на выходе новый файл был.
     
  18. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    PHP:
    preg_replace("#(.+?):(.+?):(.+?)#im","$matches[1]:$matches[2]",$login_pass_email,$matches);
    либо
    PHP:
    //$array - массив с login:pass:email
    foreach($array as $key => $value)
     {
       list(
    $login,$pass,$email) = explode(:,$value);
       echo 
    "$login : $pass";
     }
     
    #16158 SHiNiGaMi, 10 Aug 2010
    Last edited: 10 Aug 2010
    1 person likes this.
  19. GrinGoO

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

    Joined:
    1 Jul 2008
    Messages:
    98
    Likes Received:
    95
    Reputations:
    -1
    Спасибо огромное
     
  20. M@rkus

    M@rkus Banned

    Joined:
    25 Jul 2010
    Messages:
    43
    Likes Received:
    5
    Reputations:
    0
    PHP:
    <?
     
    $x = @file_get_contents('file.txt');
     
    $x explode("\n"$x);
     foreach(
    $x as $v
    {
     
    $s explode(":"$v);
     @
    file_put_contents('out.txt'$s[0] . $s[1] . "\r\n"FILE_APPEND);
    }
    #если нужно, чтобы в этот файл писалось убираем append и пишем изначальное имя file.txt
    ?>
     
    #16160 M@rkus, 10 Aug 2010
    Last edited: 10 Aug 2010
Thread Status:
Not open for further replies.