За последние 24 часа нас посетили 22419 программистов и 1064 робота. Сейчас ищут 650 программистов ...

Сделать подходящий триггер

Тема в разделе "MSSQL", создана пользователем lx2004nt, 30 ноя 2016.

  1. lx2004nt

    lx2004nt Активный пользователь

    С нами с:
    3 сен 2015
    Сообщения:
    41
    Симпатии:
    0
    Привет, кто может помочь хотя бы общих чертах как написать такой триггер.
    Есть скрипт который добавляет пароль и логин и ещё ряд значений нужных серверу в базу. Нужно что бы из этой базы, в другую базу перекинулись данные - логин пароль и блок данных стартовых которые уже есть. Но пароль надо зашифровать с "солью". Примерный скрипт шифрования есть. То есть принцип такой - Делаем таблицу, добавляем в нее одну строку со значениями. Далее триггер переписывает его в другу таблицу шифруя пароль. Далее запись удаляется. Триггер срабатывает только на появление записи в таблице. Объясните как это сделать? Перерыл весь интернет ей богу. Пока не пришел к пониманию.

    Триггер должен включать такие функции как:
    1) Перекодировка пароля
    2) Добавление в базу данных
    3) Удаление строки из таблицы
    4) Выполнение после появления строки 1 строки в таблице каждый раз(или если много строк одновременно появилось, что бы мог обработать)

    Буду очень благодарен тем кто поможет. По сути это надо к серверу fly for fan элемент увязывающий регистрацию игроков на сервер.

    Всем спасибо. Жду ваши ответы.
     
  2. lx2004nt

    lx2004nt Активный пользователь

    С нами с:
    3 сен 2015
    Сообщения:
    41
    Симпатии:
    0
    А вот и готовый триггер, кому надо можете использовать в своих разработках

    Код (PHP):
    1. [/B]USE [ACCOUNT_DBF]GO
    2. /****** Object:  Trigger [dbo].[ACCOUNT_TBL1]    Script Date: 12/10/2016 23:58:19 ******/
    3. SET ANSI_NULLS ON
    4. GO
    5. SET QUOTED_IDENTIFIER ON
    6. GO
    7. ALTER TRIGGER [dbo].[ACCOUNT_TBL1] ON [dbo].[ACCOUNT_TBL]
    8.    FOR INSERT
    9. AS
    10. BEGIN
    11. /*
    12. use ACCOUNT_DBF_START
    13. GO
    14. use ACCOUNT_DBF_START
    15. GO
    16. */
    17. DECLARE @account varchar(32)
    18. DECLARE @password varchar(32)
    19. DECLARE @isuse char(1)
    20. DECLARE @member char(1)
    21. DECLARE @id_no1 char(6)
    22. DECLARE @id_no2 char(255)
    23. DECLARE @realname char(1)
    24. DECLARE @reload char(1)
    25. DECLARE [USER=59603]@Cash[/USER] int
    26.  
    27. --DECLARE VTORAYA TABLICA --
    28.  
    29.  
    30. DECLARE @account2 varchar(32)
    31. DECLARE @gamecode char(4)
    32. DECLARE [USER=42940]@tester[/USER] char(1)
    33. DECLARE @m_chLoginAuthority char(1)
    34. DECLARE @regdate datetime
    35. DECLARE @BlockTime char(8)
    36. DECLARE [USER=5173]@endtime[/USER] char(8)
    37. DECLARE @WebTime char(8)
    38. DECLARE @isuse2 char(1)
    39. DECLARE @secession datetime
    40. DECLARE @email2 varchar(100)
    41.  
    42.  
    43. --
    44.  
    45.  
    46.  
    47. --PERVAUA TABLICA POLUCHENIE DANNIH
    48. SELECT @account=account, @password=password, @isuse=isuse, @member=member, @id_no1=id_no1, @id_no2=id_no2, @realname=realname, @reload=reload, @cash=cash
    49. FROM ACCOUNT_TBL
    50.  
    51. --test delrte
    52. --DELETE FROM ACCOUNT_TBL
    53. --WHERE account = @account AND password = @password AND isuse = @isuse AND member = @member AND cash = [USER=59603]@Cash[/USER]
    54.   --AND id_no2 = @id_no2 AND realname = @realname AND reload = @reload
    55.  
    56. --REBILDING PASSWORD
    57. SET NOCOUNT ON
    58. DECLARE [USER=3631]@md5[/USER] varchar(32)
    59. DECLARE @salt varchar(100)
    60. SET @salt = 'flight'
    61. SET [USER=3631]@md5[/USER] = lower(CONVERT(VARCHAR(32), HashBytes('MD5', @salt+@password), 2))
    62.  
    63. --PRINT [USER=3631]@md5[/USER]
    64.  
    65. --EXPORT V 1 table
    66. --use ACCOUNT_DB
    67. DECLARE [USER=60106]@test[/USER] varchar(32)
    68. SET [USER=60106]@test[/USER] = 'test'
    69. --USE ACCOUNT_DBF
    70. --GO
    71.  
    72. INSERT INTO ACCOUNT_TBL (account, password, isuse, member, id_no1, id_no2, realname, reload, cash)
    73. SELECT @account, [USER=3631]@md5[/USER], @isuse, @member, @id_no1, @id_no2, @realname, @reload, [USER=59603]@Cash[/USER]
    74.  
    75. --INSERT
    76. --INSERT INTO ACCOUNT_DBF.dbo.ACCOUNT_TBL (account, password, isuse, member, id_no1, id_no2, realname, reload, cash)
    77. --SELECT account, password, isuse, member, id_no1, id_no2, realname, reload, cash
    78. --FROM ACCOUNT_DBF_START.dbo.ACCOUNT_TBL
    79. --VTORAUA TABLICA POLUCHENIE DANNIH
    80. --DELETE FROM ACCOUNT_DBF_START.dbo.ACCOUNT_TBL
    81. --WHERE account = @account AND password = @password AND isuse = @isuse AND member = @member AND id_no1 = @id_no1 AND id_no2 = @id_no2 AND realname = @realname AND reload = @reload AND cash = [USER=59603]@Cash[/USER]
    82. --SELECT @account2=account, @gamecode=gamecode, @tester=tester, @m_chLoginAuthority=m_chLoginAuthority, @regdate=regdate, @BlockTime=BlockTime, @EndTime=EndTime, @WebTime=WebTime, @isuse2=isuse, @secession=secession, @email2=email
    83.  
    84. --FROM ACCOUNT_TBL_DETAIL
    85.  
    86.  
    87. --DECLARE @pass varchar(100)
    88. --SET @pass = @password
    89. --PRINT @salt
    90.  
    91.  
    92. --EXPORT V2 table
    93. /*
    94. INSERT INTO ACCOUNT_TBL_DETAIL (account, gamecode , tester, m_chLoginAuthority, regdate, BlockTime, EndTime , WebTime, isuse, secession, email)
    95. SELECT @account2, @gamecode, [USER=42940]@tester[/USER], @m_chLoginAuthority, @regdate, @BlockTime, [USER=5173]@endtime[/USER], @WebTime, @isuse2, @secession, @email2
    96. */
    97. --TRUNCATE TABLE ACCOUNT_TBL
    98. --TRUNCATE TABLE ACCOUNT_TBL_DETAIL
    99.  
    100. [B]

    Скажите как крассиво упаковать код под спойлер? закрыто
    Скажите как получить на php + sql количество строк?
    Скажите как получить в массив все записи определенного столбца?
    В примерах. Буду благодарен. Жду ваших ответов. Уважаемые!
     
    #2 lx2004nt, 10 дек 2016
    Последнее редактирование: 10 дек 2016
  3. lx2004nt

    lx2004nt Активный пользователь

    С нами с:
    3 сен 2015
    Сообщения:
    41
    Симпатии:
    0
    После ряда опытов, и посоветовавшись со специалистом пришел к DBLIB PDO MSSQL
    Но наступил на грабли!!!
    Скажите пожалуйста как object сделать переменной int?
    Скажите пожалуйста как object Array сделать массивом?
    Или если такие преобразования не возможны то как работать в данной ситуации?
    Вот сам скрипт:

    Код (Text):
    1. <body>
    2. <?php
    3. ini_set('display_errors',1);
    4. error_reporting(E_ALL);
    5. echo $_POST['username'];
    6. echo $_POST['password'];
    7. echo $_POST['passwordconform'];
    8. echo $_POST['mail'];
    9. $mail = $_POST['mail'];;
    10. echo $_POST['bot'];
    11. $today = date("Y-m-d H:i:s");
    12. $Username = $_POST['username'];
    13. $Password =  $_POST['password'];
    14. $mail = $_POST['mail'];
    15. //$serverName = ".\SQLEXPRESS"; // Пишем имя компьютера с БД и имя экземпляра. если //instance и port стандартные, то можно не указывать
    16. //$connectionInfo = array("UID" => "Затерто", "PWD" => "Затерто", //"Database"=>"ACCOUNT_DBF"); //В принципе итак все понятно, UID - имя пользователя. //PWD - Пароль и наша созданная тестовая база данных
    17. //$conn = sqlsrv_connect( $serverName, $connectionInfo);
    18.  
    19. /*
    20. if( $conn )
    21. {
    22. echo "Connection established.\n";
    23. }
    24. else
    25. {
    26. echo "Connection could not be established.\n";
    27. die( print_r( sqlsrv_errors(), true));
    28. }
    29. */
    30.  
    31.     //dbo.tbl_Account
    32. //INSERT INTO ACCOUNT_TBL (account, password, isuse, member, id_no1, id_no2, realname,reload,cash )
    33. //VALUES ('lx2004nt3', '111500', 'T', 'A', NULL, NULL, NULL, NULL, 0);
    34.  
    35. //test
    36.  
    37.  
    38.  
    39.  
    40. //test
    41. echo "debilizm SQL TEST";
    42. $dbh = new PDO("sqlsrv:Server=localhost\SQLEXPRESS;Database=ACCOUNT_DBF", "затерто", "затерто");
    43.  
    44. $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
    45.  
    46. $sth = $dbh->prepare('select count(account) as num from ACCOUNT_TBL');
    47. $sth->execute();
    48. $num = $sth->fetchObject();
    49. print_r($num); // ($num->num)
    50.  
    51. $sth = $dbh->prepare('select account from ACCOUNT_TBL');
    52. $sth->execute();
    53. $rows = $sth->fetchAll(PDO::FETCH_ASSOC);
    54. print_r($rows);
    55. //$md5password = md5($str);
    56. //echo $md5password;
    57. /*
    58. sqlsrv_query($conn, "INSERT INTO ACCOUNT_TBL (account, password, isuse, member, id_no1, id_no2, realname,reload,cash )
    59. VALUES ('$Username', HashBytes('MD5', '$str'), 2)), 'T', 'A', '', '', NULL, NULL, 0);");
    60. */
    61.  
    62. //добавление в базу паролей
    63. //sqlsrv_query($conn, "INSERT INTO ACCOUNT_TBL (account, password, isuse, member, //id_no1, id_no2, realname,reload,cash )
    64. //VALUES ('$Username', '$Password', 'T', 'A', NULL, NULL, NULL, NULL, 0);");
    65. //добавление в детальную базу
    66. //sqlsrv_query($conn, "INSERT INTO ACCOUNT_TBL_DETAIL (account, gamecode, tester, m_chLoginAuthority,regdate ,BlockTime,EndTime,WebTime,isuse,secession,email)
    67. //VALUES ('$Username', 'A000', '2', 'F', '', '20160827', '20260828', '20160827', '0', //NULL,'$mail');");
    68. //тестовый мусор
    69. /*
    70. sqlsrv_query($conn, "INSERT INTO ACCOUNT_TBL (account, password, isuse, member, id_no1, id_no2, realname,reload,cash )
    71. VALUES ('lx2004nt3', '111500', 'T', 'A', NULL, NULL, NULL, NULL, 0);");
    72. */
    73.  
    74.  
    75. /*
    76. // дубль база паролей и данных юзера
    77. sqlsrv_query($conn, "INSERT INTO ACCOUNT_TBL_CLONE (account, password, isuse, member, id_no1, id_no2, realname,reload,cash )
    78. VALUES ('$Username', '$Password', 'T', 'A', NULL, NULL, NULL, NULL, 0);");
    79.  
    80. sqlsrv_query($conn, "INSERT INTO ACCOUNT_TBL_DETAIL_CLONE (account, gamecode, tester, m_chLoginAuthority,regdate ,BlockTime,EndTime,WebTime,isuse,secession,email)
    81. VALUES ('$Username', 'A000', '2', 'F', '', '20160827', '20260828', '20160827', '0', NULL,'$mail');");
    82. */
    83. //тестовое прошлое приложение
    84. /*
    85. sqlsrv_query($conn, "DELETE FROM ACCOUNT_TBL (account, password, isuse, member, id_no1, id_no2, realname,reload,cash )
    86. WHERE ('$Username', '$Password', 'T', 'A', NULL, NULL, NULL, NULL, 0);");
    87. */
    88. //Удаление данных из первой таблицы задвоенных
    89.  
    90.  
    91.  
    92. //echo "delete db start";
    93. //sleep(100);
    94. //sqlsrv_query($conn, "DELETE ACCOUNT_TBL
    95. //WHERE account ='$Username' AND password ='$Password';");
    96. //sleep(100);
    97.  
    98.  
    99. // AND isuse = 'T' AND member = /'A' AND cash = 0
    100.  
    101. //получение MS SQL числа записей
    102.  
    103.  
    104.  
    105. //2 variant
    106. /*
    107. sqlsrv_query($conn, "SELECT COUNT(account) FROM ACCOUNT_TBL;");
    108. $row = mssql_num_rows ($conn);
    109. $total = $row;
    110. echo "$total";
    111. echo "= TOTAL";
    112. */
    113. //simptom
    114. /*
    115. $arrlogin = array();
    116.  
    117. $q = "SELECT * FROM ACCOUNT_TBL";
    118. $r = mssql_query($q);
    119. if (mssql_num_rows($r) > 0) {
    120.     while ($l = mssql_fetch_array($r)) {
    121.          $old = $l['account'];
    122.          $arrlogin[] = $old;
    123.        
    124.     }
    125. }
    126. print_r ($arrlogin);
    127. */
    128. //вывод числа значений массива
    129. /*
    130. echo "debilizm SQL TEST";
    131. $res = mssql_query("SELECT COUNT(account) FROM ACCOUNT_TBL");
    132. $row = mssql_fetch_row($res);
    133. $total = $row[0]; // всего записей
    134. echo $total;
    135. echo "=TOTAL";
    136. mssql_close($conn);
    137. //simptom
    138. echo "debiblsm";
    139. //$server = "WIN-1SUIAL4I3QE.\SQLEXPRESS";
    140. //$connectionInfo = array( "Database"=>"ACCOUNT_DBF", "UID"=>"flyforfun", "PWD"=>//"q11eleonWARFACE" );
    141. $conn = sqlsrv_connect( $server, $connectionInfo );
    142.  
    143. $sql = "SELECT * FROM ACCOUNT_DBF.[dbo].ACCOUNT_TBL";
    144. $params = array();
    145. $options =  array( "password" => SQLSRV_CURSOR_KEYSET );
    146. $stmt = sqlsrv_query( $conn, $sql , $params, $options );
    147.  
    148. $row_count = sqlsrv_num_rows( $stmt );
    149.  
    150. //if ($row_count === false)
    151.    //echo "Error in retrieveing row count.";
    152. //else
    153.    echo $row_count;
    154.  
    155. // Соединяемся с MSSQL и выбираем базу
    156. echo "debiblsm";
    157. //$link = mssql_connect('WIN-1SUIAL4I3QE.\SQLEXPRESS', 'flyforfun', 'q11eleonWARFACE');
    158. mssql_select_db('ACCOUNT_DBF');
    159.  
    160. // Выбираем все строки из таблицы
    161. $query = mssql_query('SELECT * FROM [ACCOUNT_DBF].[dbo].[ACCOUNT_TBL]');
    162.  
    163. echo 'Всего записей в таблице: ' . mssql_num_rows($query);
    164.  
    165. // Очищаем результат
    166. mssql_free_result($query);
    167. mssql_close($conn);
    168.  
    169. //SET @md5 =
    170.  
    171. $link = mssql_connect('192.168.0.100', 'flyforfun', 'q11eleonWARFACE');
    172.    mssql_select_db('ACCOUNT_DBF', $link);
    173.  
    174. $sql = "select *
    175.   FROM ACCOUNT_TBL";
    176.  
    177. echo $sql;  // Здесь вывожу текст запроса для проверки в MS
    178.  
    179. echo "<p>";
    180.  
    181.   $sql = mssql_query($sql);
    182. $len = mssql_num_rows ($sql);
    183. echo $len;
    184.  
    185.  
    186.     mssql_close($link);
    187.  
    188. for ($i = 1; $i <= 10; $i++) {
    189.     echo $i;
    190. }
    191. */
    192.  
    193. $val = intval($num);
    194. for($i=0;$i<=$val;$i++)
    195. {
    196.     if($rows[$i] == $Username )
    197.     {
    198.         $account = 0;
    199.         break;
    200.     }
    201.     //elseif ($rows[$i] != $Username)
    202.     //{
    203.         //$account = 1;
    204.         //break;
    205.     //};
    206. };
    207.  
    208. if ($account == 1)
    209. {
    210.     echo "Добро пожаловать на сервер FLY FOR FUN LX2004NT";
    211.     //проверка логина
    212. $sth = $dbh->prepare("INSERT INTO ACCOUNT_TBL (account, password, isuse, member, id_no1, id_no2, realname, reload, cash)
    213. values ('$Username', '$Password', 'T', 'A', NULL, NULL, NULL, NULL, 0)");
    214. $sth->execute();
    215.  
    216.  
    217. $sth = $dbh->prepare("INSERT INTO ACCOUNT_TBL_DETAIL (account, gamecode, tester, m_chLoginAuthority, regdate, BlockTime, EndTime, WebTime, isuse, secession, email)
    218. values ('$Username', 'A000', '2', 'F', '', '20160827', '20260828', '20160827', '0', NULL,'$mail')");
    219. $sth->execute();
    220.  
    221. //проверка логина
    222. $sth = $dbh->prepare("INSERT INTO ACCOUNT_TBL_CLONE (account, password, isuse, member, id_no1, id_no2, realname, reload, cash)
    223. values ('$Username', '$Password', 'T', 'A', NULL, NULL, NULL, NULL, 0)");
    224. $sth->execute();
    225.  
    226.  
    227. $sth = $dbh->prepare("INSERT INTO ACCOUNT_TBL_DETAIL_CLONE (account, gamecode, tester, m_chLoginAuthority, regdate, BlockTime, EndTime, WebTime, isuse, secession, email)
    228. values ('$Username', 'A000', '2', 'F', '', '20160827', '20260828', '20160827', '0', NULL,'$mail')");
    229. $sth->execute();
    230.  
    231. $dbh->prepare("DELETE ACCOUNT_TBL
    232. WHERE account ='$Username' AND password ='$Password'")->execute();
    233. }
    234. elseif ($account == 0)
    235. {
    236. echo "Поменяйте логин, данный логин занят уже другим пользователем";
    237.  
    238. };
    239.  
    240.  
    241. //mssql_close($conn);
    242.  
    243.  
    244.  
    245. /* убрать лишнее для теста
    246. $serverName = ".\SQLEXPRESS"; // Пишем имя компьютера с БД и имя экземпляра. если instance и port стандартные, то можно не указывать
    247. $connectionInfo = array("UID" => "flyforfun", "PWD" => "q11eleonWARFACE", "Database"=>"ACCOUNT_DBF"); //В принципе итак все понятно, UID - имя пользователя. PWD - Пароль и наша созданная тестовая база данных
    248. $conn2 = sqlsrv_connect( $serverName, $connectionInfo);
    249.  
    250. if( $conn2 )
    251. {
    252. echo "Connection established.\n";
    253. }
    254. else
    255. {
    256. echo "Connection could not be established.\n";
    257. die( print_r( sqlsrv_errors(), true));
    258. }
    259.  
    260. */
    261.  
    262. //
    263. /*
    264.  
    265. //вывод числа значений массива
    266. $res = mysql_query("SELECT COUNT(namber) FROM doctor");
    267. $row = mysql_fetch_row($res);
    268. $total = $row[0]; // всего записей
    269. echo $total;
    270. echo "=TOTAL";
    271. mysql_close($dbconnect);
    272. //
    273. */
    274.  
    275.  
    276.  
    277. /*
    278. //simptom
    279. $arrlogin = array();
    280.  
    281. $q = "SELECT * FROM doctor";
    282. $r = mysql_query($q);
    283. if (mysql_num_rows($r) > 0) {
    284.     while ($l = mysql_fetch_array($r)) {
    285.          $old = $l['simptom'];
    286.          $arrsimptom[] = $old;
    287.        
    288.     }
    289. }
    290. print_r ($arrsimptom);
    291. */
    292.  
    293.  
    294.  
    295. ?>
    296.  
    297. </body>
    298. </html>
     
    #3 lx2004nt, 16 дек 2016
    Последнее редактирование: 16 дек 2016
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    обычно у объекта несколько свойств. любое из них ты можешь сделать интом так $var = (int)$obj->field;
    Но явно ты не этого хочешь.

    $var = (array)$obj; попробуй
     
    denis01 нравится это.
  5. lx2004nt

    lx2004nt Активный пользователь

    С нами с:
    3 сен 2015
    Сообщения:
    41
    Симпатии:
    0
    Как бы эту проблему с числами массива мы решили уже.
    Код (Text):
    1. $num->num
    Но и вам спасибо за то что пытались помочь. Вопрос вот какой. Как сделать то что в скрипте? когда цикл пробегает по массиву и если пароль есть то значение переменной меняется. Если нет то он например 0. Я просто не понимаю как обратиться к массиву объектов. Уже по разному пробывал не выходит.
    Код (Text):
    1. for($i=0;$i<$num->num;$i++)
    2. {
    3.     if((array)$rows->rows[$i] == $Username)
    4.     {
    5.         $account = 0;
    6.         break;
    7.     }
    8.     if ((array)$rows->rows[$i] != $Username)
    9.     {
    10.         $account = 1;
    11.         break;
    12.     }
    13.     else
    14.     {
    15.         echo "ошибка";
    16.     }
    17.         ;
    18. };
    Вопрос в том как к этому rows обратиться что бы оно поняло что от него хотят? при этом ругаеться на != очень почему то.

    Помогите пожалуйста. Я плохо понимаю объекты, классы, и массивы. Но учусь.
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    ну как бы мы эту проблему уже решили, но и вам спасибо, что пытаетесь. Объект сначала сконвертируюй в массив. А то, что ты пишешь (array)$rows->rows[$i] это какая-то муть, ты сам подумай, что тут написано по шагам. Откуда у тебя вообще объект? Покажи код, где он возникает.
     
  7. lx2004nt

    lx2004nt Активный пользователь

    С нами с:
    3 сен 2015
    Сообщения:
    41
    Симпатии:
    0
    PHP:
    1. $sth = $dbh->prepare('select account from ACCOUNT_TBL');
    2. $sth->execute();
    3. $rows = $sth->fetchAll(PDO::FETCH_ASSOC);
    4. print_r($rows);
    Вот отсюда берется. Оно выгружает список логинов в массив объектов. Как с ним работать я вообще не понимаю. А как сконвертировать? Вот так? $var = (array)$obj; Сделал.


    PHP:
    1. $var = (array)$rows;
    2. //var_dump($rows);
    3. //$account = 0;
    4. for($i=0;$i<$num->num;$i++)
    5. {
    6.     if($var[$i] == $Username)
    7.     {
    8.         $account = 0;
    9.     }
    10.     if ($var[$i] != $Username)
    11.     {
    12.         $account = 1;
    13.     }
    14.     else
    15.     {
    16.         echo "ошибка";
    17.     }
    18.         ;
    19. };
    Теперь сервер выдает ошибку 500 internal error код ошибки 0x000000ff (Сервер IIS)
    Не понимаю в чем проблема???
     
    #7 lx2004nt, 19 дек 2016
    Последнее редактирование: 19 дек 2016
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    в логи смотри, может быть что угодно

    покажи что покажет
    PHP:
    1. $rows = $sth->fetchAll(PDO::FETCH_ASSOC);
    2. var_dum ($rows);
     
  9. lx2004nt

    lx2004nt Активный пользователь

    С нами с:
    3 сен 2015
    Сообщения:
    41
    Симпатии:
    0
    Код (Text):
    1. if ($account == 1)
    2. {
    3.     echo "Добро пожаловать на сервер FLY FOR FUN LX2004NT";
    4.     //проверка логина
    5. $dbh = new PDO("sqlsrv:Server=localhost\SQLEXPRESS;Database=ACCOUNT_DBF", "flyforfun", "убрано");
    6.  
    7. $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
    8.  
    9. $sth = $dbh->prepare("INSERT INTO ACCOUNT_TBL (account, password, isuse, member, id_no1, id_no2, realname, reload, cash)
    10. values ('$Username', '$Password', 'T', 'A', NULL, NULL, NULL, NULL, 0)");
    11. $sth->execute();
    12.  
    13.  
    14. $sth = $dbh->prepare("INSERT INTO ACCOUNT_TBL_DETAIL (account, gamecode, tester, m_chLoginAuthority, regdate, BlockTime, EndTime, WebTime, isuse, secession, email)
    15. values ('$Username', 'A000', '2', 'F', '', '20160827', '20260828', '20160827', '0', NULL,'$mail')");
    16. $sth->execute();
    17.  
    18. //проверка логина
    19. /*
    20. $sth = $dbh->prepare("INSERT INTO ACCOUNT_TBL_CLONE (account, password, isuse, member, id_no1, id_no2, realname, reload, cash)
    21. values ('$Username', '$Password', 'T', 'A', NULL, NULL, NULL, NULL, 0)");
    22. $sth->execute();
    23.  
    24.  
    25. $sth = $dbh->prepare("INSERT INTO ACCOUNT_TBL_DETAIL_CLONE (account, gamecode, tester, m_chLoginAuthority, regdate, BlockTime, EndTime, WebTime, isuse, secession, email)
    26. values ('$Username', 'A000', '2', 'F', '', '20160827', '20260828', '20160827', '0', NULL,'$mail')");
    27. $sth->execute();
    28. */
    29. $dbh->prepare("DELETE ACCOUNT_TBL
    30. WHERE account ='$Username' AND password ='$Password'")->execute();
    31. }
    32. elseif ($account == 0)
    33. {
    34. echo "Поменяйте логин, данный логин занят уже другим пользователем";
    35.  
    36. };
    а ругается оно на вот это по ходу. Вопрос? как в if'e делать запрос тогда?
     
  10. lx2004nt

    lx2004nt Активный пользователь

    С нами с:
    3 сен 2015
    Сообщения:
    41
    Симпатии:
    0
    Вот что выводит
    Код (Text):
    1. SQL TESTstdClass Object ( [num] => 92 ) Array ( [0] => Array ( [account] => supertest12344 ) [1] => Array ( [account] => supertest12344 ) [2] => Array ( [account] => supertest12344 ) [3] => Array ( [account] => supertest12344 ) [4] => Array ( [account] => supertest12344 ) [5] => Array ( [account] => supertest12344 ) [6] => Array ( [account] => supertest12344 ) [7] => Array ( [account] => supertest12344 ) [8] => Array ( [account] => supertest12344 ) [9] => Array ( [account] => supertest12344 ) [10] => Array ( [account] => supertest12344 ) [11] => Array ( [account] => supertest12344 ) [12] => Array ( [account] => supertest12344 ) [13] => Array ( [account] => supertest12344 ) [14] => Array ( [account] => supertest12344 ) [15] => Array ( [account] => supertest12344 ) [16] => Array ( [account] => supertest12344 ) [17] => Array ( [account] => supertest12344 ) [18] => Array ( [account] => supertest12344 ) [19] => Array ( [account] => supertest12344 ) [20] => Array ( [account] => supertest12344 ) [21] => Array ( [account] => supertest12344 ) [22] => Array ( [account] => supertest12344 ) [23] => Array ( [account] => supertest12344 ) [24] => Array ( [account] => supertest12344 ) [25] => Array ( [account] => supertest12344 ) [26] => Array ( [account] => supertest12344 ) [27] => Array ( [account] => supertest12344 ) [28] => Array ( [account] => supertest12344 ) [29] => Array ( [account] => supertest12344 ) [30] => Array ( [account] => supertest12344 ) [31] => Array ( [account] => supertest12344 ) [32] => Array ( [account] => supertest12344 ) [33] => Array ( [account] => supertest12344 ) [34] => Array ( [account] => supertest12344 ) [35] => Array ( [account] => supertest12344 ) [36] => Array ( [account] => supertest12344 ) [37] => Array ( [account] => supertest12344 ) [38] => Array ( [account] => supertest12344 ) [39] => Array ( [account] => supertest12344 ) [40] => Array ( [account] => supertest12344 ) [41] => Array ( [account] => supertest12344 ) [42] => Array ( [account] => supertest12344 ) [43] => Array ( [account] => supertest12344 ) [44] => Array ( [account] => supertest12344 ) [45] => Array ( [account] => supertest12344 ) [46] => Array ( [account] => supertest12344 ) [47] => Array ( [account] => supertest123441 ) [48] => Array ( [account] => supertest12344 ) [49] => Array ( [account] => supertest12344 ) [50] => Array ( [account] => supertest123441 ) [51] => Array ( [account] => ) [52] => Array ( [account] => ) [53] => Array ( [account] => ) [54] => Array ( [account] => ) [55] => Array ( [account] => ) [56] => Array ( [account] => supertest ) [57] => Array ( [account] => supertest ) [58] => Array ( [account] => supertest1 ) [59] => Array ( [account] => supertest1 ) [60] => Array ( [account] => supertest12 ) [61] => Array ( [account] => supertest12 ) [62] => Array ( [account] => supertest12 ) [63] => Array ( [account] => supertest12 ) [64] => Array ( [account] => supertest12 ) [65] => Array ( [account] => supertest12 ) [66] => Array ( [account] => supertest123 ) [67] => Array ( [account] => supertest123 ) [68] => Array ( [account] => supertest1234 ) [69] => Array ( [account] => supertest1234 ) [70] => Array ( [account] => supertest12344 ) [71] => Array ( [account] => supertest12344 ) [72] => Array ( [account] => supertest123441 ) [73] => Array ( [account] => supertest123441 ) [74] => Array ( [account] => supertest123441 ) [75] => Array ( [account] => supertest123441 ) [76] => Array ( [account] => supertest123441 ) [77] => Array ( [account] => supertest123441 ) [78] => Array ( [account] => supertest123441 ) [79] => Array ( [account] => supertest123441 ) [80] => Array ( [account] => supertest123441 ) [81] => Array ( [account] => supertest123441 ) [82] => Array ( [account] => supertest123441 ) [83] => Array ( [account] => supertest123441 ) [84] => Array ( [account] => supertest123441 ) [85] => Array ( [account] => supertest123441 ) [86] => Array ( [account] => supertest123441 ) [87] => Array ( [account] => supertest123441 ) [88] => Array ( [account] => supertest123441 ) [89] => Array ( [account] => supertest123441 ) [90] => Array ( [account] => supertest123441 ) [91] => Array ( [account] => supertest123441 ) )
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    92 одинаковых массива =)
    ну пройди по ним циклом, только сначала сделай $rows = (array)$rows;
     
  12. lx2004nt

    lx2004nt Активный пользователь

    С нами с:
    3 сен 2015
    Сообщения:
    41
    Симпатии:
    0
    Можешь объяснить как? я уже сделал вот так, кидает ошибки
    Код (Text):
    1. $var = (array)$rows;
    2. var_dump($rows);
    3. $account = 0;
    4. for($i=0;$i<$num->num;$i++)
    5. {
    6.     if($var[$i] == $Username)
    7.     {
    8.         echo "$var[$i]";
    9.         $account = 0;
    10.         echo "0";
    11.     }
    12.     if ($var[$i] != $Username)
    13.     {
    14.         echo "$var[$i]";
    15.         $account = 2;
    16.         echo "2";
    17.     }
    18.     else
    19.     {
    20.         //$account = 1;
    21.         echo "ошибка";
    22.     }
    23.         ;
    24. };
    Notice: Array to string conversion in C:\inetpub\wwwroot\dblibpdo\index.php on line 222
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    ты сравниваешь массив со строкой. переведи текст ошибки и станет понятно сразу. в массиве много значений. пхп не знает что с чем сравнивать.
     
    denis01 нравится это.
  14. lx2004nt

    lx2004nt Активный пользователь

    С нами с:
    3 сен 2015
    Сообщения:
    41
    Симпатии:
    0
    Прошу прощения, но я вас не понимаю... я конечно затупок, понимаю только "человеческий ассемблер"(когда все разжованно полностью и понятно даже очень тупому человеку). Мои способности в программировании крайне малы. Но я же сравниваю
    Код (Text):
    1. $var[$i] == $Username
    там есть ключ, т.е. [$i] следовательно я сравниваю элемент массива, а не сам массив. Причем вы сами видите что это в for'e все. Разве это не так?
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    возможно в элементе массива другой массив, почему б нет
     
  16. lx2004nt

    lx2004nt Активный пользователь

    С нами с:
    3 сен 2015
    Сообщения:
    41
    Симпатии:
    0
    вы имеете в ввиду что надо вот так делать?
    Код (Text):
    1. $var[account][$i] == $Username
    или нет? я вас не понял. Вы считаете что там многомерный массив?
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    а что var_dump() говорит об этом? зачем гадать, если можно посмотреть, что именно там.
     
  18. lx2004nt

    lx2004nt Активный пользователь

    С нами с:
    3 сен 2015
    Сообщения:
    41
    Симпатии:
    0
    Я же вам показал что уже... там один массив вроде бы. Поймите я плохо знаю программирование, поэтому спрашиваю у других совета. Массив один. Как его пройти for'om? можете мне помочь?

    Код (Text):
    1. SQL TESTstdClass Object ( [num] => 92 ) Array ( [0] => Array ( [account] => supertest12344 ) [1] => Array ( [account] => supertest12344 ) [2] => Array ( [account] => supertest12344 ) [3] => Array ( [account] => supertest12344 ) [4] => Array ( [account] => supertest12344 ) [5] => Array ( [account] => supertest12344 ) [6] => Array ( [account] => supertest12344 ) [7] => Array ( [account] => supertest12344 ) [8] => Array ( [account] => supertest12344 ) [9] => Array ( [account] => supertest12344 ) [10] => Array ( [account] => supertest12344 ) [11] => Array ( [account] => supertest12344 ) [12] => Array ( [account] => supertest12344 ) [13] => Array ( [account] => supertest12344 ) [14] => Array ( [account] => supertest12344 ) [15] => Array ( [account] => supertest12344 ) [16] => Array ( [account] => supertest12344 ) [17] => Array ( [account] => supertest12344 ) [18] => Array ( [account] => supertest12344 ) [19] => Array ( [account] => supertest12344 ) [20] => Array ( [account] => supertest12344 ) [21] => Array ( [account] => supertest12344 ) [22] => Array ( [account] => supertest12344 ) [23] => Array ( [account] => supertest12344 ) [24] => Array ( [account] => supertest12344 ) [25] => Array ( [account] => supertest12344 ) [26] => Array ( [account] => supertest12344 ) [27] => Array ( [account] => supertest12344 ) [28] => Array ( [account] => supertest12344 ) [29] => Array ( [account] => supertest12344 ) [30] => Array ( [account] => supertest12344 ) [31] => Array ( [account] => supertest12344 ) [32] => Array ( [account] => supertest12344 ) [33] => Array ( [account] => supertest12344 ) [34] => Array ( [account] => supertest12344 ) [35] => Array ( [account] => supertest12344 ) [36] => Array ( [account] => supertest12344 ) [37] => Array ( [account] => supertest12344 ) [38] => Array ( [account] => supertest12344 ) [39] => Array ( [account] => supertest12344 ) [40] => Array ( [account] => supertest12344 ) [41] => Array ( [account] => supertest12344 ) [42] => Array ( [account] => supertest12344 ) [43] => Array ( [account] => supertest12344 ) [44] => Array ( [account] => supertest12344 ) [45] => Array ( [account] => supertest12344 ) [46] => Array ( [account] => supertest12344 ) [47] => Array ( [account] => supertest123441 ) [48] => Array ( [account] => supertest12344 ) [49] => Array ( [account] => supertest12344 ) [50] => Array ( [account] => supertest123441 ) [51] => Array ( [account] => ) [52] => Array ( [account] => ) [53] => Array ( [account] => ) [54] => Array ( [account] => ) [55] => Array ( [account] => ) [56] => Array ( [account] => supertest ) [57] => Array ( [account] => supertest ) [58] => Array ( [account] => supertest1 ) [59] => Array ( [account] => supertest1 ) [60] => Array ( [account] => supertest12 ) [61] => Array ( [account] => supertest12 ) [62] => Array ( [account] => supertest12 ) [63] => Array ( [account] => supertest12 ) [64] => Array ( [account] => supertest12 ) [65] => Array ( [account] => supertest12 ) [66] => Array ( [account] => supertest123 ) [67] => Array ( [account] => supertest123 ) [68] => Array ( [account] => supertest1234 ) [69] => Array ( [account] => supertest1234 ) [70] => Array ( [account] => supertest12344 ) [71] => Array ( [account] => supertest12344 ) [72] => Array ( [account] => supertest123441 ) [73] => Array ( [account] => supertest123441 ) [74] => Array ( [account] => supertest123441 ) [75] => Array ( [account] => supertest123441 ) [76] => Array ( [account] => supertest123441 ) [77] => Array ( [account] => supertest123441 ) [78] => Array ( [account] => supertest123441 ) [79] => Array ( [account] => supertest123441 ) [80] => Array ( [account] => supertest123441 ) [81] => Array ( [account] => supertest123441 ) [82] => Array ( [account] => supertest123441 ) [83] => Array ( [account] => supertest123441 ) [84] => Array ( [account] => supertest123441 ) [85] => Array ( [account] => supertest123441 ) [86] => Array ( [account] => supertest123441 ) [87] => Array ( [account] => supertest123441 ) [88] => Array ( [account] => supertest123441 ) [89] => Array ( [account] => supertest123441 ) [90] => Array ( [account] => supertest123441 ) [91] => Array ( [account] => supertest123441 ) )
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    $var[$i]['account']
    --- Добавлено ---
    почему вы не наймёте когонить?
     
  20. lx2004nt

    lx2004nt Активный пользователь

    С нами с:
    3 сен 2015
    Сообщения:
    41
    Симпатии:
    0
    Нанял, так сделали что сам доделываю, кроме этого я сам программист хоть и слабый, опыт в айти 14 лет, но не в программировании, в программировании 3-й год. Я мало чего понимаю, но стараюсь научиться и работать. Что бы понимать эти вещи... поймите мне нужно все уметь. Но людей знающих рядом раз два и обчелся, и они тоже не так много знают. Я сталкивался с ситуациями когда человек который шарит, не знал того в железе что знал я по сути. Т.е. я решал проблемы. Вот теперь за программирование взялся, вынужден сам писать проект. Потом как собственник я должен знать как оно работает, иначе какой я собственник? А вам большое спасибо за помощь. Кстати меня этот форум уже один раз пытался выручить, тогда не вышло сам нашел ответ рабочий. Но с MYSQL. Большое спасибо с MSSQL :)

    Код (Text):
    1. echo "if 2 $var[$i]['account']
    Код (Text):
    1. array to string conversion
    но тем не менее сравнивает?
    может вариант сделать так?

    Код (Text):
    1.  
    2. $var[$i]['account'] = $vivod;
    3. echo "if 2 $vivod";
    Гуглил, пока ответа не нашел, но я понимаю что тут что то не так в плане типа единицы массива. Просто хотел убедиться что код пашет верно. Дальше гуглю. Если поможете будет вам большое спасибо.
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    не, это путь в плохое программирование.

    ну var_dump($var[$i]['account']) смотри. хз что там сидит =)))))))

    дружище, ну... в программировании есть порядок выполнения операций. Что по-твоему происходит на этих строках?
     
  22. lx2004nt

    lx2004nt Активный пользователь

    С нами с:
    3 сен 2015
    Сообщения:
    41
    Симпатии:
    0
    Я согласен что это путь в плохое программирование, но все учатся на ошибках, задают вопросы, это нормально. Мне практически не у кого спросить... нету друзей почти разбирающихся... а сам хочу научиться. Хочу быть программистом.

    да я поторопился, имел ввиду наоборот :) тороплюсь просто :)
    Код (Text):
    1. $vivod = $var[$i]['account'];
    вот что в дампе сидит

    Код (Text):
    1. Notice: Array to string conversion in C:\inetpub\wwwroot\dblibpdo\index.php on line 224
    2. if 2 Array['account'] string(15) "supertest123441" 1
    И ещё появились вопросы по html именно по защите от дурака или хакера, то есть запрет ввода других данных кроме положенных в текст бокс
    Это понято что этим ограничивают длину строки
    http://htmlbook.ru/html/input/maxlength
    Это понятно что этим по сути ограничивают ввод. Но понятно что не понятно как задать туда циферки и все буквы?
    http://htmlbook.ru/samhtml5/formy/zashchita-ot-duraka

    При указании
    ^[a-zA-Z]+$ Любые латинские буквы.
    ^[ 0-9]+$ Любое количество цифр
    Вместе... ничего не выходит, дальше указания данных не идет задача
    Т.е. выходит нужен правильный шаблон ввода допускающий цифры и буквы и ничего более

    И есть ещё один вопрос, как сделать так что бы при отсутствии символа собачки @ в почте и начала с доменом, выводилась ошибка и логин не решался? т.е. надо какую то проверку текста делать? или есть какие либо способы?
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Не пиши массив в строке
    --- Добавлено ---
    Echo "alala " . $arr['key'] . " ololo";
     
  24. uri

    uri Активный пользователь

    С нами с:
    3 сен 2009
    Сообщения:
    43
    Симпатии:
    1
    Не понял зачем используете PDO::fetchObject().
    Может лучше PDOStatment::fetchAll() - вернет ассоциативный массив. Типа как
    Код (Text):
    1. $result=$this->_db->query($query)->fetchAll(PDO::FETCH_ASSOC);
    здесь $this->_db - PDO-коннект к БД.
    И, извините мою дотошность, у Вас используется триггер FOR INSERT (т.е. то, что должно произойти перед вставкой данных). Однако в теле триггера (строка 48-49) Вы ссылаетесь на вставляемые данные
    Код (Text):
    1. SELECT ...
    2. FROM ACCOUNT_TBL
    причем, по отсутствию условия WHERE - предполагаете, что там содержится единственная запись. Во-первых, данные еще не вставлены, и Вы их можете не увидеть при определенных настройках TRANSACTION ISOLATION LEVEL. Во-вторых, на момент срабатывания триггера в таблице могут уже быть какие-то данные. Поэтому рекомендую использовать специальную табличку inserted.
    Ну и далее по коду триггера (строки 72-73) вставка в ту же самую таблицу
    Код (Text):
    1. INSERT INTO ACCOUNT_TBL ...
    рекурсивно вызовет срабатывание триггера.
    1. Если используется одна и та же табличка надо использовать триггер AFTER INSERT и в нем прописать UPDATE нужных полей. Т.е. из inserted получаете данные, трансформируете их как Вам надо, обновляете нужные поля.
    2. Если для хранения конечных данных должна использоваться другая таблица - пишете триггер AFTER INSERT, из inserted получаете данные, преобразовываете их, сохраняете куда надо и в конце либо DELETE вставленной записи, либо TRUNCATE таблицы (как у Вас в комментариях к триггеру)