Автор Тема: Форма за регистрация - Проблем с SQL синтаксти  (Прочетена 13429 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

Stan

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 27
  • -Получени: 135
  • Публикации: 641
Re: Форма за регистрация - Проблем с SQL синтаксти
« Отговор #30 -: 11 Февруари 2012, 16:12:57 »
Я изпълни заявката в phpmyadmin като попълниш login и email, че нещо ме съмнява там нещата да са наред.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3624
Re: Форма за регистрация - Проблем с SQL синтаксти
« Отговор #31 -: 11 Февруари 2012, 16:15:22 »
Наборе споко, началото е трудно за всеки!
@House M.D, отвори phpmyadmin, отвори си базата с проекта, влез в SQL таба (горе от падащите менюта) и напиши следното - DESCRIBE `users`.
Направи една снимка на резултата и го качи да го видим. Другия вариат е през конзолния клиент на mysql, но едва ли знаеш как да го употребиш.
На пръв поглед, не видях грешки в кода който си постнал и затова искам да видя полетата в базата..
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

MrCroZer

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 11
  • -Получени: 17
  • Публикации: 411
Re: Форма за регистрация - Проблем с SQL синтаксти
« Отговор #32 -: 11 Февруари 2012, 16:20:38 »
Грешката на 42 ред, идва защото имаш проблем със заявката, дай и mysql_error(), и пусни какво извежда.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3624
Re: Форма за регистрация - Проблем с SQL синтаксти
« Отговор #33 -: 11 Февруари 2012, 16:30:50 »
@MrCroZer що ?
Заявката  е ОК и тя се изпълнява към базата, в противен случай нямаше да се стигне до събщението че няма ресурс за питането, което идва от mysql_fetch_array().
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

MrCroZer

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 11
  • -Получени: 17
  • Публикации: 411
Re: Форма за регистрация - Проблем с SQL синтаксти
« Отговор #34 -: 11 Февруари 2012, 16:36:34 »
Къде е mysql_fetch_array() ?

А и.. предполагам че е за заявката, защото сичко около нея и rows-а е закоментирано, дори и 42 ред.



Stan

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 27
  • -Получени: 135
  • Публикации: 641
Re: Форма за регистрация - Проблем с SQL синтаксти
« Отговор #35 -: 11 Февруари 2012, 16:41:28 »
В случая синтаксиса на заявката е написан правилно, но явно проблема е в базата данни - или таблицата не се казва така,или някое от полетата е сгрешено или нещо от този сорт.Затова mysql_query връща булево false и затова функцията, която трябва да борави с ресурса върнат от базата се оплаква.

Както каза @MrCroZer провери каква грешка вади mysql_error():

Код: PHP
  1. $sql= 'SELECT COUNT(*) as cnt FROM users WHERE login="' .addslashes($login).'" OR emails="'.addslashes($email).'"' ;
  2. $res=mysql_query($sql);
  3. if($res) {
  4.  $row= mysql_fetch_assoc($res);
  5.  print_r($row);
  6. }
  7. else echo mysql_error();
« Последна редакция: 11 Февруари 2012, 17:03:47 от abcd »

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3624
Re: Форма за регистрация - Проблем с SQL синтаксти
« Отговор #36 -: 11 Февруари 2012, 16:42:36 »
Къде е mysql_fetch_array() ?

Ами това е и отговора :)
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

House M.D.

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 18
Re: Форма за регистрация - Проблем с SQL синтаксти
« Отговор #37 -: 12 Февруари 2012, 02:17:13 »
абе човече, ти не четеш ли какво ти се предлага като постваш
не е само да туриш кода, а има различни кодове
къде са ти редовете?
абе УЖАААААААААААААААААААС

.
.
.

отиди в чата!

