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

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

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

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

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    При "переходе" по JS-URI, на странице показывается значение, возвращенное последним выражением:
    Code:
    javascript:document.cookie
    Лучше бы он функционал написал. А ещё лучше - не занимался бы подобными разводами.
     
    1 person likes this.
  2. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    нужно реализовать капчу. вернее, передачу ее правильного значения между скриптами. я делал так.
    в начале страницы с формой
    PHP:
    <?php
        session_start
    ();
        
    session_register("pic_val");
    ?>
    потом идет
    HTML:
    <img src="pic.php">
    в pic.php рисуется капча и в ней присваивается значение сеансовой переменной $_SESSION["pic_val"] = $captcha;
    в скрипте, куда идет пользователь сравниваются значения капчи и введенное
    PHP:
     echo $_SESSION["pic_val"].$_POST["pic"]
    выводится только $_POST["pic"], т.е. сеансовой переменной значение не присваивается. как сделать, чтобы работало?
     
  3. NOmeR1

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    Начинай и регистрируй сессию в скрипте капчи.
     
    1 person likes this.
  4. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    то же самое. может в конфигах что-то подправить?
     
  5. -Hormold-

    -Hormold- Кто, если не ты?

    Joined:
    29 Sep 2007
    Messages:
    418
    Likes Received:
    290
    Reputations:
    44
    Помогите, нужен скрипт...
    Вот описание:
    Есть определённое количество очков. После скрипт считаем, если больше 50 очков он выводит скрипт по такому принципу:
    И так далее, например требования очков: 20,50,120,700,1000
     
  6. NOmeR1

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    Тогда скорее всего $captcha не определена.
     
  7. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    if(mt_rand(0,200)%5==0&&$s<50)
    в каком порядке будут выполняться действия? расставь скобки

    PHP:
    $captcha rand(10009999);
    $_SESSION["pic_val"] = $captcha;
     
  8. Noiro

    Noiro Banned

    Joined:
    1 Jan 2008
    Messages:
    47
    Likes Received:
    16
    Reputations:
    5
    Проверь наличие session_start(); во всех скриптах (оно должно быть и в pic.php и в файле с формой, до вывода каких-либо данных) и убери session_register("pic_val");
    Ну и проверить сниффером наличие айди сессии в передаваемых браузером данных, может что-то режет куки
     
    1 person likes this.
  9. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    спасибо =)) дело оказалось в session_start();
    почему можно было убрать session_register("pic_val"); ?
     
  10. Noiro

    Noiro Banned

    Joined:
    1 Jan 2008
    Messages:
    47
    Likes Received:
    16
    Reputations:
    5
    Дык оно deprecated, плюс работает только если включено register_globals что вообще идея дурная.
    http://ru2.php.net/session_register
     
    2 people like this.
  11. Meanor

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

    Joined:
    9 Sep 2007
    Messages:
    66
    Likes Received:
    9
    Reputations:
    0
    Piflit

    Не забудь кэшировать md5 значение , которое вставляешь в сессию.

    Если капча идет на регистрацию(например) , то не забудь при успешной регистранции сделать $_SESSION["pic_val"]=rand(1000,9999); т.к. если значение этой сессионной переменной не поменять, то юзер сможет регистрировать до бесконечности, вставив однажды нужный код.
     
  12. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    всмысле?..
    $_SESSION["pic_val"]=rand(1000,9999); почему-то не пашет... использовал session_destroy();

    ЗЫ какое значение у параметров функции bcmod();?
     
    #1412 Piflit, 2 Jan 2008
    Last edited: 2 Jan 2008
  13. Meanor

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

    Joined:
    9 Sep 2007
    Messages:
    66
    Likes Received:
    9
    Reputations:
    0
    В смысле, что когда рандомишь то, что будет выведенно на картинке, в соответствующую переменную сессии заносишь md5 хэш того отрандомленного числа/слова. Потом при проверке делаешь что-то вроде :
    if($_SESSION["pic_val"] == md5($_POST['capcha']) {все нормально}
    else {все плохо}
    (это для того, чтобы "злоумышленник" не брал нужный капченый код из сессии)

    А насчет session_destroy(); , это, впринципе, даже лучше... ^^

    Про bcmod()


    string bcmod ( string left_operand , string modulus )
    целый остаток от деления левого числа на правое
    PHP:
    <?php
    echo bcmod('4''2'); // -> 4=2*2+0  выведет 0
    echo bcmod('2''4'); // -> 2=4*0+2  выведет 2
    ?>
    По посту внизу:
    Скажем так, что если все делается через cookies, то хэширование обязательно, если через сессии, то просто желательно...
     
    #1413 Meanor, 2 Jan 2008
    Last edited: 2 Jan 2008
    1 person likes this.
  14. Noiro

    Noiro Banned

    Joined:
    1 Jan 2008
    Messages:
    47
    Likes Received:
    16
    Reputations:
    5
    Не сочтите за флейм, но разницы в плане "надежности" между хранением в $_SESSION самого кода и его md5 нет никакой - без шелла/инклуда/дыры-на-просмотр-произвольных-переменных на сервере с капчей пользователь содержимое $_SESSION узнать не может.
     
  15. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    у меня есть в бд таблица с полями, у которых id (клолонка типа SERIAL) имеет значения 1, 2 и 3. (3 записи). как сделать, чтобы при удалении второй записи id третьей записи менялся с 3 на 2?
     
  16. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    mysql_query("UPDATE tablica SET id=2 WHERE id=3")

    Или тебе это хочется автоматически? А зачем?
     
    1 person likes this.
  17. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    гы. конечно автоматически))
     
  18. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    Автоматически не получится. А зачем? PHP ведь все равно по порядку выдирает из базы, не зачем использовать id, пронумеруй записи при выводе
     
  19. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    ой, я синтаксиса не знаю, но там через условия то можно наверное написать
    заносишь функцию удаления в перменную, потом через if() проверяешь её на существования и в случает если она возвратит тру, в болке if {} выполняешь код от Macro =)
    Сори: если я бред пишу, но вроде так
    я пшп не знаю =(
     
  20. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    $ok = mysql_query("DELETE FROM tablica WHERE id=3");
    if ($ok) {
    mysql_query("UPDATE tablica SET id=2 WHERE id=3");
    }
    ну вот так наверное, или я чего не так понял? 0_о
     
Thread Status:
Not open for further replies.