|
|
|
| Здравствуйте, прошу помочь разобраться в проблеме:
Есть 2 файла
index.php
saveuser.php
index.php
<form action="saveuser.php" method="post">
<p>
<label for="login">Ваш логин:<br></label>
<input name="login" id="login" type="text"">
</p>
<p>
<label for="password">Ваш пароль:<br></label>
<input name="password" id="password" type="password">
</p>
<p>
<input type="submit" name="submit" value="Зарегистрироваться">
</p></form>
|
файл saveuser.php
<?php
if (isset($_POST['login'])) { $login = $_POST['login'];}
if (isset($_POST['password'])) { $password=$_POST['password'];}
$error=array(); //в массив собираются все ошибки
if (empty($login)) {$error[]="Вы не ввели логин";}
if (empty($password)) {$error[]="Вы не ввели пароль";}
$login = htmlspecialchars(stripslashes($login));
$password = htmlspecialchars(stripslashes($password));
$db = mysql_connect ("localhost","mysqluser","mysqlpass");
mysql_select_db ("mysqlbase",$db);
$result = mysql_query("SELECT id FROM users WHERE login='".$login."'", $db);
$myrow = mysql_fetch_array($result);
if (!empty($myrow['id'])) {
($error[]="такой логин уже занят");
};
if (count($error)==0) {
$result2 = mysql_query ("INSERT INTO users (login,password) VALUES(".$login.", ".$password.")");}
else {
foreach($error as $value) {
echo "Ошибка: ".$value."<br>";
}
}
?>
|
есть пользователь mysqluser с паролем mysqlpass
Есть база mysqlbase
в ней таблица users
Суть проблемы:
не заносит в базу нужные записи. если перед "if (count($error)==0) { ... .... " вставить echo $login.$password, то выводит логин и пароль, т.е. пустых переменных нет.
count($error) равен нулю. т.е. ошибок тоже нет.
но в базу записи не заносятся.
Почему не заносятся записи?
можно ли проще проверить, существует ли такой логин в базе или нет?
Заранее спасибо за помощь. | |
|
|
|
|
|
|
|
для: Flok
(12.10.2009 в 16:29)
| | Я бы вам предложил делать так:
<?php
$db = mysql_connect ("localhost","mysqluser","mysqlpass");
mysql_select_db ("mysqlbase",$db);
$error = array();
if (!empty ( $_POST['login'] )) {
$error[] = "Вы не ввели логин";
} else {
$login = mysql_real_escape_string( $_POST['login'] );
}
if (!empty ( $_POST['password'] )) {
$error[] = "Вы не ввели пароль";
} else {
$login = mysql_real_escape_string( $_POST['password'] );
}
$result = mysql_query("SELECT id FROM users WHERE login='".$login."'", $db);
if (@mysql_num_rows( $result ) > 0) {
$error[] = "такой логин уже занят";
}
if (empty($error)) {
$result2 = mysql_query ("INSERT INTO users (login,password) VALUES(".$login.", ".$password.")");
} else {
foreach($error as $value) {
echo "Ошибка: ".$value."<br>";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: neadekvat
(12.10.2009 в 16:44)
| | В Вашем коде нашел пару ошибок (логин к паролю приравниваете, если логин не пустой, то выдаём ошибку "вы не ввели пароль")
Но не в этом суть, скрипт тоже не работал.
Понял, что ошибка явно не в логике. Благодаря Вам, стал копать дальше и нашел ошибку, она была в синтаксисе sql запроса. Переменные были без кавычек. С кавычками всё прошло на ура.
Спасибо за помощь)
P.s. Извините, что со всякими пустяками на форум полез. Просто 2 дня сидел, не мог найти ошибку.
Спасибо за помощь
p.p.s. о функции mysql_num_rows не знал. Спасибо, что показали. | |
|
|
|
|
|
|
|
для: Flok
(12.10.2009 в 16:59)
| | Еще обратите внимание на функцию mysql_insert_id() | |
|
|
|