п.п. явно не знаеш де е чата
какво е db_init(); ???
Ей не съм толкова зле де.
[img=http://geekswithblogs.net/images/geekswithblogs_net/codesailor/3571/o_darthvader.jpg]http://цък[/img]  ;D
Относно db_init() -
Код: PHP
  1. function db_init()
  2. {
  3.     mysql_connect('localhost','root','') or die("Грешка с базата данни");
  4.     mysql_select_db('mcf');
  5.    
  6. }
Наборе споко, началото е трудно за всеки!
@House M.D, отвори phpmyadmin, отвори си базата с проекта, влез в SQL таба (горе от падащите менюта) и напиши следното - DESCRIBE `users`.
Направи една снимка на резултата и го качи да го видим. Другия вариат е през конзолния клиент на mysql, но едва ли знаеш как да го употребиш.
На пръв поглед, не видях грешки в кода който си постнал и затова искам да видя полетата в базата..
Снимката е прикачена към коментара.

Хора, пробвах, сторих, пак не стана, обаче мисля, че има поне малко напредък.
Сега поне дава някаква друга грешка  :)
При код
Код: PHP
  1.     <?php
  2.     include 'functions.php';
  3.     if(!$_SESSION['is_logged']==true)
  4.     {
  5.         my_header('Регистрация');
  6.        
  7.         if($_POST['form_submit']==1)
  8.         {
  9.             $login= trim($_POST['login']);
  10.             $pass= trim($_POST['pass']);
  11.             $pass2= trim($_POST['pass2']);
  12.             $email= trim($_POST['mail']);
  13.             $name= trim($_POST['name']);
  14.            
  15.             if (strlen($login)<2)
  16.             {
  17.                 $error_array['login']='invalid login name';
  18.             }
  19.             if (strlen($pass)<4)
  20.             {
  21.                 $error_array['pass']='short pass';
  22.             }
  23.             if ($pass!=$pass2)
  24.             {
  25.                 $error_array['pass']='passwords do not match';
  26.             }
  27.             if(!ereg("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$", $email)) {
  28.                 $error_array['mail']='invalid email';
  29.             }
  30.             if (!ereg("^[a-zA-Z]{3,16}$",$name))
  31.             {
  32.                 $error_array['name']='invalid name';
  33.             }
  34.            
  35.             if(!count($error_array)>0)
  36.             {
  37.                 db_init();
  38.                     $sql= 'SELECT COUNT(*) as cnt FROM users WHERE login="' .addslashes($login).'" OR email="'.addslashes($email).'"' ;
  39.                     $res=mysql_query($sql);
  40.                     if($res) {
  41.                     $row= mysql_fetch_assoc($res);
  42.                     print_r($row);
  43.                     }
  44.                     else echo mysql_error();
  45.             }
  46.            
  47.            
  48.         }
  49.         else
  50.         {
  51.             echo 'not submitted';
  52.         }
  53.        
  54.        
  55.         ?>
  56.     <form action = "register.php" method = "POST">
  57.         Login:<input type="text" name="login" value="" />
  58.         <?php if($error_array['login']){
  59.             echo $error_array['login'];
  60.             } ?> <br>
  61.         Password:<input type="text" name="pass" value="" />
  62.             <?php if($error_array['login']){
  63.             echo $error_array['login'];
  64.             } ?> <br>
  65.         Retype password:<input type="text" name="pass2" value="" /><br>
  66.         Email:<input type="text" name="mail" value="" /><br>
  67.         Name:<input type="text" name="name" value="" /><br>
  68.         <input type="hidden" name="form_submit" value="1">
  69.         <input type="submit" name="" value="Register" /><br>
  70.        
  71.     </form>
  72.     <?php
  73.     }
  74.     else
  75.     {
  76.         header('Location:index.php');
  77.         exit;
  78.     }
  79.      
  80.     footer();
  81.     ?>
  82.      
дава следната грешка:
Array ( [cnt] => 0 ) Което нищо не ми говори, освен, че имаме празен масив някъде.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3624
Re: Форма за регистрация - Проблем с SQL синтаксти
« Отговор #38 -: 12 Февруари 2012, 02:40:26 »
Добре де, на кой код да имам вяра ?
В постовете преди никъде не видях - mysql_fetch_assoc или mysql_fetch_array.
Сега си написал съвсем различен код от предишния и питаш какво става, в крайна сметка кой е кода който ползваш, щото така ме хвърляш в дълбок размисъл, а аз не обичам да мисля.
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

