Начал делать форму восстановленияпароля. Ну я как бы в php новичок и мало понимаю. Ну крч проблема такая. Я написал весь php код и когда загружаю сайт, мне пишет " No database selected ". Хотя я указал где моя база командой - PHP: require "db.php"; Могу еще и скрин дать: Так вот, не знаю почему так, скорее всего что-то не так в коде. Вот мой код : reminder.php ( тут форма и php скрипты восстановления пароля ) PHP: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <head> <title>Восстановление пароля</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <link rel="shortcut icon" href="images/siteico0.ico" type="image/x-icon" /> <style type="text/css" media="all"> * { margin: 0; padding: 0; } body {background: #fAfAfA; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px;} img {border:none;} #conteiner {width: 400px; margin: 7em auto;} #conteiner .loform { padding: 16px 16px 16px 16px; font-weight: normal; -moz-border-radius: 11px; -khtml-border-radius: 11px; -webkit-border-radius: 11px; border-radius: 5px; background: #fff; border: 1px solid #e5e5e5; -moz-box-shadow: rgba(200,200,200,1) 0 4px 18px; -webkit-box-shadow: rgba(200,200,200,1) 0 4px 18px; -khtml-box-shadow: rgba(200,200,200,1) 0 4px 18px; box-shadow: rgba(200,200,200,1) 0 4px 18px; } #conteiner .mess { margin-bottom: 10px; padding: 10px; font-weight: normal; -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; border: 1px solid; -moz-box-shadow: rgba(200,200,200,1) 0 4px 18px; -webkit-box-shadow: rgba(200,200,200,1) 0 4px 18px; -khtml-box-shadow: rgba(200,200,200,1) 0 4px 18px; box-shadow: rgba(200,200,200,1) 0 4px 18px; color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; } #conteiner .loform p {color:#808080; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:14px; margin:5px;} #conteiner .loform input {background:#fafafa; border:1px solid #cccccc; color:#666666; padding:4px; width:98%; font-size:25px; margin-bottom:20px;} #conteiner .loform input.submit {margin-top:-16px; width:74px; height:64px; border: 1 px; text-align:right; vertical-align:top;} #conteiner .loform a {color: #bcbcbc; text-decoration: none;} #conteiner .loform a:hover {color:#d7722f;} #conteiner .logo {text-align:center; padding-bottom:20px;} </style> </head> <body> <div id="conteiner"> <div class="logo"> <p><strong>Восстановление пароля</strong></p> </div> <div class="loform"> <form name="form1" method="post" action="reminder.php"> <p>Логин <input ype="text" name="username" size="40" /></p> <p> <input type="submit" value="востановить" size="40" name="go"> </p> </form> </div> </div> </body> </html> <?php //подключаем базу require "db.php"; $login = mysql_real_escape_string($_POST['login']); $password = mysql_real_escape_string($_POST['password']); $email = mysql_real_escape_string($_POST['email']); // проверяем, если юзер в таблице с таким же логином $query = "SELECT `id` FROM `users` WHERE `login`='{$login}' LIMIT 1"; $sql = mysql_query($query) or die(mysql_error()); if (mysql_num_rows($sql)==1) { //если есть //генерируем пароль $simvols = array ("0","1","2","3","4","5","6","7","8","9", "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"); for ($key = 0; $key < 6; $key++) { shuffle ($simvols); $string = $string.$simvols[1]; } //перегоняем в md5 хэш $pass = md5(md5($string)); //переписываем пороль в базе уже хэшированый $query = "UPDATE `users` SET `password`='{$pass}' WHERE `login`='{$login}' "; $sql = mysql_query($query) or die(mysql_error()); //получаем мыло из базы для нашего пользователя $query = "SELECT `email` FROM `users` WHERE `login`='{$login}' LIMIT 1"; $sql = mysql_query($query) or die(mysql_error()); $row = mysql_fetch_assoc($sql); $mail = $row['email']; //шлём пороль на это мыло mail($mail, "Запрос на востонавление пороля", "Здравствуйте $login ваш новый пороль : $string"); } ?> db.php ( тут подключение к базе. ) PHP: <?php require "libs/rb.php"; R::setup( 'mysql:host=localhost;dbname=pr2', 'root', '' ); //session_start(); ?>
Это ты так указал базу данных? No database selected - Не выбрана база данных. Просто укажи в функции подключения четвёртым параметром имя базы данных mysql --- Добавлено --- Или, как вариант так: https://php.ru/manual/mysqli.select-db.html
Но в других кодах, у меня так указано. Ну например код с регистрацией : PHP: <?php session_start(); require "db.php"; $data = $_POST; if( isset($data['do_signup'])) { // здесь регистрируем $errors = array(); if( trim($data['login']) == '' ) { $errors[] = 'Введите логин!'; } if( trim($data['email']) == '' ) { $errors[] = 'Введите почту!'; } if( ($data['password']) == '' ) { $errors[] = 'Введите пароль!'; } if( $data['password_2'] != $data['password'] ) { $errors[] = 'Повторный пароль, введён не верно!'; } if(R::count('users', "Login = ?", array($data['login'])) > 0 ) { $errors[] = 'Пользователь с таким логином уже зарегестрированый'; } if(R::count('users', "email = ?", array($data['email'])) > 0 ) { $errors[] = 'Пользователь с такой почтой уже зарегестрированый'; } if( empty($errors) ) { // всё хорошо, регистрируем $user = R::dispense('users'); $user->login = $data['login']; $user->email = $data['email']; $user->password = md5($data['password']); R::store($user); echo '<div style="color: green;"> Вы успешно зарегестрировались!</div>'; echo '<div style="color: green;">Можете перейти на <a href="index.php">Главную</a> Страницу'; }else { echo '<div style="color: red;">'.array_shift($errors).'</div><hr>'; } } ?> <form action="signup.php" method="POST"> <p> <p><strong>Логин</strong>:</p> <input type="text" name="login" value="<?php echo @$data['login']; ?>"> </p> <p> <p><strong>Почта</strong>:</p> <input type="email" name="email" value="<?php echo @$data['email']; ?>"> </p> <p> <p><strong>Пароль</strong>:</p> <input type="password" name="password" value="<?php echo @$data['password']; ?>"> </p> <p> <p><strong>Повторите пароль</strong>:</p> <input type="password" name="password_2" value="<?php echo @$data['password_2']; ?>"> </p> <p> <button type="submit" name="do_signup">Зарегистрироваться</button> </p> </form>
Нет, друг мой, функция* require указывает путь к подключаемому файлу. А в файле db.php уже есть функция, которая, собственно и подключается к БД. Вот туда и надо четвёртым параметром вписать название БД. https://php.ru/manual/function.require.html https://php.ru/manual/function.mysqli-connect.html --- Добавлено --- Неправильно выразился, в функцию require мы передаём путь к файлу, и она его подключает.
Ну я попробовал там написать путь к базе, но всё ровно не находит. PHP: <?php //подключаем базу $mysqli = new mysqli("localhost", "root", "", "pr2"); $login = mysql_real_escape_string($_POST['login']); $password = mysql_real_escape_string($_POST['password']); $email = mysql_real_escape_string($_POST['email']);
Да, уверен, у меня же и в db.php указано правильно. Еще пробовал команды : PHP: $dbHost='localhost';// чаще всего это так, но иногда требуется прописать ip адрес базы данных $dbName='mybase';// название вашей базы $dbUser='myuser';// пользователь базы данных $dbPass='mypassword';// пароль пользователя PHP: $myConnect = mysql_connect($dbHost,$dbUser,$dbPass)); mysql_select_db($dbName,$myConnect); И всё ровно не находит. Я может не там пишу, не знаю...
Ок. Тогда убери выбор БД, и после подключения напиши следующее, и покажи выхлоп: PHP: $q = mysql_query ("SHOW DATABASES"); while ($res = mysql_fetch_assoc ($q)) { print_r ($res); echo "<br>"; } die (); --- Добавлено --- Может уберёшь вторую закрывающую скобку?
Это надо было писать в reminder.php ? Если да, так вот что написало : Array ( [Database] => information_schema ) Вот, если надо что я написал : PHP: <?php //подключаем базу $dbHost='localhost';// чаще всего это так, но иногда требуется прописать ip адрес базы данных $dbName='pr2';// название вашей базы $dbUser='root';// пользователь базы данных $dbPass='';// пароль пользователя $q = mysql_query ("SHOW DATABASES"); while ($res = mysql_fetch_assoc ($q)) { print_r ($res); echo "<br>"; } die (); mysql_select_db($p2,$myConnect); $login = mysql_real_escape_string($_POST['login']); $password = mysql_real_escape_string($_POST['password']); $email = mysql_real_escape_string($_POST['email']); // проверяем, если юзер в таблице с таким же логином $query = "SELECT `id` FROM `users` WHERE `login`='{$login}' LIMIT 1"; $sql = mysql_query($query) or die(mysql_error()); if (mysql_num_rows($sql)==1) { //если есть //генерируем пароль $simvols = array ("0","1","2","3","4","5","6","7","8","9", "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"); for ($key = 0; $key < 6; $key++) { shuffle ($simvols); $string = $string.$simvols[1]; } //перегоняем в md5 хэш $pass = md5(md5($string)); //переписываем пороль в базе уже хэшированый $query = "UPDATE `users` SET `password`='{$pass}' WHERE `login`='{$login}' "; $sql = mysql_query($query) or die(mysql_error()); //получаем мыло из базы для нашего пользователя $query = "SELECT `email` FROM `users` WHERE `login`='{$login}' LIMIT 1"; $sql = mysql_query($query) or die(mysql_error()); $row = mysql_fetch_assoc($sql); $mail = $row['email']; //шлём пороль на это мыло mail($mail, "Запрос на востонавление пороля", "Здравствуйте $login ваш новый пороль : $string"); } ?>
А ты точно туда подключаешся? У тебя только 1 БД на локалхосте, если верить выхлопу SHOW DATABASES, и она называется "information_schema". Может я чего не знаю. ХЗ.
А где подключение? --- Добавлено --- А, всё, понял --- Добавлено --- А print_r($q) после запроса что выдаст?
Если так надо было, PHP: $q = mysql_query ("SHOW DATABASES"); while ($res = mysql_fetch_assoc ($q)) { print_r($q); echo "<br>"; } die (); Так выдаёт - Resource id #4
Как? Только это? А где массив, точнее объект? А var_dump($q)? --- Добавлено --- Только не в while, а после запроса сразу
так ? PHP: $q = mysql_query ("SHOW DATABASES"); var_dump($q); while ($res = mysql_fetch_assoc ($q)) { print_r($q); echo "<br>"; } die ();
код у меня такой : PHP: <?php //подключаем базу $dbHost='localhost';// чаще всего это так, но иногда требуется прописать ip адрес базы данных $dbName='pr2';// название вашей базы $dbUser='root';// пользователь базы данных $dbPass='';// пароль пользователя $q = mysql_query ("SHOW DATABASES"); var_dump($q); while ($res = mysql_fetch_assoc ($q)) { print_r($q); echo "<br>"; } die (); $login = mysql_real_escape_string($_POST['login']); $password = mysql_real_escape_string($_POST['password']); $email = mysql_real_escape_string($_POST['email']); // проверяем, если юзер в таблице с таким же логином $query = "SELECT `id` FROM `users` WHERE `login`='{$login}' LIMIT 1"; $sql = mysql_query($query) or die(mysql_error()); if (mysql_num_rows($sql)==1) { //если есть //генерируем пароль $simvols = array ("0","1","2","3","4","5","6","7","8","9", "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"); for ($key = 0; $key < 6; $key++) { shuffle ($simvols); $string = $string.$simvols[1]; } //перегоняем в md5 хэш $pass = md5(md5($string)); //переписываем пороль в базе уже хэшированый $query = "UPDATE `users` SET `password`='{$pass}' WHERE `login`='{$login}' "; $sql = mysql_query($query) or die(mysql_error()); //получаем мыло из базы для нашего пользователя $query = "SELECT `email` FROM `users` WHERE `login`='{$login}' LIMIT 1"; $sql = mysql_query($query) or die(mysql_error()); $row = mysql_fetch_assoc($sql); $mail = $row['email']; //шлём пороль на это мыло mail($mail, "Запрос на востонавление пороля", "Здравствуйте $login ваш новый пороль : $string"); } ?> Ошибка на сайте такая : resource(4) of type (mysql result) Resource id #4
Ну вроде как, 4 базы, или что. Я не знаю, честно, почему так. Может быть дело в устаревшем драйвере,который не работает в новых версиях php) Попробуй заменить mysql на mysqli.: PHP: $db = mysqli_connect ($dbHost, $dbUser, $dbPass, $dbName); $q = $db->query ("SHOW DATABASES"); while ($res = $q->fetch_assoc()) { var_dump ($res); echo "<br>"; }
Вот так? PHP: <?php $db = mysqli_connect ($localhost, $root, $, $pr2); $q = $db->query ("SHOW DATABASES"); while ($res = $q->fetch_assoc()) { var_dump ($res); echo "<br>"; } $login = mysql_real_escape_string($_POST['login']); $password = mysql_real_escape_string($_POST['password']); $email = mysql_real_escape_string($_POST['email']); // проверяем, если юзер в таблице с таким же логином $query = "SELECT `id` FROM `users` WHERE `login`='{$login}' LIMIT 1"; $sql = mysql_query($query) or die(mysql_error()); if (mysql_num_rows($sql)==1) { //если есть //генерируем пароль $simvols = array ("0","1","2","3","4","5","6","7","8","9", "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"); for ($key = 0; $key < 6; $key++) { shuffle ($simvols); $string = $string.$simvols[1]; } //перегоняем в md5 хэш $pass = md5(md5($string)); //переписываем пороль в базе уже хэшированый $query = "UPDATE `users` SET `password`='{$pass}' WHERE `login`='{$login}' "; $sql = mysql_query($query) or die(mysql_error()); //получаем мыло из базы для нашего пользователя $query = "SELECT `email` FROM `users` WHERE `login`='{$login}' LIMIT 1"; $sql = mysql_query($query) or die(mysql_error()); $row = mysql_fetch_assoc($sql); $mail = $row['email']; //шлём пороль на это мыло mail($mail, "Запрос на востонавление пороля", "Здравствуйте $login ваш новый пороль : $string"); } ?>