За последние 24 часа нас посетили 22470 программистов и 1012 роботов. Сейчас ищут 665 программистов ...

Проблемы с сайтом

Тема в разделе "PHP для новичков", создана пользователем Dimon2x, 26 апр 2017.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Я сделал небольшой сайт с тестами http://phpkurs.16mb.com

    На нём можно решать тесты и добавлять свои.

    1) Проблема в том, что когда проверяешь ответ, то страница перезагружается и приходится листать в нужное место, что бы проверить ответ.

    Как сделать, что бы показался ответ, без перезагрузки или есть какой-то другой способ ?

    2) Если кликнуть на ник пользователя, что бы посмотреть его тесты, а потом ещё раз на него кликнут, то получается адрес уже неверный, так как я уже нахожусь в этом месте, где надо, как это исправить?

    index.php

    PHP:
    1. <?php
    2. require_once 'functions/db.php';
    3. require_once 'functions/sql.php';
    4. ?>
    5.  
    6. <!DOCTYPE html>
    7. <html>
    8. <head>
    9.     <meta charset="utf-8">
    10.      <link rel="stylesheet" href="css/style.css">
    11. </head>
    12.     <body>
    13.     <div class="content clearfix">
    14.         <div class="sidebar">
    15.             <?php require_once 'functions/avtorizaciya.php';?>
    16.            
    17.             <div class="add-test">
    18.                 <?php
    19.                 if(!empty($_SESSION['user'])){
    20.                     echo '<a href="./functions/addtest.php">Добавить тест</a>';
    21.                 }
    22.                 ?>
    23.             </div>  
    24.         </div>
    25.         <div class="main">
    26.             <p>Последний добавленные тесты</p>
    27.             <?php require_once 'tests.php'; ?>
    28.         </div>
    29.     </div>
    30.    
    31.     </body>
    32. </html>    
    db.php

    PHP:
    1. <?php
    2.  
    3. $host = 'localhost';
    4. $db = 'test';
    5. $user = 'root';
    6. $pass = '';
    7. $charset = 'utf8';
    8.  
    9. $dsn = "mysql:host=$host; dbname=$db;charset=$charset";
    10.  
    11. $opt = [
    12.     PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    13.     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    14.     PDO::ATTR_EMULATE_PREPARES   => false,
    15. ];
    16.        
    17. $pdo = new PDO($dsn, $user, $pass, $opt);
    sql.php

    PHP:
    1. <?php
    2. require_once 'db.php';
    3.  
    4. $statement = $pdo->prepare('SELECT * FROM `questions` ORDER BY id DESC');
    5. $statement->execute();
    6. $test = $statement->fetchAll();
    addtest.php

    PHP:
    1. <?php
    2.  
    3. require_once 'db.php';
    4.  
    5. if(!empty($_POST['newTest'])){
    6.     if(!empty($_POST['title']) && !empty($_POST['description']) &&!empty($_POST['variant1'])&& !empty($_POST['variant2'])&& !empty($_POST['variant3'])&& !empty($_POST['answer']) ){
    7.         $addTest = 'INSERT INTO `questions` (`title`, `description`, `answer`, `variant1`, `variant2`, `variant3`, `author`) VALUES (
    8.        "' . $_POST['title'] .'", "' . $_POST['description'] . '", "' . $_POST['answer'] .'", "' . $_POST['variant1'] .'", "' . $_POST['variant2'] .'", "' . $_POST['variant3'] .'", "' . $_SESSION['user'] .'")';
    9.         $addTest = $pdo->prepare($addTest);
    10.         $addTest->execute();
    11.    
    12.     echo '<p>Тест Добавлен</p>';
    13.     echo '<a href="../index.php">Перейти на главную сраницу сайта</a>';
    14.     }
    15.     else{
    16.         echo 'Заполните все поля';
    17.     }
    18.    
    19. }
    20.  
    21. ?>
    22.  
    23. <head>
    24.      <link rel="stylesheet" href="../css/style.css">
    25. </head>
    26.  
    27.  
    28. <?php if(!empty($_SESSION['user'])){
    29. echo <<<TEST
    30. <p>Создание теста</p>
    31.  
    32. <div class="main-add-test">
    33.     <form method="POST">
    34.         <div class="clearfix">
    35.             <label for="title">Тема теста</label>
    36.             <input type="text" name="title" id="title" size="50">
    37.         </div>
    38.         <div class="clearfix">
    39.             <label for="description">Вопрос</label>
    40.             <input type="text" name="description" id="description" size="50">
    41.         </div>
    42.        
    43.         <div class="clearfix">
    44.             <label>Варинты ответов</label><br>
    45.             <input type="text" name="variant1" size="45">
    46.             <input type="text" name="variant2" size="45">
    47.             <input type="text" name="variant3" size="45">
    48.         </div>
    49.        
    50.         <div class="clearfix">
    51.             <label>Правильный ответ (в цифрах)</label><br>
    52.             <input type="text" name="answer" size="30">
    53.         </div>
    54.         <br>
    55.     <input type="submit" value="Создать" name="newTest">
    56.     </form>
    57. </div>
    58. TEST;
    59. }?>
    avtorizaciya.php

    PHP:
    1. <?php
    2.  
    3. require_once 'db.php';
    4.  
    5. $getUsers = $pdo->prepare('SELECT * FROM `users`');
    6. $getUsers->execute();
    7.  
    8. $showUsers = $getUsers->fetchAll();
    9.  
    10. if(empty($_SESSION['user'])){
    11.  
    12. echo <<<FORMA
    13.  
    14. <form method="POST">
    15.     <label for="login">Логин<label>
    16.     <input type="text" name="login" id="login"><br>
    17.    
    18.     <label for="password">Пароль<label>
    19.     <input type="password" name="password" id="password">
    20.    
    21.     <input class="btn" type="submit" name="vxod" value="Войти">
    22. </form><br>
    23.  
    24. <a href="./functions/registr.php">Зарегестрироваться</a>
    25.  
    26. <br>
    27. <br>
    28. <br>
    29.  
    30. <p>Что бы была возможность добавить свой тест, надо авторизироваться</p>
    31.  
    32. FORMA;
    33.  
    34. }
    35.  
    36. function logout(){
    37.         unset($_SESSION['user']);
    38.         session_destroy();
    39.     }
    40.  
    41. ?>
    42.  
    43. <?php
    44.     if(!empty($_POST['vxod'])){
    45.         foreach($showUsers as $user){
    46.             if($_POST['login'] == $user['login'] && $_POST['password'] == $user['password']){
    47.                 $_SESSION['user'] = $user['login'];
    48.                 header('Location: ./index.php');
    49.             }
    50.         }
    51.        
    52.     }
    53.     if(!empty($_SESSION['user'])){
    54.         echo '<div class="user">';
    55.             echo '<p>Добро пожаловать ' . $_SESSION['user'] . '<p>';
    56.             echo '<a href="?logout=exit">Выход</a>';
    57.         echo '</div>';  
    58.     }
    59.    
    60.     if(!empty($_GET['logout']) == 'exit'){
    61.         logout();
    62.         header('Location: ./index.php');
    63.     }
    64. ?>
    registr.php


    PHP:
    1. <?php
    2. require_once 'db.php';
    3.  
    4. if(!empty($_POST['reg'])){
    5.     $addUser = 'INSERT INTO `users` (`login`, `password`, `role`) VALUES ("' . $_POST['login'] .'", "' . $_POST['password'] . '", "user")';
    6.     $addUser = $pdo->prepare($addUser);
    7.     $addUser->execute();
    8.    
    9.     echo '<p>Регистрация успешно завершена</p>';
    10.     echo '<a href="../index.php">Перейти на главную сраницу сайта</a>';
    11.  
    12. }
    13.  
    14. else{
    15.     echo <<<REG
    16.     <h3>Регистрация</h3>
    17.     <form method="POST">
    18.         <label for="login">Логин<label>
    19.         <input type="text" name="login" id="login"><br>
    20.        
    21.         <label for="password">Пароль<label>
    22.         <input type="password" name="password" id="password">
    23.        
    24.         <input class="btn" type="submit" name="reg" value="Зарегистрироваться">
    25.     </form>
    26. REG;
    27.  
    28. }
    userpage.php

    PHP:
    1. <?php
    2.  
    3. require_once 'db.php';
    4.  
    5. if(!empty($_GET['author'])){
    6.     echo 'Тесты пользователя ' . $_GET['author'];
    7.    
    8. $myTest = $pdo->prepare('SELECT * FROM `questions` WHERE author=:author');
    9. $myTest->execute([':author' => $_GET['author']]);
    10.    
    11. $test = $myTest->fetchAll();
    12.    
    13. echo '<div class="private-test">';
    14.     require_once '../tests.php';
    15. echo '<div>';
    16. }
    17.  
    18.  
    19. ?>
    20. <head>
    21.      <link rel="stylesheet" href="../css/style.css">
    22. </head>
    tests.php

    PHP:
    1.             <?php
    2.                 $i=0;
    3.                 foreach($test as $key){
    4.                     echo '<div class="question">';
    5.                         echo '<div class="header-test clearfix">';
    6.                             echo '<div class="title">' . $key['title'] .'</div>';
    7.                             echo '<div class="author">Тест придумал <a href="./functions/userpage.php?author='.$key['author'].' ">'. $key['author'] .'</a></div>';
    8.                         echo '</div>';
    9.                         echo '<div class="description">' . $key['description'] .'</div>';
    10.                        
    11.                         echo '<p>Варианты ответов:</p>';
    12.                         echo '<ol>';
    13.                             echo '<li>' . $key['variant1'] .'</li>';
    14.                             echo '<li>' . $key['variant2'] .'</li>';
    15.                             echo '<li>' . $key['variant3'] .'</li>';
    16.                         echo '</ol>';
    17.                        
    18.                         echo "<form method='GET'>
    19.                                <input type='text' name='answer$i'>
    20.                                <input type='submit' value='Проверить'>
    21.                            </form>";
    22.                            
    23.                             if(!empty($_GET['answer' .$i])){
    24.                                 if($_GET['answer'.$i] == $key['answer']){
    25.                                     echo '<span class="ok">Правильно</span>';
    26.                                 }
    27.                                 else{
    28.                                     echo '<span class="sorry">Не правильно</span>';
    29.                                 }
    30.                             }  
    31.                     echo '</div>';
    32.                     $i++;
    33.                 }
    34.             ?>
     

    Вложения:

    • sait.zip
      Размер файла:
      5,6 КБ
      Просмотров:
      0
  2. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    1) Посмотрите на ajax. Вам понравится.
    2) Я не смотрел на код, но, скорее всего, Вам нужно заменить путь на абсолютный.
    --- Добавлено ---
    Либо же, можно сделать проверку (Если открыт профиль - показывать другой путь, не показывать вообще, или перезагружать страницу, или что вы там ещё сами себе придумаете)
     
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Так почему-то не работает

    PHP:
    1. <a href="'.$_SERVER['DOCUMENT_ROOT'].'/functions/userpage.php?author='.$key['author'].' ">'. $key['author'] .'</a>
     
  4. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Попробуйте $_SERVER['SERVER_NAME'] вместо $_SERVER['DOCUMENT_ROOT']
     
  5. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    ничего не помогает
     
  6. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    И ещё проблема, если решать тест из списка тестов пользователя, то показывается пустая страница, это из-за того, что нету нужного параметра GET
     
  7. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    PHP:
    1. <a href="//'.$_SERVER['SERVER_NAME'].'/functions/userpage.php?author='.$key['author'].' ">'. $key['author'] .'</a>
    --- Добавлено ---
    Сдеайте проверку: Если открыта главная - отправлять одну форму, если профиль - другую.
     
  8. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    С путями я разобрался, просто убрал точку в самом начале /functions/userpage.php
    --- Добавлено ---
    Если сделать вторую форму, то получится дублирование кода