За последние 24 часа нас посетили 16570 программистов и 1559 роботов. Сейчас ищут 2087 программистов ...

выво и поиск php mssql varbinary

Тема в разделе "PHP и базы данных", создана пользователем muheroes, 24 сен 2008.

  1. muheroes

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

    С нами с:
    24 сен 2008
    Сообщения:
    33
    Симпатии:
    0
    Парни, мужики, девушки - кароче весь народ.
    тут такое дело, у меня уже мозг кипит!
    Я тут мучаюсь с mssql (типом varbinary)
    суть такава:
    есть таблица в ней есть ечейка, с типом Varbinary
    Для начало, я туда забиваю какието данные - вот скрипт:
    PHP:
    1. <? require 'config.php';
    2. $msconnect=mssql_connect("$dbhost","$dbuser","$dbpasswd");
    3. $msdb=mssql_select_db("MuOnline",$msconnect);
    4.  
    5. $query77 = "select * from MEMB_INFO WHERE memb___id = '$user'";
    6. $result77 = mssql_query( $query77 );
    7. $row1 = mssql_fetch_row($result77);
    8. if ($row1[35]!=1) {
    9. if ($row1[35]!=2) {echo "$user and $row1[35]";exit;}} ?><html>
    10. <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    11.  
    12. </head>
    13. <body><?
    14. $ppp=time(); ?>
    15. <center>
    16.  
    17.  
    18.  
    19.  
    20. <font size="5">VAULT ACC</font><br>
    21. <form name="form666" method="post" action="st.php?id=indexadmin&ida=vault&OK">
    22. Account
    23. <input name="login" type="text" id="login" maxlength="10"><br>
    24. Vault:<br>
    25. <textarea cols="30" rows="5" name="Otbor" id="Otbor"></textarea><br>
    26. <input type="submit" name="Submit" value="Готово"></form>
    27. </center>
    28.  
    29.  
    30.  
    31. <br>
    32. --------------------------<br>
    33. <?php
    34. require 'config.php';
    35. $msconnect=mssql_connect("$dbhost","$dbuser","$dbpasswd");
    36. $msdb=mssql_select_db("MuOnline",$msconnect);
    37.  
    38.  
    39.  
    40. $login = stripslashes($_POST['login']);
    41. $vault = stripslashes($_POST['Otbor']);
    42.  
    43. $sql_username_check = mssql_query("SELECT memb___id FROM MEMB_INFO WHERE memb___id='$login'");
    44. $username_check = mssql_num_rows($sql_username_check);
    45.  
    46. if ($username_check <= 0){
    47.     echo "ТУТ БУДЕТ НАПИСАНО ЧТО ВСЕ ГУД!<br>"; }
    48. else {
    49. $msconnect=mssql_connect("$dbhost","$dbuser","$dbpasswd");
    50. $msdb=mssql_select_db("MuOnline",$msconnect);
    51. $msquery = "
    52. UPDATE dbo.warehouse SET Items = CAST(0x$vault AS varbinary(1920))
    53. WHERE AccountID = '$login'";
    54. $msresults= mssql_query($msquery);
    55.  
    56.  
    57.  
    58.  
    59.  
    60.  
    61.  
    62.  
    63.  
    64.  
    65. include "config3.php";
    66.  
    67. $ip=getenv('remote_addr');
    68. $zap="insert into `items` values('','$user','$vault','$ppp','$ip','$login')";
    69.  
    70. echo "По идеи все гуд...";
    71. }
    72. ?>
    73. <hr>
    74. <?
    75. include "config3.php";
    76.  
    77. $zap="select * from `items` WHERE admin = '$user' order by Date desc";
    78. $res=mysql_query($zap); $number=mysql_num_rows($res);
    79. if ($number==0) {print "действий не происходило!";}
    80. else {
    81. ?>
    82. <table  cellpadding="0" cellspacing="0" border="1">
    83. <? while ($row=mysql_fetch_array($res)) {
    84. $date1=$row['Date']; $date=date("d.m.Y", $date1);
    85. ?>
    86. <tr> <td background="../image/bd_line_dark.jpg" ><?=$date?>
    87. </td>
    88.  <td background="../image/bd_line_dark.jpg" ><?=$row['admin']?>
    89. </td>
    90.  <td background="../image/bd_line_dark.jpg" ><?=$row['IP']?>
    91. </td>
    92.  <td background="../image/bd_line_dark.jpg" ><?=$row['acc']?>
    93. </td>
    94. </tr>
    95. </table>
    96. <table cellpadding="0" cellspacing="0">
    97. <tr>  
    98. <td>
    99. <?=$row['item']?>
    100. </td>
    101.  
    102. </tr>
    103.   <? } ?></table><? } ?>
    104. </body>
    105. </html>
    106.  
    А после мне требуеться, вывести из этой ячейки вбитую инфу, да мало того - надо еще произвести в ней поиск на поределенные значения, и вывести число совпадений.
    Помагите, если не трудно! Я че только не перерыл, но придумать сам немагу. :shock:
     
  2. neverlose

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

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Если б ты сам этот код написал, то смог бы :).
     
  3. muheroes

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

    С нами с:
    24 сен 2008
    Сообщения:
    33
    Симпатии:
    0
    Это мой скрипт, он преднозначен чтоб забить в базу код HEX Например, я туда забиваю
    (1600FF008AB40E0000E0000000000000FFFFFFFFFFFFFFFFFFFF1600FF008AB40E0000E0000000000000FFFFFFFFFFFFFFFF1600FF008AB40E0000E0000000000000FFFFFFFFFFFFFFF1600FF008AB40E0000E0000000000000)
    и мне нужно вывести эти данные с этой базы (а так просто запросом их не выведешь, ведь они зашифрованы) и найти там следующие
    мы имееем код чегото "1600FF008AB40E0000E0000000000000" в нем значений 32
    нужно определить следующие значения " 16****************E*************"
    где * это любое значение хоть 0 хоть Ф
    и определить количество.
    А теперь объесняю для чего это может быть нужно!
    Пускай у нас есть база онлайн игры, и есть ясчик, в нем есть вещи, у каждой вещи есть свой HEX код, и его нужно открыть и подсчитать сколько в нем определённых вещей (все вещи имеют 32 значения.)
     
  4. neverlose

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

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Не надо меня учить, что такое му. Скрипт не твой, а если твой, моя бабушка на этом форуме не сидит. Учи ф-ции bin2hex() , decbin() и str_slice(). Данные в это случае, читаются по 2 байта.
     
  5. muheroes

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

    С нами с:
    24 сен 2008
    Сообщения:
    33
    Симпатии:
    0
    Откуда такая уверенность что скрипт не мой? Я не собираюсь с тобой спорица, но
    Это был на мек что он старый, некудышный и касячный? Тогда придумаю более хороший скрипт, который (хотябы кушает также).
    и спс за это bin2hex() , decbin() и str_slice().
     
  6. muheroes

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

    С нами с:
    24 сен 2008
    Сообщения:
    33
    Симпатии:
    0
    Я написал скрипт, он выводит и подсчитывает HEX значения, пускай не совершенин но работает.
    Но тут загвостка, в переменной $vault не все значения из ячейки Items. их там varbinary (1920) а выводит 512!
    Почему? как вывести всё??? плиз помогите!
    PHP:
    1. <?
    2. session_start(); if ($statuz<>1) {echo "Вы не авторизованы на сайте";exit;}
    3. session_register(statuz,vault2,creat); ?>
    4. <html>
    5. <head>
    6. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    7. <title>Конфигурации account</title>
    8. </head>
    9.  
    10. <body>
    11. <?
    12. if (!isset($log)) {
    13. require 'config.php';
    14. $msconnect=mssql_connect("$dbhost","$dbuser","$dbpasswd");
    15. $msdb=mssql_select_db("MuOnline",$msconnect);
    16.  
    17. $query = "select Items from warehouse WHERE AccountID = '$userr_r'";
    18. $result = mssql_query( $query );
    19. $row=mssql_fetch_array($result);
    20. $vault= bin2hex($row['Items']);
    21.  
    22. $creat=0;
    23. $vault1 = strstr($vault, "16");
    24. $or2 = strpos ($vault1, "e",18);
    25. if ($or2 != false and $or2==18) {
    26. $creat=$creat+1;
    27. $vault2 = $vault1;
    28. echo "ПОДОЖДИТЕ ИДЕТ ПОДСЧЕТ!!!";
    29. print '
    30.    <meta http-equiv=Refresh
    31.    content="10; URL=st.php?id=userconf&log=yes">
    32. ';
    33. }
    34. else {echo "Нету Creations в inventary"; $or1=1;}
    35. }
    36. if (isset($log)) {
    37. $vault2 = strstr($vault2, "e");
    38. $vault2 = strstr($vault2, "16");
    39. if ($vault2===false) {echo "ПОДСЧЕТ ЗАВЕРШОН!!!<br>у вас "; echo "$creat"; echo "в ясчике<br>";exit;}
    40. $or2 = strpos ($vault2, "e",18);
    41. if ($or2==18 and $or2 != false)
    42. {$creat=$creat+1;
    43. echo "ПОДОЖДИТЕ ИДЕТ ПОДСЧЕТ!!!";
    44. print '
    45.    <meta http-equiv=Refresh
    46.    content="3; URL=st.php?id=userconf&log=yes">
    47. ';
    48. } else {echo "ПОДСЧЕТ ЗАВЕРШОН!!!<br>у вас "; echo "$creat"; echo "в ясчике<br>";}
    49. }
    50. ?>
    51. </body>
    52. </html>
    Скрипт хоть и грамосткий за то рабочий, я делал обычным циклом дак он вобще незапустился =\
    вот как я делал цикал:
    PHP:
    1. $or1='1';
    2. while ($or1<=0) {
    3. $vault1 = strstr($vault1, "e");
    4. $vault1 = strstr($vault1, "16");
    5. $or = strpos ($vault1, "e",18 );
    6. if ($or!=false and $or==18 ) {$creat=$creat+1;}
    7. else {$or1='0';}
    8. }
     
  7. neverlose

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

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Не переводи значения в oct. Работай с hex.
     
  8. muheroes

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

    С нами с:
    24 сен 2008
    Сообщения:
    33
    Симпатии:
    0
    в каком смысле???
    он тут и выводит hex
    PHP:
    1. $vault= bin2hex($row['Items']);
    а потом просто в переменную пихаю её.
    или есть другой способ как достать?
     
  9. muheroes

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

    С нами с:
    24 сен 2008
    Сообщения:
    33
    Симпатии:
    0
    возможно такое, что bin2hex - он ограничен по выводу байтов.
    или оброзует 1 страку - а строка ограничена по значениям.
    ну возможно что в varbinary храниться всё не в одной строке (хотя я даже не представляю как это может быть).
    Если сталкивались с такой проблемой, то возможно чтото соорудить???
     
  10. muheroes

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

    С нами с:
    24 сен 2008
    Сообщения:
    33
    Симпатии:
    0
    Проблема заключаеться в следующем!
    при выводе информации с базы данных mssql:
    PHP:
    1.  
    2. <?
    3.  $vault= bin2hex($row['Items']);
    4.  ?>
    обрабатываеться 512 byte - что недает обработать все одержимое базы.
    app - ему поралельно на буффер для обработки mssql поэтому не в этом заключаеться причина, может быть - но врятли непозволяет выводить сам mssql так как буффер в таблице уже прописан и тип данных тоже (type = varbinary, size = 1920)
    возникает вопрос возможноли по средством пхп увеличть объем буффера для обработки баз mssql или вывести всё содержимое по средствам цикла?
    если это возможно то как???
    я много уже ползою по инету, но не кто с такой проблеммой не сталкивался.
    здесь я почитал - все посетители форума работают с наипростейшими скриптами!
    Дак может быть найдеться тот кто действительно шарит в пхп и в базах, чтоб помочь мне с этой проблемой?
     
  11. muheroes

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

    С нами с:
    24 сен 2008
    Сообщения:
    33
    Симпатии:
    0
    PHP:
    1.         <? $query ="declare @vault varbinary(1920);
    2.         set @vault=(SELECT Items FROM warehouse where AccountId='".$userr_r."');print @vault;";
    3.         $result = mssql_query( $query );
    4.         $vault = substr(mssql_get_last_message(),2); ?>
    Пока сам недопрешь, некто талкового не подскажет - вот прошу выводит любые значения, любой сложности в hex код с varbinary!