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

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

  • XoxMa

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

    Spritz 16 февраля 2008 г. 19: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['myusername']))
       {
       header ("Location: index.php?page=account");
       }
    else {
       echo "

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

    ";
    }
       }

       function true()
       {
       session_start();

    // if(!session_is_registered(myusername)) {

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

       function check()
       {
    require_once ("config.php");

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

    session_start();

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

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

    $sql="SELECT * FROM $table WHERE username='$myusername' and password='$mypassword'";
    $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 "login_success.php"
    // session_register("myusername");
    // session_register("mypassword");
    $_SESSION['myusername'] = "$myusername";
    $_SESSION['mypassword'] = "$mypassword";
    header("location:index.php?page=true");
    }
    else {
    echo "неправильный юзер или пароль";
    }
       }

       function account()
       {
       session_start();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    switch($_POST['page'])
    // switch(page)
    {
    case "true":
    true();
    break;
    ….
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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