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

Форум MySQL

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

 

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

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

тема: Опять баги (MySQL)
 
 автор: Sin   (08.11.2004 в 23:17)   письмо автору
 
 

Я скоро топать ногами буду от баг. Вот опять ничего не получается не работает функция
function chek_reg2()
{
        global $name, $email, $pass, $pass2,$sql_res;
        sql_connect();
        $sql_query="select * from users where name_user = '".$_POST["name"]."'";
        sql_execute();
        if (mysql_num_rows($sql_res)==1) { print_error(7); $error=1;}
        $sql_query="select * from users where email_user = '".$_POST["email"]."'";
        sql_execute();
        if (mysql_num_rows($sql_res)==1) { print_error(8); $error=1;}
        sql_close();

}

Выдает вот что
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in z:\home\portal.ru\www\includ\chek.php on line 39

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in z:\home\portal.ru\www\includ\chek.php on line 42

   
 
 автор: cheops   (08.11.2004 в 23:31)   письмо автору
 
   для: Sin   (08.11.2004 в 23:17)
 

Хм... Тут запросто так не скажешь в чём дело так как переменные опеределны как глобальные - судя по всему где-то не в дебрях функции sql_execute() не срабатывае mysql_query()... Нужно содержимое этой функции чтобы сказать более определённо - в этом заключается недостаток глобальных переменных - возрастает сложность отладки кода.

   
 
 автор: Sin   (09.11.2004 в 16:38)   письмо автору
 
   для: cheops   (08.11.2004 в 23:31)
 

Вот они все функции
function sql_connect()
{
        global $conn_id;
        $conn_id=mysql_connect($GLOBALS["sql_host"],$GLOBALS["sql_login"],$GLOBALS["sql_password"]);
        mysql_select_db($GLOBALS["sql_database"]);
        if (!$conn_id)
  {
    echo( "<P>Там что то.</P>" );
    exit();
  }

}
function sql_execute()
{
        global $sql_res, $sql_err;
                $sql_res=mysql_query($GLOBALS["sql_query"],$GLOBALS["conn_id"]);
        $sql_err=mysql_error();
}
function sql_close()
{

        mysql_close($GLOBALS["conn_id"]);
}

   
 
 автор: cheops   (09.11.2004 в 21:17)   письмо автору
 
   для: Sin   (09.11.2004 в 16:38)
 

Попробуйте исправить функцию sql_execute() следующим образом:
<?php
function sql_execute() 

  global 
$sql_res$sql_err
  
$sql_res=mysql_query($GLOBALS["sql_query"],$GLOBALS["conn_id"]); 
  if(!
$sql_res)
  {
    echo 
"Ошибка при выполнении SQL-запроса - ".mysql_query();
  }
  
$sql_err=mysql_error(); 

?>

   
 
 автор: Sin   (09.11.2004 в 23:07)   письмо автору
 
   для: cheops   (09.11.2004 в 21:17)
 

Ага сделал и опять вылезло куча ошибок. И я решил переделать все, ну или почти все. Вот переделал так в один запрос.
<?php
sql_connect
();
if(
$name&&$email)
{
        
$sql_query="select * from users where name_user = '".$name."' or email_user = '".$email."'";
        
sql_execute();

        if (
mysql_num_rows($sql_res)==1) { print_error(7);}
        else { 
$sql_query="insert into  users set name_user='".$_POST['name']."', password_user=md5('".$_POST['pass']."'), email_user='".$_POST['email']."', site_user='".$_POST['url']."', isq_user='".$_POST['icq']."'";
        
sql_execute(); }
}
        
sql_close();
        if(
$sql_res) {print_err(44);}




if(
$sql_errprint_err(11);
?>

И теперь работает. Просто раньше хотелось чтобы на ошибку емайла выдовалась одна ошибка, а имени другая. А теперь сделал все вместе. Так можно - это професионально или тяп ляп?

   
 
 автор: cheops   (09.11.2004 в 23:17)   письмо автору
 
   для: Sin   (09.11.2004 в 23:07)
 

Профессионализм определяется тем, можете вы (другой человек) разобраться в приложении через пол года или вам легче написать всё поновой...

   
 
 автор: Sin   (09.11.2004 в 23:26)   письмо автору
 
   для: cheops   (09.11.2004 в 23:17)
 

А-а-а. Вон оно как. Я тут немного подправил
<?phpif($name&&$email)
{
        
$sql_query="select * from users where name_user = '".$name."' or email_user = '".$email."'";
        
sql_execute();

        if (
mysql_num_rows($sql_res)==1) { print_error(7);}
        else { 
$sql_query="insert into  users set name_user='".$_POST['name']."', password_user=md5('".$_POST['pass']."'), email_user='".$_POST['email']."', site_user='".$_POST['url']."', isq_user='".$_POST['icq']."'";
        
sql_execute(); }
}
        
sql_close();
        if(
$sql_errprint_err(11);
        if(
$sql_res) {print_err(44);}
        
$_SESSION['username']= $name;?>

Я сомневаюсь на счет сесии стоит ее там ставить или лучше перед проверкой запроса поставить. Просто дело в том что при
if($sql_err) print_err(11);
        if($sql_res) {print_err(44);}
Умен происходит автоматическая перекидка в начало регистрации и на гланую страницу соответственно. Но ссесия работает. Вопрос в том можно ли так делать?

   
 
 автор: HoLsT   (01.08.2005 в 10:34)   письмо автору
 
   для: Sin   (09.11.2004 в 23:26)
 

Если у тебя сессия инициализировалась в начале файла, то ты после сообщения об ошибке напиши:
session_destroy();

Только это надо делать до переправки на главную или страницу регистрации.

   
Rambler's Top100
вверх

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