Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выясняем не зарегистрировано ли уже это имя
 
 автор: Бамси   (27.03.2006 в 18:55)   письмо автору
 
 

Вообщем простая форма заполнения, есть графа Char nick. Скрипт должен смериться с БД и проверить, если это имя уже зарегестрировано в БД, то тогда он пишит ошибку.
Сделал как у вас в первой версии форума.

// Выясняем не зарегистрировано ли уже это имя
  $query = "select * from authors where name='".$author."';";
  $ath = mysql_query($query);
  if($ath)
  {
    $auth = mysql_fetch_array($ath);
    if(strtolower($auth['name'])==strtolower($author)) links($id_forum,"К сожалению, данное имя уже зарегистрировано. Поробуйте другое.");
  }

Но это не работает, он пишет всегда "К сожалению, данное имя уже зарегистрировано. Поробуйте другое"
Может еще какойнибуть способ?

   
 
 автор: Paxa   (27.03.2006 в 20:29)   письмо автору
 
   для: Бамси   (27.03.2006 в 18:55)
 


<?
// Выясняем не зарегистрировано ли уже это имя 
  
$sql mysql_query("select * from authors where (name='$author')"$db); 
#проверяем количество строк с name=$author если таких нет то mysql_num_rows($sql)=0
  
if(mysql_num_rows($sql)!=0){
echo
"К сожалению, данное имя уже зарегистрировано. Поробуйте другое.";
}else{
#проверяем длинну имени ну можно ещё рег выражения включить
if(strlen($avtor)>="4" && strlen($avtor)<="16"){
#если всё правильно то записываем в таблицу
$sqlmysql_query("INSERT INTO authors ( поля ) VALUES (переменные)"$db); 
echo
"Спасиба за регистрацию";
}else{
#пишем ошибку на длинну имни
echo"Имя должно бать от 4 до 16 символов";
}
}
?>

Незнаю насколько это правильно но я так обычно делаю

   
 
 автор: Бамси   (27.03.2006 в 21:59)   письмо автору
 
   для: Paxa   (27.03.2006 в 20:29)
 


<?
  $sql 
mysql_query("select * from users where (CharsNick='$CharsNick')"); 
#проверяем количество строк с name=$author если таких нет то mysql_num_rows($sql)=0 
  
if(mysql_num_rows($sql)!=0)
  {
    
$action ""
    
$error $error."<LI>Это имя уже есть в списках.\n";
  } 
?>


Теперь он добавляет всегда. Даже когда имя уже есть в списке.
В аттаче Скрипт для добавление записи, посмотрите, почему разрешает добавлять, даже когда запись уже есть.

   
 
 автор: Shorr Kan   (28.03.2006 в 00:55)   письмо автору
 
   для: Бамси   (27.03.2006 в 21:59)
 

Вы проверять-то проверяете, но выполнение - продолжаете.... даже если mysql_num_rows($sql)!=0 .

   
 
 автор: Бамси   (28.03.2006 в 01:26)   письмо автору
 
   для: Shorr Kan   (28.03.2006 в 00:55)
 

не понел, но это же работает.

  if (empty($_POST["CharsNick"])) 
  {
    $action = ""; 
    $error = $error."<LI>Вы не ввели имя вашего персонажа.\n";
  }

   
 
 автор: Бамси   (28.03.2006 в 16:37)   письмо автору
 
   для: Бамси   (28.03.2006 в 01:26)
 

Ну не понимаю я почему не работает, помогите :)

   
 
 автор: Trianon   (28.03.2006 в 17:30)   письмо автору
 
   для: Бамси   (28.03.2006 в 16:37)
 

У меня такое подозрение, что переменная CharsNick используется у Вас

$sql = mysql_query("select * from users where (CharsNick='$CharsNick')"); 

раньше чем определяется

$CharsNick = substr($_POST["CharsNick"],0,32);

   
 
 автор: Бамси   (29.03.2006 в 04:36)   письмо автору
 
   для: Trianon   (28.03.2006 в 17:30)
 

Вообщем вот что понял и в чем не могу разобраться, написал вот такой скрипт.

<?
// Выясняем не зарегистрировано ли уже это имя
  
$name "Solker";
  
$link mysql_connect("localhost""root""toor");
   
mysql_select_db("perepis"$link);
  
$sql mysql_query("select * from users where CharsNick = $name");
  echo 
"select * from users where CharsNick = '".$name."';";
  print 
"<br>";
  echo 
mysql_error();
#проверяем количество строк с CharsName=Solker если таких нет то mysql_num_rows($sql)=0
  
if(mysql_num_rows($sql)!=0){
echo 
"К сожалению, данное имя уже зарегистрировано. Поробуйте другое.";
}else{
echo 
"Это имя свободно";
}
?>

Вот что мне выводит скрипт:

