ФорумПрограммированиеPHP для идиотов → Помогите найти ошибку в switch

Помогите найти ошибку в switch

  • XoxMa

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 16 февраля 2008 г. 11:33

    Всем привет,

    Помогите мне найти ошибку! Когда я загружаю index.php, то страница долго загружается и пишет, что её невозможно отобразить.
    Думаю, тут будет понятно, что в config.php хранится только несколько переменных о бд. Этот скрипт предназначен для регистрации пользователей, вход, выход..


    <?php

    switch(page)
    {
       case true:
       true();
       break;

       case check:
       check();
       break;

       case account:
       account();
       break;

       case logout:
       logout();
       break;

       default:
       login();
    }

       function login()
       {
       session_start();

    if (isset($_SESSION[&#39;myusername&#39;]))
       {
       header (&quot;Location: index.php?page=account&quot;);
       }
    else {
       echo &quot;

    <html><body>
    <table width=&#39;300&#39; border=&#39;0&#39; align=&#39;center&#39; cellpadding=&#39;0&#39; cellspacing=&#39;1&#39; bgcolor=&#39;#CCCCCC&#39;>
    <tr>
    <form name=&#39;form1&#39; method=&#39;post&#39; action=&#39;index.php?page=check&#39;>
    <td>
    <table width=&#39;100%&#39; border=&#39;0&#39; cellpadding=&#39;3&#39; cellspacing=&#39;1&#39; bgcolor=&#39;#FFFFFF&#39;>
    <tr>
    <td colspan=&#39;3&#39;><strong>Member Login</strong>
    </td>
    </tr>
    <tr>
    <td width=&#39;78&#39;>Username</td>
    <td width=&#39;6&#39;>:</td>
    <td width=&#39;294&#39;><input name=&#39;myusername&#39; type=&#39;text&#39; id=&#39;myusername&#39;></td>
    </tr>
    <tr>
    <td>Password</td>
    <td>:</td>
    <td><input name=&#39;mypassword&#39; type=&#39;text&#39; id=&#39;mypassword&#39;></td>
    </tr>
    <tr>
    <td> </td>
    <td> </td>
    <td><input type=&#39;submit&#39; name=&#39;Submit&#39; value=&#39;Login&#39;></td>
    </tr>
    </table>
    </td>
    </form>
    </tr>
    </table>
    </body></html>

    &quot;;
    }
       }

       function true()
       {
       session_start();

    // if(!session_is_registered(myusername)) {

    if (!isset($_SESSION[&#39;myusername&#39;])) {
    header(&quot;location:index.php&quot;);
    }
       else {
       echo &#39;вы успешно зашли как &#39;.$_SESSION[&#39;myusername&#39;];
    //    $usercookie = $_SESSION[&#39;myusername&#39;];
    //    setcookie(&quot;myusername&quot;, $usercookie, time() + 600);
    }
       }

       function check()
       {
    require_once (&quot;config.php&quot;);

    // Connect to server and select databse.
    mysql_connect(&quot;$host&quot;, &quot;$username&quot;, &quot;$password&quot;) or die(&quot;cannot connect&quot;);
    mysql_select_db(&quot;$db_name&quot;) or die(&quot;cannot select DB&quot;);

    session_start();

    // Connect to server and select databse.
    mysql_connect(&quot;$host&quot;, &quot;$username&quot;, &quot;$password&quot;)or die(&quot;cannot connect&quot;);
    mysql_select_db(&quot;$db_name&quot;)or die(&quot;cannot select DB&quot;);

    // username and password sent from signup form
    $myusername=$_POST[&#39;myusername&#39;];
    $mypassword=$_POST[&#39;mypassword&#39;];

    $sql=&quot;SELECT * FROM $table WHERE username=&#39;$myusername&#39; and password=&#39;$mypassword&#39;&quot;;
    $result=mysql_query($sql);

    // Mysql_num_row is counting table row
    $count=mysql_num_rows($result);
    // If result matched $myusername and $mypassword, table row must be 1 row

    if ($count == 1){
    // Register $myusername, $mypassword and redirect to file &quot;login_success.php&quot;
    // session_register(&quot;myusername&quot;);
    // session_register(&quot;mypassword&quot;);
    $_SESSION[&#39;myusername&#39;] = &quot;$myusername&quot;;
    $_SESSION[&#39;mypassword&#39;] = &quot;$mypassword&quot;;
    header(&quot;location:index.php?page=true&quot;);
    }
    else {
    echo &quot;неправильный юзер или пароль&quot;;
    }
       }

       function account()
       {
       session_start();

    if (isset($_SESSION[&#39;myusername&#39;]))
       {
       echo &#39;эта инфа только для зарегиных пользователей. привет, &#39;.$_SESSION[&#39;myusername&#39;];
    }
    else {
       echo &quot;вы не зарегины&quot;;
    }
       }

       function logout()
       {
       session_start();
       session_destroy();
       echo &quot;вы вышли&quot;;
       }
    ?>
  • AlexB

    Сообщения: 4288 Репутация: N Группа: в ухо

    Spritz 16 февраля 2008 г. 11:40, спустя 7 минут 2 секунды

    Первое, что бросилось в глаза это отсутствие $ перед page и не взятые в кавычки check account и.т.д.
  • XoxMa

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 16 февраля 2008 г. 12:09, спустя 29 минут 34 секунды

    Да, я уже понял, что нужно сделать так: switch($_POST[&#39;page&#39;])
    А вот про ковычки что-то я не понял.
    Надо так написать?
      case check:
       &quot;check()&quot;;
       break;

    Но теперь просто белый экран…
  • disc

    Сообщения: ? Репутация: N Группа: Джедаи

    Spritz 16 февраля 2008 г. 12:34, спустя 24 минуты 52 секунды

    У тебя на серваке видать отображение ошибок выключено. надо так case &quot;check&quot;:
  • XoxMa

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 16 февраля 2008 г. 13:22, спустя 47 минут 36 секунд

    Хм, сделал так:

    switch($_POST[&#39;page&#39;])
    // switch(page)
    {
    case &quot;true&quot;:
    true();
    break;
    ….
    }

    Форму для входа на сайт показывает, но почему-то, когда я перехожу например на index.php?page=check, то ничего не меняется, как будто я адрес страницы я не менял, и форма остаётся на месте.
    Мне кажется, что это какой-то глюк. Кто-нибудь может это посмотреть у себя на localhost&#39;e?
  • disc

    Сообщения: ? Репутация: N Группа: Джедаи

    Spritz 16 февраля 2008 г. 13:25, спустя 3 минуты 23 секунды

    почему $_POST если ты в ссылке передаешь, значит $_GET[&#39;page&#39;]
  • XoxMa

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 16 февраля 2008 г. 13:41, спустя 15 минут 53 секунды

    Спасибо, наконец-то заработало.
  • AlexB

    Сообщения: 4288 Репутация: N Группа: в ухо

    Spritz 16 февраля 2008 г. 15:06, спустя 1 час 24 минуты 45 секунд

    Хорошо, что заработало.
    Но отображение нотисов ты бы включил что ли. Все же удобнее, когда тебе транслятор сразу о твоих ошибках рассказывает, а не коллеги по форуму.
  • kendo

    Сообщения: 446 Репутация: N Группа: Адекваты

    Spritz 17 февраля 2008 г. 3:28, спустя 12 часов 22 минуты 9 секунд

    Кстати, как вариант можно использовать функии-переменные.
    <?php
    $foo=&quot;bar&quot;;
    $foo();
    function bar() { }
    ?>
  • AlexB

    Сообщения: 4288 Репутация: N Группа: в ухо

    Spritz 17 февраля 2008 г. 4:09, спустя 41 минуту 15 секунд

    Как вариант, надо в начале добавить проверку наличия и валидности GET параметра
    $page = isset($_GET[&#39;page&#39;]) &amp;&amp; function_exist($_GET[&#39;page&#39;]) ? $_GET[&#39;page&#39;] : &#39;login&#39;;

    и заменить весь этот длинный switch на
    call_user_func($page);

Пожалуйста, авторизуйтесь, чтобы написать комментарий!