Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   No database selected (https://javascript.ru/forum/server/29044-no-database-selected.html)

Hekumok 13.06.2012 00:08

No database selected
 
Недавно начал учить php. И вот весь день сёдня мучался с php и мускулом, хотел сделать регистрацию. То одна ошибка, то другая. И теперь такая фигня, при добавлении записей в базу данных mySQL
выдает ошибку 'No database selected'...
Почему? Как это исправить?
Страница регистрации:
<html>
<head><title>Регистрация</title></head>
<body>
<h1>Регистрация аккаунта:</h1>
<form action="registration_action.php" method="POST">
Логин: <input type="text" name="Логин"/><br/><br/>
E-mail: <input type="text" name="Е-mail" /><br /><br/>
Пароль: <input type="password" name="Пароль[]"/><br/><br/>
Повторите пароль: <input type="password" name="Пароль[]"/><br/><br/>
<input type="submit" value="Регистрация" />
</form>
</body>
</html>

После регистрации:
<html><head>
<title>Регистрация</title>
<meta http-equiv="Content-Language" Content="ru">
</head><body>
<?php 
function validate($allSubmitted) {
$message = "";
$passwords = $allSubmitted["Пароль"];
$firstPass = $passwords[0];
$secondPass = $passwords[1];
$username = $allSubmitted["Логин"];
if ($firstPass != $secondPass) {
$message = $message."Неверный пароль.<br/>";
}
if (strlen($username) < 5 || strlen($username) > 25) {
$message = $message."Логин должен содержать больше 5 и меньше 25 символов.<br/>";
}
if ($message == "") {
$message = "OK";
}
return $message;
} ;
function db_connect($user='u777676273_nekit', $password='071296atikin', $db='u777676273_users') {
mysql_connect('mysql.hostinger.ru', $user, $password)
or die('Не могу подключиться к БД: ' . mysql_error());
}
if (validate($_POST) == "OK") {
echo "<p>Спасибо за регистрацию!</p>";
db_connect();
$sql = "insert into users (username, email, password) values
('".$_POST["Логин"]."', '".$_POST["Е-mail"]."',  \
 '".$passwords[0]."')";
$result = mysql_query($sql);
if ($result) {
echo "Мы вошли!";
} else {
echo "Возникли проблемы при добавлении записей в БД: ".mysql_error();
}
} else {
echo "<p>У вас при регистрации возникли проблемы:</p>";
echo validate($_POST);
echo "<p>Пожалуйста, поробуйте снова.</p>";
} ;
?>
<p>Ваши данные:</p>
<?php
foreach ($_POST as $key=>$value) {
echo "<p>".$key." = " . $value . "</p>"; 
}
$passwords = $_POST["Пароль"];
echo "Пароль = ".$passwords[0] ;
echo "<p>";
echo "Повтор пароля = ".$passwords[1];
echo "</p>";
?>
</body></html>

Hekumok 13.06.2012 12:00

что, никто не знает? =(

melky 13.06.2012 15:14

Попробуйте указывать БД при помощи mysql_select_db.

devote 13.06.2012 15:49

function db_connect( $db_host, $db_user, $db_pass, $db_name ) {

	$result = mysql_connect( $db_host, $db_user, $db_pass );

	if ( !$result ) {
		return false;
	}

	if ( !mysql_select_db( $db_name ) ) {
		return false;
	}

	return $result;
}

Hekumok 13.06.2012 18:48

Цитата:

Сообщение от devote (Сообщение 181136)
function db_connect( $db_host, $db_user, $db_pass, $db_name ) {

	$result = mysql_connect( $db_host, $db_user, $db_pass );

	if ( !$result ) {
		return false;
	}

	if ( !mysql_select_db( $db_name ) ) {
		return false;
	}

	return $result;
}

devote, а куда это вставлять или заменять? Я вабще плохо php понимаю

SkyLight 13.06.2012 19:15

Поищите похожие места у себя в коде и поймете.

devote 13.06.2012 19:18

Цитата:

Сообщение от Hekumok
devote, а куда это вставлять или заменять? Я вабще плохо php понимаю

в вашем случае строка 23-26 замените, пропишите тот же хост, логин, пароль ну и имя самой базы конечно же.

Hekumok 13.06.2012 21:55

То есть мне, тут
function db_connect( $db_host, $db_user, $db_pass, $db_name )

написать
function db_connect( $db_host='mysql.hostinger.ru', $db_user='u777676273_nekit', $db_pass='071296atikin', $db_name='u777676273_users' )

Или
function db_connect( 'mysql.hostinger.ru', 'u777676273_nekit', '071296atikin', 'u777676273_users' )

Первое или второе?

devote 13.06.2012 22:46

первое

Hekumok, я бы на вашем месте давно бы уж попробовал бы и так и сяк.. заняло бы это пару минут.

Serg_pnz 13.06.2012 22:48

Hekumok,
это пригодится, там простые функции подключения, выборки, добавления можно подсмотреть

Hekumok 14.06.2012 15:22

devote, Serg_pnz, большое спасибо =)

Hekumok 14.06.2012 16:11

блин, у мя терь пишет
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\ '')' at line 2