select * from users where CharsNick = 'Solker';
Unknown column 'Solker' in 'where clause'
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\WebServer\WWW\test.php on line 11
Это имя свободно

Тоесть криво выполняеться запрос в SQL.
select * from users where CharsNick = 'Solker';
Не хочет выполняться не в какую, а
select * from users where CharsNick = "Solker";
Работает прекрастно.
Без кавычек кстати не работает тоже.
Дак вот мне надо что бы переменная $name отображалась с двух сторон двойными ковычками, но зделать это у меня не получаеться, т.к. он щитает кавычки частью php кода, и ввыодит сообщение о ошибки в синтаксе.
Вообщем помогите мне зделать что бы запрос выводился в виде
select * from users where CharsNick = "Solker";
А не без ковычек или с одинарными ковычками.

   
 
 автор: elenaki   (29.03.2006 в 10:24)   письмо автору
 
   для: Бамси   (29.03.2006 в 04:36)
 

$sql = mysql_query('select * from users where CharsNick ="'. $name.'"');

   
 
 автор: Trianon   (29.03.2006 в 10:59)   письмо автору
 
   для: Бамси   (29.03.2006 в 04:36)
 

Вот так писать нельзя:

  $sql = mysql_query("select * from users where CharsNick = $name"); 
  echo "select * from users where CharsNick = '".$name."';"; 

Вы печатаете (и разглядываете потом) одну строку, а исполнять пытаетесь совершенно другую.
Следует печатать и исполнять одну и ту же строку:

$query = "select * from users where CharsNick = '".$name."';";
$sql = mysql_query($query);
echo $query;


Вот тот вариант с двойными кавычками, который Вам показала elenaki:
$query = 'select * from users where CharsNick ="'. $name.'"';

Могу показать еще один.
$query = "select * from users where CharsNick =\"$name\"";

Могу показать Вам вариант с одинарными кавычками:
$query = "select * from users where CharsNick ='$name'";

И еще один с одинарными кавычками:
$query = 'select * from users where CharsNick =\''.$name.'\'';

Все эти четыре варианта - рабочие.
Работают любые кавычки - что двойные, что одинарные.

>Дак вот мне надо что бы переменная $name отображалась с
>двух сторон двойными ковычками, но зделать это у меня не
>получаеться, т.к. он щитает кавычки частью php кода, и
>ввыодит сообщение о ошибки в синтаксе.

Не надо путать кавычки обрамления строк PHP и кавычки обрамления строк MYSQL.
Последние вы должны расписать по правилам PHP как обычные символы, т.е. сменить с двойных на одинарные (или наоборот) , либо заэкранировать, если менять тип не хотите.
PHP забирает свой слой кавычек, MySQLу достается свой слой, если Вы его правильно оформили.

Теперь об отличиях двойных и одинарных кавычек. Для PHP (т.е. для наружного слоя кавычек) есть разница - В одинарных кавычках PHP не будет подставлять значения $переменных, и Вам придется сцеплять строку из кусков с помощью точек. С двойными кавычками наружного слоя в этом плане проще. Все $переменные будут подставлены.

А вот MYSQL'у совершенно пофигу, какие ему достанутся кавычки - двойные или одинарные. Он будет работать с любыми. Вообще без них он работать не будет, поскольку текст должен быть чем-то ограничен, иначе возникнет синтаксическая путаница. PHP ведь тоже без кавычек со строками грубо говоря не работает - Вы же этому не удивляетесь?

PS. Вообще-то одинарные кавычки правильно называются апострофами.
PPS. У MySQL есть еще один вид кавычек для обрамления имен таблиц и столбцов - обратные одинарные косые кавычки (кнопка на клавиатуре между Esc и Tab), которые правильно называются слабыми ударениями. Правда этот форум их корёжит, и их в здешних сообщениях можно угадывать только силой мысли. :)

   
 
 автор: Бамси   (29.03.2006 в 14:23)   письмо автору
 
   для: Trianon   (29.03.2006 в 10:59)
 

Ух.. все понял большое спасибо.

select * from users where CharsNick = "Solker"

К сожалению, данное имя уже зарегистрировано. Поробуйте другое.

Бооольшое спасибо! :) использовал (/").

   
 
 автор: Trianon   (29.03.2006 в 14:35)   письмо автору
 
   для: Бамси   (29.03.2006 в 14:23)
 

>Бооольшое спасибо! :) использовал (/").
Большое пожалуйста. Использовать (/") Вы не смогли бы.
Вероятно, Вы использовали (\"). Потому что слэши тоже бывают разные. :-/ :-| :-\ :-)

   
 
 автор: Бамси   (29.03.2006 в 15:50)   письмо автору
 
   для: Trianon   (29.03.2006 в 14:35)
 

Вообщем вот это
$sql = mysql_query("select * from users where CharsNick = \"$name\"");
:)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования