Black#FFFFFF
Постоялец
- Регистрация
- 19 Июл 2007
- Сообщения
- 228
- Реакции
- 172
Нет. Логика запроса немного неверна.
Во первых (из твоего запроса к мускулю
верно так:
` - вот этот знак - это "выделение" - заключение в обратную кавычку названия полей из таблицы - нужно для того, чтобы можно было "использовать" зарезервированные слова майскьюэль в названии полей таблицы
пример
Поле `text` совпадает по названию с типом данных text, но интерпритатор его будет воспринимать верно, как поле с названием `text`
' - единичная кавычка используется для явного приведения типов данных
И в твоем случае
Явно приводится к типу varchar или к тому - которым задано у тебя поле.
Ладно - далее по поводу запросов:
Вот это давай сделаем так:
Итак пару слов еще вот это || эквивалентно OR
А вот это && эквивалентно AND в логических выражениях
В книжке впринципе написано.
Что еще:
тебе совсем не обязательно в данном случае обходить все строки в цикле while у тебя всего лишь одна строка выбирается. Можно и "подсократить":
я записал как ты видешь вот так:
Ну и еще - учись делать сразу правельные вопросы - тебе какое поле нужно проверить из строки таблицы? name? (имя) вот его и выбирай
Вот так:
Учись сразу использовать именно столько ресурсов, сколько тебе нужно для выполнения конкретной задачи. А не намного больше.
Объясняю - * ты выбираешь все поля таблицы, а зачем? тебе в запросе нужно только одно. Вот его и перечисли, им и ограничься)
И еще - у тебя там не совсем верная логика выражений дальше, задумайся, исправь. А не верно вот что (допустим, пример
Это выражение значит следующее:
Если поле год пусто И (логическое И) не соответствует формату от двух до четырех цифр
А нужно бы вот так:
Если поле год пусто ИЛИ (логическое ИЛИ) не соответствует формату от двух до четырех цифр
Понимаешь разницу?)
Остальные исправления логических выражений оставляю на твою совесть.
Да, еще, почитай о тернарном операторе:
В твоих случаях при группировании скобками такого оператора и код будет компактнее да и работает он немного быстрее, чем if.
Во первых (из твоего запроса к мускулю
PHP:
`uniqueName`=`".$uniqueName."`"
PHP:
`uniqueName`='".$uniqueName."'"
пример
PHP:
`mytable`.`text`
' - единичная кавычка используется для явного приведения типов данных
И в твоем случае
PHP:
`uniqueName`='".$uniqueName."'"
Ладно - далее по поводу запросов:
PHP:
$result = mysql_query("SELECT * FROM `user` WHERE `uniqueName`=`".$uniqueName."`");
while($row == mysql_fetch_array($result,MYSQL_ASSOC)){
if($uniqueName == $row['uniqueName']){$error.='Ивени но этото пользователь уже занит!<br>';}
PHP:
function isUniqueName($name){
$reslut = false;
$r = mysql_query('SELECT COUNT(*) AS `ammount` FROM `user` WHERE `uniqueName`=\''.$name.'\'');
if($r && mysql_numrows($r)>0) {
$a = mysql_fetch_row($r); //имхо немного быстрее будет
$result = (!empty($a[0])?true:false);
}
return $result;
}
................................
//дальше так
//код функции escapedString был уже приведен мною здесь
if(isset($uniqueName)&&!empty($uniqueName)) {
$uniqueName = escapedString($uniqueName);
$uniqueName = isUniqueName($uniqueName);
};
if(!isset($uniqueName)||empty($uniqueName)||!$uniqueName||!ereg("[a-zA-Z_0-9~!@#$%^&*]{6,16}")){
$error.='Поле Логин не было заполнено. Либо не соответствует заданному формату (латиница или цифры. от трех до 16 символов.) Или же такой логин уже встречается. <br>';
}
А вот это && эквивалентно AND в логических выражениях
В книжке впринципе написано.
Что еще:
тебе совсем не обязательно в данном случае обходить все строки в цикле while у тебя всего лишь одна строка выбирается. Можно и "подсократить":
PHP:
while($row == mysql_fetch_array($result,MYSQL_ASSOC))
я записал как ты видешь вот так:
PHP:
$r = mysql_query('SELECT COUNT(*) AS `ammount` FROM `user` WHERE `uniqueName`=\''.$name.'\'');
PHP:
mysql_query("SELECT * FROM `user` WHERE `uniqueName`=`".$uniqueName."`");
Вот так:
PHP:
mysql_query("SELECT `uniqueName` FROM `user` WHERE `uniqueName`=`".$uniqueName."`");
Учись сразу использовать именно столько ресурсов, сколько тебе нужно для выполнения конкретной задачи. А не намного больше.
Объясняю - * ты выбираешь все поля таблицы, а зачем? тебе в запросе нужно только одно. Вот его и перечисли, им и ограничься)
И еще - у тебя там не совсем верная логика выражений дальше, задумайся, исправь. А не верно вот что (допустим, пример
PHP:
if(empty($year) AND !ereg("[0-9]{2,4}"))
Если поле год пусто И (логическое И) не соответствует формату от двух до четырех цифр
А нужно бы вот так:
PHP:
if(empty($year) OR !ereg("[0-9]{2,4}"))
Понимаешь разницу?)
Остальные исправления логических выражений оставляю на твою совесть.
Да, еще, почитай о тернарном операторе:
PHP:
$a?$a:false;
<условие>?<истина>:<ложь>;