Я сделал небольшой сайт с тестами http://phpkurs.16mb.com На нём можно решать тесты и добавлять свои. 1) Проблема в том, что когда проверяешь ответ, то страница перезагружается и приходится листать в нужное место, что бы проверить ответ. Как сделать, что бы показался ответ, без перезагрузки или есть какой-то другой способ ? 2) Если кликнуть на ник пользователя, что бы посмотреть его тесты, а потом ещё раз на него кликнут, то получается адрес уже неверный, так как я уже нахожусь в этом месте, где надо, как это исправить? index.php PHP: <?php require_once 'functions/db.php'; require_once 'functions/sql.php'; ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="css/style.css"> </head> <body> <div class="content clearfix"> <div class="sidebar"> <?php require_once 'functions/avtorizaciya.php';?> <div class="add-test"> <?php if(!empty($_SESSION['user'])){ echo '<a href="./functions/addtest.php">Добавить тест</a>'; } ?> </div> </div> <div class="main"> <p>Последний добавленные тесты</p> <?php require_once 'tests.php'; ?> </div> </div> </body> </html> db.php PHP: <?php $host = 'localhost'; $db = 'test'; $user = 'root'; $pass = ''; $charset = 'utf8'; $dsn = "mysql:host=$host; dbname=$db;charset=$charset"; $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $pdo = new PDO($dsn, $user, $pass, $opt); sql.php PHP: <?php require_once 'db.php'; $statement = $pdo->prepare('SELECT * FROM `questions` ORDER BY id DESC'); $statement->execute(); $test = $statement->fetchAll(); addtest.php PHP: <?php session_start(); require_once 'db.php'; if(!empty($_POST['newTest'])){ if(!empty($_POST['title']) && !empty($_POST['description']) &&!empty($_POST['variant1'])&& !empty($_POST['variant2'])&& !empty($_POST['variant3'])&& !empty($_POST['answer']) ){ $addTest = 'INSERT INTO `questions` (`title`, `description`, `answer`, `variant1`, `variant2`, `variant3`, `author`) VALUES ( "' . $_POST['title'] .'", "' . $_POST['description'] . '", "' . $_POST['answer'] .'", "' . $_POST['variant1'] .'", "' . $_POST['variant2'] .'", "' . $_POST['variant3'] .'", "' . $_SESSION['user'] .'")'; $addTest = $pdo->prepare($addTest); $addTest->execute(); echo '<p>Тест Добавлен</p>'; echo '<a href="../index.php">Перейти на главную сраницу сайта</a>'; } else{ echo 'Заполните все поля'; } } ?> <head> <link rel="stylesheet" href="../css/style.css"> </head> <?php if(!empty($_SESSION['user'])){ echo <<<TEST <p>Создание теста</p> <div class="main-add-test"> <form method="POST"> <div class="clearfix"> <label for="title">Тема теста</label> <input type="text" name="title" id="title" size="50"> </div> <div class="clearfix"> <label for="description">Вопрос</label> <input type="text" name="description" id="description" size="50"> </div> <div class="clearfix"> <label>Варинты ответов</label><br> <input type="text" name="variant1" size="45"> <input type="text" name="variant2" size="45"> <input type="text" name="variant3" size="45"> </div> <div class="clearfix"> <label>Правильный ответ (в цифрах)</label><br> <input type="text" name="answer" size="30"> </div> <br> <input type="submit" value="Создать" name="newTest"> </form> </div> TEST; }?> avtorizaciya.php PHP: <?php session_start(); require_once 'db.php'; $getUsers = $pdo->prepare('SELECT * FROM `users`'); $getUsers->execute(); $showUsers = $getUsers->fetchAll(); if(empty($_SESSION['user'])){ echo <<<FORMA <form method="POST"> <label for="login">Логин<label> <input type="text" name="login" id="login"><br> <label for="password">Пароль<label> <input type="password" name="password" id="password"> <input class="btn" type="submit" name="vxod" value="Войти"> </form><br> <a href="./functions/registr.php">Зарегестрироваться</a> <br> <br> <br> <p>Что бы была возможность добавить свой тест, надо авторизироваться</p> FORMA; } function logout(){ unset($_SESSION['user']); session_destroy(); } ?> <?php if(!empty($_POST['vxod'])){ foreach($showUsers as $user){ if($_POST['login'] == $user['login'] && $_POST['password'] == $user['password']){ $_SESSION['user'] = $user['login']; header('Location: ./index.php'); } } } if(!empty($_SESSION['user'])){ echo '<div class="user">'; echo '<p>Добро пожаловать ' . $_SESSION['user'] . '<p>'; echo '<a href="?logout=exit">Выход</a>'; echo '</div>'; } if(!empty($_GET['logout']) == 'exit'){ logout(); header('Location: ./index.php'); } ?> registr.php PHP: <?php require_once 'db.php'; if(!empty($_POST['reg'])){ $addUser = 'INSERT INTO `users` (`login`, `password`, `role`) VALUES ("' . $_POST['login'] .'", "' . $_POST['password'] . '", "user")'; $addUser = $pdo->prepare($addUser); $addUser->execute(); echo '<p>Регистрация успешно завершена</p>'; echo '<a href="../index.php">Перейти на главную сраницу сайта</a>'; } else{ echo <<<REG <h3>Регистрация</h3> <form method="POST"> <label for="login">Логин<label> <input type="text" name="login" id="login"><br> <label for="password">Пароль<label> <input type="password" name="password" id="password"> <input class="btn" type="submit" name="reg" value="Зарегистрироваться"> </form> REG; } userpage.php PHP: <?php require_once 'db.php'; if(!empty($_GET['author'])){ echo 'Тесты пользователя ' . $_GET['author']; $myTest = $pdo->prepare('SELECT * FROM `questions` WHERE author=:author'); $myTest->execute([':author' => $_GET['author']]); $test = $myTest->fetchAll(); echo '<div class="private-test">'; require_once '../tests.php'; echo '<div>'; } ?> <head> <link rel="stylesheet" href="../css/style.css"> </head> tests.php PHP: <?php $i=0; foreach($test as $key){ echo '<div class="question">'; echo '<div class="header-test clearfix">'; echo '<div class="title">' . $key['title'] .'</div>'; echo '<div class="author">Тест придумал <a href="./functions/userpage.php?author='.$key['author'].' ">'. $key['author'] .'</a></div>'; echo '</div>'; echo '<div class="description">' . $key['description'] .'</div>'; echo '<p>Варианты ответов:</p>'; echo '<ol>'; echo '<li>' . $key['variant1'] .'</li>'; echo '<li>' . $key['variant2'] .'</li>'; echo '<li>' . $key['variant3'] .'</li>'; echo '</ol>'; echo "<form method='GET'> <input type='text' name='answer$i'> <input type='submit' value='Проверить'> </form>"; if(!empty($_GET['answer' .$i])){ if($_GET['answer'.$i] == $key['answer']){ echo '<span class="ok">Правильно</span>'; } else{ echo '<span class="sorry">Не правильно</span>'; } } echo '</div>'; $i++; } ?>
1) Посмотрите на ajax. Вам понравится. 2) Я не смотрел на код, но, скорее всего, Вам нужно заменить путь на абсолютный. --- Добавлено --- Либо же, можно сделать проверку (Если открыт профиль - показывать другой путь, не показывать вообще, или перезагружать страницу, или что вы там ещё сами себе придумаете)
Так почему-то не работает PHP: <a href="'.$_SERVER['DOCUMENT_ROOT'].'/functions/userpage.php?author='.$key['author'].' ">'. $key['author'] .'</a>
И ещё проблема, если решать тест из списка тестов пользователя, то показывается пустая страница, это из-за того, что нету нужного параметра GET
PHP: <a href="//'.$_SERVER['SERVER_NAME'].'/functions/userpage.php?author='.$key['author'].' ">'. $key['author'] .'</a> --- Добавлено --- Сдеайте проверку: Если открыта главная - отправлять одну форму, если профиль - другую.
С путями я разобрался, просто убрал точку в самом начале /functions/userpage.php --- Добавлено --- Если сделать вторую форму, то получится дублирование кода