DooMer 14.06.2012 18:24

$sql = "insert into users (username, email, password) values
('".$_POST["Логин"]."', '".$_POST["Е-mail"]."',  \
 '".$passwords[0]."')";

Уберите слеш "\"
Должно быть так
$sql = "insert into users (username, email, password) values
('".$_POST["Логин"]."', '".$_POST["Е-mail"]."',  
 '".$passwords[0]."')";

devote 14.06.2012 18:49

должно быть вообще вот так:
$sql = "insert into `users` (`username`, `email`, `password`) values ('".
        mysql_real_escape_string( $_POST["Логин"] )."', '".
        mysql_real_escape_string( $_POST["Е-mail"] )."', '".
        mysql_real_escape_string( $passwords[0] )."')";
А без этого и на инъекцию мускуля напороться можно

Hekumok 14.06.2012 20:36

a это куда чо вставлять о.О

melky 14.06.2012 22:19

Цитата:

Сообщение от Hekumok (Сообщение 181497)
a это куда чо вставлять о.О

Вы это узнаете после первой же атаки :) и многое другое.

DooMer 15.06.2012 13:11

Ну видно же что человек начинающий, по хорошему пароль надо захешировать и посолить

Serg_pnz 15.06.2012 16:02

Hekumok, код в студию.

Это еще можно посмотреть http://dklab.ru/lib/DbSimple/manual.html
Библиотека имеет свои placeholder-ы, что очень облегчает жизнь.

Hekumok 15.06.2012 21:37

Цитата:

Сообщение от Serg_pnz (Сообщение 181656)
Hekumok, код в студию.

Вот, держите:
<html><head>
<title>Регистрация</title>
<meta http-equiv="Content-Language" Content="ru">
</head><body>
<?php 
function validate($allSubmitted) {
$message = "";
$passwords = $allSubmitted["Пароль"];
$firstPass = $passwords[0];
$secondPass = $passwords[1];
$username = $allSubmitted["Логин"];
if ($firstPass != $secondPass) {
$message = $message."Неверный пароль.<br/>";
}
if (strlen($username) < 5 || strlen($username) > 25) {
$message = $message."Логин должен содержать больше 5 и меньше 25 символов.<br/>";
}
if ($message == "") {
$message = "OK";
}
return $message;
} ;
function db_connect( $db_host='mysql.hostinger.ru', $db_user='u777676273_nekit', $db_pass='071296atikin', $db_name='u777676273_users' ) {
$result = mysql_connect( $db_host, $db_user, $db_pass );
if ( !$result ) {
return false;
}
if ( !mysql_select_db( $db_name ) ) {
return false;
}
return $result;
}
if (validate($_POST) == "OK") {
echo "<p>Спасибо за регистрацию!</p>";
db_connect();
$sql = "insert into users (username, email, password) values
('".$_POST["Логин"]."', '".$_POST["Е-mail"]."',  \
 '".$passwords[0]."')";
$result = mysql_query($sql);
if ($result) {
echo "Мы вошли!";
} else {
echo "Возникли проблемы при добавлении записей в БД: ".mysql_error();
}
} else {
echo "<p>У вас при регистрации возникли проблемы:</p>";
echo validate($_POST);
echo "<p>Пожалуйста, поробуйте снова.</p>";
} ;
?>
<p>Ваши данные:</p>
<?php
foreach ($_POST as $key=>$value) {
echo "<p>".$key." = " . $value . "</p>"; 
}
$passwords = $_POST["Пароль"];
echo "Пароль = ".$passwords[0] ;
echo "<p>";
echo "Повтор пароля = ".$passwords[1];
echo "</p>";
?>
</body></html>