House M.D.

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 18
Re: Форма за регистрация - Проблем с SQL синтаксти
« Отговор #39 -: 12 Февруари 2012, 02:45:34 »
Вместо стария сложих кода, който написа abcd
В случая синтаксиса на заявката е написан правилно, но явно проблема е в базата данни - или таблицата не се казва така,или някое от полетата е сгрешено или нещо от този сорт.Затова mysql_query връща булево false и затова функцията, която трябва да борави с ресурса върнат от базата се оплаква.

Както каза @MrCroZer провери каква грешка вади mysql_error():

Код: PHP
  1. $sql= 'SELECT COUNT(*) as cnt FROM users WHERE login="' .addslashes($login).'" OR emails="'.addslashes($email).'"' ;
  2. $res=mysql_query($sql);
  3. if($res) {
  4.  $row= mysql_fetch_assoc($res);
  5.  print_r($row);
  6. }
  7. else echo mysql_error();
Само това е променено. И вместо emails е email.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3624
Re: Форма за регистрация - Проблем с SQL синтаксти
« Отговор #40 -: 12 Февруари 2012, 02:48:30 »
Сега, да видя и SQL statement който вкарва информацията в базата.
Ако ти нямаш дейта в полетата на таблицата, е нормално и масива който връща sql statement-a да е празен.
ПП И защо ползваш " addslashes", за да листваш някакъв резултат от базата. Не съм съвсем сигурен (погледни php.net), но мисля че тя се ползва само за инсертване на инфо..
« Последна редакция: 12 Февруари 2012, 02:57:52 от jazzman »
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

House M.D.

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 18
Re: Форма за регистрация - Проблем с SQL синтаксти
« Отговор #41 -: 12 Февруари 2012, 02:55:40 »
Сега, да видя и SQL statement който вкарва информацията в базата.
Ако ти нямаш дейта в полетата на таблицата, е нормално и масива който връща sql statement-a да е празен.
Съжалявам, обаче SQL statement нищо не ми говори и нямам никаква информация в полетата на таблицата.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3624
Re: Форма за регистрация - Проблем с SQL синтаксти
« Отговор #42 -: 12 Февруари 2012, 03:03:33 »
Ами всичко е наред в такъв случай, просто нямаш информация.
Sql statement, означава sql твърдението, изявление, което употребяваш, дали ще е за "delete", "update", "select", "insert" и т.н.....
По-горе писах, че никъде не видях как вкарваш информацията в базата, взета динамично от html формата.
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

House M.D.

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 18
Re: Форма за регистрация - Проблем с SQL синтаксти
« Отговор #43 -: 12 Февруари 2012, 03:13:07 »
Благодаря. Всички получават жълтици. Като се наспа пак се залавям с това.

edit:Абе как се дават благородарности?
« Последна редакция: 12 Февруари 2012, 03:41:17 от House M.D. »

Stan

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 27
  • -Получени: 135
  • Публикации: 641
Re: Форма за регистрация - Проблем с SQL синтаксти
« Отговор #44 -: 12 Февруари 2012, 11:51:55 »
Цитат
Array ( [cnt] => 0 )
Този резултат означава че са намерени(засегнати) 0 на брой редове от таблицата users по даден критерий в случая всички колони "*" от функцията COUNT() с WHERE клауза за колоните login и email .Щом нямаш записи в таблицата и достигаш до този резултат значи всичко е наред.Аз така и не разбрах къде е бил другия проблем след като ти казах от първия ми пост да оправиш просто синтаксиса на тази функция,защото я беше написъл неправилно "COUNT (*)" с място между името и скобите,което от своя страна би те довелo до проблемния резултат от mysql_fetch_assoc().

пп.Благодарности се дават на всеки пост (има едно линкче "Кажи Благодаря").Тук обаче в този раздел не виждам такова, явно не е сложено.