Но он пишет ошибку: You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server
version for the right syntax to use near '\ '')' at
line 2

devote 15.06.2012 22:27

Hekumok,
замени строки 36-38 на вот этот код:
$sql = "insert into `users` (`username`, `email`, `password`) values ('".
        mysql_real_escape_string( $_POST["Логин"] )."', '".
        mysql_real_escape_string( $_POST["Е-mail"] )."', '".
        mysql_real_escape_string( $passwords[0] )."')";

Serg_pnz 15.06.2012 23:15

devote, +1

Hekumok, зачем заслешил одну-единственную одинарную кавычку-то? И плюс очень верное замечание про mysql_real_escape_string - никогда не доверяй данным, пришедшим от пользователя.

Hekumok 16.06.2012 09:40

devote, спасибо, получилось... только я вот зашел в БД mySQL, а там графа password пустая, почему?

devote 16.06.2012 12:13

Цитата:

Сообщение от Hekumok
только я вот зашел в БД mySQL, а там графа password пустая, почему?

может просто потому что вы ее пустую и забиваете, проверяйте переменные на наличие в них данных.

Hekumok 16.06.2012 16:34

devote, пожалуйста, помоги, я ну нифига этот php не понимаю >.<
Вот страница регистрации:
<html>
<head><title>Регистрация</title></head>
<body>
<h1>Регистрация аккаунта:</h1>
<form action="registration_action.php" method="POST">
Логин: <input type="text" name="Логин"/><br/><br/>
E-mail: <input type="text" name="Е-mail" /><br /><br/>
Пароль: <input type="password" name="Пароль[]"/><br/><br/>
Повторите пароль: <input type="password" name="Пароль[]"/><br/><br/>
<input type="submit" value="Регистрация" />
</form>
</body>
</html>

Вот на эту переходит:
<html><head>
<title>Регистрация</title>
<meta http-equiv="Content-Language" Content="ru">
</head><body>
<?php 
function validate($allSubmitted) {
$message = "";
$passwords = $allSubmitted["Пароль"];
$firstPass = $passwords[0];
$secondPass = $passwords[1];
$username = $allSubmitted["Логин"];
if ($firstPass != $secondPass) {
$message = $message."Неверный повтор пароля.<br/>";
}
if (strlen($username) < 6 || strlen($username) > 25) {
$message = $message."Логин должен содержать от 6 до 25 символов.<br/>";
}
if (strlen($firstPass) < 8 || strlen($firstPass) > 30) {
$message = $message."Пароль должен содержать от 8 до 30 символов.<br/>";
}
if ($message == "") {
$message = "OK";
}
return $message;
} ;
function db_connect( $db_host='mysql.hostinger.ru', $db_user='u777676273_nekit', $db_pass='071296atikin', $db_name='u777676273_users' ) {
$result = mysql_connect( $db_host, $db_user, $db_pass );
if ( !$result ) {
return false;
}
if ( !mysql_select_db( $db_name ) ) {
return false;
}
return $result;
}
if (validate($_POST) == "OK") {
echo "<p>Спасибо за регистрацию!</p>";
db_connect();
$sql = "insert into `users` (`username`, `email`, `password`) values ('".mysql_real_escape_string( $_POST["Логин"] )."', '".mysql_real_escape_string( $_POST["Е-mail"] )."', '".mysql_real_escape_string( $passwords[0] )."')";
$result = mysql_query($sql);
if ($result) {
echo "Мы вошли!";
} else {
echo "Возникли проблемы при добавлении записей в БД: ".mysql_error();
}
} else {
echo "<p>У вас при регистрации возникли проблемы:</p>";
echo validate($_POST);
echo "<p>Пожалуйста, поробуйте снова.</p>";
} ;
?>
<p>Ваши данные:</p>
<?php
foreach ($_POST as $key=>$value) {
echo "<p>".$key." = " . $value . "</p>"; 
}
$passwords = $_POST["Пароль"];
echo "Пароль = ".$passwords[0] ;
echo "<p>";
echo "Повтор пароля = ".$passwords[1];
echo "</p>";
?>
</body></html>

И как вот сделать, чтоб пароль сохранялся в БД?
И как сделать проверку на пустую форму, т.е. чтобы проверялось - всё заполнено или нет?

devote 16.06.2012 20:01

<html>
    <head>
        <title>Регистрация</title>
    </head>
    <body>
        <h1>Регистрация аккаунта:</h1>
        <form action="registration_action.php" method="POST">
        Логин: <input type="text" name="login"/><br/><br/>
        E-mail: <input type="text" name="email" /><br /><br/>
        Пароль: <input type="password" name="password"/><br/><br/>
        Повторите пароль: <input type="password" name="confirm"/><br/><br/>
        <input type="submit" value="Регистрация" />
      </form>
   </body>
</html>


<html><head>
<title>Регистрация</title>
<meta http-equiv="Content-Language" Content="ru">
</head><body>
<?php 
function validate($allSubmitted) {

    $message = "";
    $firstPass = $allSubmitted["password"];
    $secondPass = $allSubmitted["confirm"];
    $username = $allSubmitted["login"];

    if ($firstPass != $secondPass) {
        $message .= "Неверный повтор пароля.<br/>";
    }
    if (strlen($username) < 6 || strlen($username) > 25) {
        $message .= "Логин должен содержать от 6 до 25 символов.<br/>";
    }
    if (strlen($firstPass) < 8 || strlen($firstPass) > 30) {
        $message .= "Пароль должен содержать от 8 до 30 символов.<br/>";
    }
    if ($message == "") {
        $message = "OK";
    }
    return $message;
}

function db_connect(
    $db_host='mysql.hostinger.ru', $db_user='u777676273_nekit',
    $db_pass='071296atikin', $db_name='u777676273_users' ) {

    $result = mysql_connect( $db_host, $db_user, $db_pass );
    if ( !$result ) {
        return false;
    }
    if ( !mysql_select_db( $db_name ) ) {
        return false;
    }
    return $result;
}

if (validate($_POST) == "OK") {

    echo "<p>Спасибо за регистрацию!</p>";

    db_connect();

    $sql = "insert into `users` (`username`, `email`, `password`) values ('".
        mysql_real_escape_string( $_POST["login"] )."', '".
        mysql_real_escape_string( $_POST["email"] )."', '".
        mysql_real_escape_string( $_POST["password"] )."')";

    $result = mysql_query( $sql );

    if ($result) {
        echo "Мы вошли!";
    } else {
        echo "Возникли проблемы при добавлении записей в БД: ".mysql_error();
    }
} else {
    echo "<p>У вас при регистрации возникли проблемы:</p>";
    echo validate($_POST);
    echo "<p>Пожалуйста, поробуйте снова.</p>";
}

?>
<p>Ваши данные:</p>
<?php
    $names = array(
        "login" => "Логин",
        "email" => "E-mail",
        "password" => "Пароль",
        "confirm" => "Повтор пароля"
    );
    foreach ($_POST as $key=>$value) {
        echo "<p>".$names[ $key ]." = " . $value . "</p>"; 
    }
?>
</body></html>

Hekumok 17.06.2012 10:14

devote, спасибо =)

Hekumok 17.06.2012 13:31

сцуко, блооо, я жестчайше тупанул!
Я хотел написать devote


Часовой пояс GMT +3, время: 19:20.