За последние 24 часа нас посетили 21753 программиста и 1017 роботов. Сейчас ищут 745 программистов ...

mssql+ php 7.2 (Хелпу мне,плез)

Тема в разделе "MSSQL", создана пользователем Terronex, 4 май 2018.

  1. Terronex

    Terronex Новичок

    С нами с:
    4 май 2018
    Сообщения:
    13
    Симпатии:
    0
    Здравствуйте.Решил себя озадачить и озадачил так,что не могу понять,как коннектить php7 к mssql

    Не хочу кидать много кода сюда.Впервые вообще воспользовался форумом...Ибо весь гугл объюзал и такое себе...
    Ссылка на архив:
    https://yadi.sk/d/YaHXIOIj3VLK9H

    Раскомментил php.ini
    Залил дрова php 7.2 в ext (в phpinfo вывелся sqlsrv)
    http://prntscr.com/jdp46t -mssql
    В чем проблема?
    Нужно сделать регистрацию,а точнее помочь с ней.Не могу приконнектится к бд ,когда ввожу в формы данные.То есть отправка на сервер не идет

    Имеется BillingDB и от нее TBL_Member_Data -именно в TBL должны появится данные после того,как я ввел данные на сайте
    Надеюсь суть ясна.Помогите пожалуйста,заранее спасибо!
    Уже сил нет.И кажется ошибка банальная,но вот с php 7 я не работал и буквально потратил в общей сумме 30 часов на построение этой "Шляпы" ,а вот что теперь с ней делать дальше и как решить проблему...Увы,не знаю
     
  2. Danil005

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

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Для этого надо было залить все на GitHub и скинуть сюда. Никому не интересно будет скачивать файл, дабы понять смысл.
    PHP 7 отличается лишь удалением некоторых старых функций и добавлением новых.
    Есть вероятность, что подключение к бд с внешних источников запрещена.
     
    Terronex нравится это.
  3. Terronex

    Terronex Новичок

    С нами с:
    4 май 2018
    Сообщения:
    13
    Симпатии:
    0
    Вроде всё работает.Сейчас выдает ошибку upload_2018-5-5_4-28-54.png
    При отправке данных регистрации
    --- Добавлено ---
    connect.php
    PHP:
    1. <?php
    2.  
    3. $serverName = "WIN-344VU98D3RU\TOMB"; //serverName\instanceName
    4.  
    5. $connectionInfo = array( "Database"=>"BillingDB", "UID"=>"sa", "PWD"=>"fghtvfghtv");
    6. $conn = sqlsrv_connect( $serverName, $connectionInfo);
    7.  
    8. if (!$conn)  
    9. {
    10. echo( "<P> В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы
    11. невозможно. </P>" );
    12. exit();
    13. }
    14.  
    15. ?>
    reg.php
    PHP:
    1.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    2. <?php
    3. include_once("connect.php");
    4. if (isset($_POST['submit']))
    5. {
    6. if(empty($_POST['AccountID']))
    7. {
    8. echo 'Вы не ввели логин';
    9. }
    10. elseif(empty($_POST['passwd']))
    11. {
    12. echo 'Вы не ввели пароль';
    13. }
    14. elseif(empty($_POST['passwd2']))
    15. {
    16. echo 'Вы не ввели подтверждение пароля';
    17. }
    18. elseif($_POST['passwd'] != $_POST['passwd2'])
    19. {
    20. echo 'Введенные пароли не совпадают';
    21. }
    22. elseif(empty($_POST['email']))
    23. {
    24. echo 'Вы не ввели E-mail';
    25. }
    26. else
    27. {
    28. $AccountID = $_POST['AccountID'];
    29. $passwd = $_POST['passwd'];
    30. $passwd2 = $_POST['passwd2'];
    31. $email = $_POST['email'];
    32. $query = "SELECT * `serial_number`
    33. FROM `TBL_Member_Data`
    34. WHERE `AccountID`='{$AccountID}' AND `passwd`='{$passwd}'
    35. ";
    36. $parameters = [$_POST["AccountID"], $_POST["passwd"]];
    37. $sql = sqlsrv_query( $conn, $query ,$parameters) or die(print_r( sqlsrv_errors(), true));
    38. if (sqlsrv_num_rows($sql) > 0)
    39. {
    40. echo 'Такой логин уже существует';
    41. }
    42.  
    43. else
    44. {
    45. $AccountID=sqlsrv_real_escape_string($AccountID);
    46. $passwd=sqlsrv_real_escape_string($passwd);
    47. $email=sqlsrv_real_escape_string($email);
    48. $query = "INSERT INTO TBL_Member_Data(AccountID , passwd , email )
    49. VALUES ('$AccountID', '$passwd', '$email')";
    50. $result = sqlsrv_query($query) or die(sqlsrv_error());;
    51. echo 'Спасибо за регистрацию!';
    52. }
    53. }
    54. }
    55. ?>
    --- Добавлено ---
    И т.к увидел array этот...Побежал скачивать драйвер x64.Перезапустил всё и перезагрузился.Ничего не дало по сути
    Сложно,сложно...
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Кодировка хромает, текст ошибки не видно, но судя по коду (42000) - синтаксическая ошибка в запросе.
    --- Добавлено ---
    Я с MS SQL слабо знаком, но там точно можно использовать гравис (обратные кавычки) для оборачивания названий полей и таблиц?
     
  5. Terronex

    Terronex Новичок

    С нами с:
    4 май 2018
    Сообщения:
    13
    Симпатии:
    0
    Вообще ничего не понимаю...Вроде бы схожа с mysql,но такой гемор...Нет ни у кого исходников с коннектами к бд?
    Выходят новые ошибки.Не находят индексы...Подключаюсь к BillingDB и от этой бд мне нужно в TBL_Member_Data обрабатывать данные при авторизации\регистрации
    Вообще не выходит никак.Писал уже через select,from...Тоже самое
    В php есть sqlsrv и работает.
    Все тестовые скрипты в ставлял на выявление подключения -работают
    Пришлось даже в TBL_Member_Data добавить ID и сделать его ключем...Все равно бред полный.
    Пойду повешусь...
     
  6. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    PHP:
    1. $serverName = "MSSQLSERVER,1433"; //serverName\instanceName
    2. $connectionInfo = array( "Database"=>"Database", "CharacterSet" =>"UTF-8", "UID"=>"логин", "PWD"=>"пароль");
    3. $conn = sqlsrv_connect( $serverName, $connectionInfo );
    Все работает таким образом.
     
  7. Terronex

    Terronex Новичок

    С нами с:
    4 май 2018
    Сообщения:
    13
    Симпатии:
    0
    Добавлять порт в 2018 году -только для ODBC
    Подключение работает и без порта.Добавил лишь чарсет и то смысла не вижу от него
    upload_2018-5-7_19-59-46.png
    --- Добавлено ---
    Коннект есть и это видно.Пробовал даже значения убирать с пароля или логина и выдавал ошибку-уже говорит о том,что подключение существует
    Теперь мне нужна регистрация и ничего путевого не могу найти.Точнее такого нет.есть лишь на ASP.NET,но я не собираюсь такое использовать...C# я не учу и надеюсь он мне пока не понадобится.Есть идея подключить через node.js,но это такое...Опять же опыта в этом нет,но js сам по себе нужен...Front-end\dev без этого никак...
    --- Добавлено ---
    PHP:
    1. <?php
    2. include_once("connect.php");
    3. if (isset($_POST['submit']))
    4. {
    5. if(empty($_POST['AccountID']))
    6. {
    7. echo 'Вы не ввели логин';
    8. }
    9. elseif(empty($_POST['passwd']))
    10. {
    11. echo 'Вы не ввели пароль';
    12. }
    13. elseif(empty($_POST['passwd2']))
    14. {
    15. echo 'Вы не ввели подтверждение пароля';
    16. }
    17. elseif($_POST['passwd'] != $_POST['passwd2'])
    18. {
    19. echo 'Введенные пароли не совпадают';
    20. }
    21. elseif(empty($_POST['email']))
    22. {
    23. echo 'Вы не ввели E-mail';
    24. }
    25. else
    26. {
    27. $AccountID = $_POST['AccountID'];
    28. $passwd = $_POST['passwd'];
    29. $passwd2 = $_POST['passwd2'];
    30. $email = $_POST['email'];
    31. $query = "SELECT `serial_number`
    32. FROM `TBL_Member_Data`
    33. WHERE `AccountID`='{$AccountID}' AND `passwd`='{$passwd}'
    34. ";
    35. $sql = sqlsrv_query($query,$conn) or die(sqlsrv_error());
    36. if (sqlsrv_num_rows($sql) > 0)
    37. {
    38. echo 'Такой логин уже существует';
    39. }
    40.  
    41. else
    42. {
    43. $AccountID=sqlsrv_real_escape_string($AccountID);
    44. $passwd=sqlsrv_real_escape_string($passwd);
    45. $email=sqlsrv_real_escape_string($email);
    46. $query = "INSERT INTO TBL_Member_Data(AccountID , passwd , email )
    47. VALUES ('$AccountID', '$passwd', '$email')";
    48. $result = sqlsrv_query($query) or die(sqlsrv_error());;
    49. echo 'Спасибо за регистрацию!';
    50. }
    51. }
    52. }
    53. ?>
    Актуальный ли скрипт обработчика для mssql (sqlsrv) Проблема в этом...
     

    Вложения:

  8. Terronex

    Terronex Новичок

    С нами с:
    4 май 2018
    Сообщения:
    13
    Симпатии:
    0
    PHP:
    1. <?php
    2. if (isset($_POST['AccountID'])) { $AccountID = $_POST['AccountID']; if ($AccountID == '') { unset($AccountID);} } //заносим введенный пользователем логин в переменную $AccountID, если он пустой, то уничтожаем переменную
    3. if (isset($_POST['passwd'])) { $passwd=$_POST['passwd']; if ($passwd =='') { unset($passwd);} }
    4. //заносим введенный пользователем пароль в переменную $passwd, если он пустой, то уничтожаем переменную
    5. if (empty($AccountID) or empty($passwd)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
    6. {
    7. exit ("Вы ввели не всю информацию, венитесь назад и заполните все поля!");
    8. }
    9. //если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
    10. $AccountID = stripslashes($AccountID);
    11. $AccountID = htmlspecialchars($AccountID);
    12. $passwd = stripslashes($passwd);
    13. $passwd = htmlspecialchars($passwd);
    14. //удаляем лишние пробелы
    15. $AccountID = trim($AccountID);
    16. $passwd = trim($passwd);
    17. // подключаемся к базе
    18. include ("connect.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
    19. // проверка на существование пользователя с таким же логином
    20. $result = sqlsrv_query("SELECT serial_number FROM TBL_Member_Data WHERE AccountID='$AccountID'",$conn);
    21. $myrow = sqlsrv_fetch_array($result);
    22. if (!empty($myrow['serial_number'])) {
    23. exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин.");
    24. }
    25. // если такого нет, то сохраняем данные
    26. $result2 = sqlsrv_query ("INSERT INTO TBL_Member_Data (AccountID,passwd) VALUES('$AccountID','$passwd')");
    27. // Проверяем, есть ли ошибки
    28. if ($result2=='TRUE')
    29. {
    30. echo "Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. <a href='index.php'>Главная страница</a>";
    31. }
    32. else {
    33. echo "Ошибка! Вы не зарегистрированы.";
    34.      }
    35. ?>
    Взял фулл исходники с некого сайта и тут настроил исходник опять под базу данных.Не работает,вылезает эхо с ошибкой...Что за издец...
     
  9. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Вы хотя бы данные то с таблицы можете вытянуть?o_O
    Вытяните данные, если получится, дальше с ними работайте.
    Типо так:
    PHP:
    1. $serverName = "MSSQLSERVER,1433"; //serverName\instanceName
    2. $connectionInfo = array( "Database"=>"Database", "CharacterSet" =>"UTF-8", "UID"=>"логин", "PWD"=>"пароль");
    3. $conn = sqlsrv_connect( $serverName, $connectionInfo );
    4.  
    5. function getAccountID($conn, $name)
    6. {
    7.     $sql = "SELECT * FROM [BilingDB].[dbo].[TBL_Member_Data]";
    8.      
    9.     $stmt = sqlsrv_query( $conn, $sql );
    10.  
    11.     if( $stmt === false) {
    12.         die( print_r( sqlsrv_errors(), true) );
    13.     }
    14.  
    15.     $array = "";
    16.  
    17.     while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
    18.         $array = $row['AccountID'];
    19.     }
    20.     return $array;
    21. }
     
  10. Terronex

    Terronex Новичок

    С нами с:
    4 май 2018
    Сообщения:
    13
    Симпатии:
    0
    Скорее всего это мне и нужно было.В myslq такое не нужно прописывать.Максимум коннект,а остальное уже в операторах
    Впервые с таким сталкиваюсь.Спасибо,сейчас попробую!
     
  11. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Это просто для того чтобы проверить вы цепляетесь к таблице или нет. Коннект коннектом, а таблицу то программка видит или нет.
     
  12. Terronex

    Terronex Новичок

    С нами с:
    4 май 2018
    Сообщения:
    13
    Симпатии:
    0
    Вот как раз-таки и не видит... upload_2018-5-8_21-17-55.png
    upload_2018-5-8_21-18-7.png
    --- Добавлено ---
    Немного переделал вашу функцию и в итоге получил данные из бд
    upload_2018-5-8_21-26-28.png
    upload_2018-5-8_21-26-38.png
    --- Добавлено ---
    Получается так,что работает...И вот регистрацию бы сделать...
     
  13. Terronex

    Terronex Новичок

    С нами с:
    4 май 2018
    Сообщения:
    13
    Симпатии:
    0
    reg
    PHP:
    1.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    2. <?
    3. include_once("connect.php");
    4. if (isset($_POST['submit']))
    5. {
    6. if(empty($_POST['AccountID']))
    7. {
    8. echo 'Вы не ввели логин';
    9. }
    10. elseif(empty($_POST['passwd']))
    11. {
    12. echo 'Вы не ввели пароль';
    13. }
    14. elseif(empty($_POST['passwd2']))
    15. {
    16. echo 'Вы не ввели подтверждение пароля';
    17. }
    18. elseif($_POST['passwd'] != $_POST['passwd2'])
    19. {
    20. echo 'Введенные пароли не совпадают';
    21. }
    22. elseif(empty($_POST['email']))
    23. {
    24. echo 'Вы не ввели E-mail';
    25. }
    26. else
    27. {
    28. $AccountID = $_POST['AccountID'];
    29. $passwd = $_POST['passwd'];
    30. $passwd2 = $_POST['passwd2'];
    31. $email = $_POST['email'];
    32. $query = "SELECT serial_number
    33. FROM [BillingDB].[dbo].[TBL_Member_Data]
    34. WHERE AccountID='{$AccountID}' AND passwd='{$passwd}'
    35. ";
    36. $sql = sqlsrv_query($conn,$query) or die(sqlsrv_error());
    37. if (sqlsrv_num_rows($sql) > 0)
    38. {
    39. echo 'Такой логин уже существует';
    40. }
    41.  
    42. else
    43. {
    44. $AccountID=sqlsrv real_escape_string($AccountID);
    45. $passwd=sqlsrv real_escape_string($passwd);
    46. $email=sqlsrv real_escape_string($email);
    47. $query = "INSERT INTO [BillingDB].[dbo].[TBL_Member_Data] (AccountID , passwd , email )
    48. VALUES ('$AccountID', '$passwd', '$email')";
    49. $result = sqlsrv_query($query) or die(sqlsrv_error());
    50. echo 'Спасибо за регистрацию!';
    51. }
    52. }
    53. }
    54. ?>
    На данный момент ошибка выходит "$AccountID=sqlsrv real_escape_string($AccountID);"
    Я убрал нижний слеш между sqlsrv и real,ибо где-то в fullstack owerflow писали об этом.Вообще понять не могу функции sqlsrv
    Хотя бы пример один иметь с тем,как оно работает...Чтобы в дальнейшем хотя бы проблем не было.Ужас какой-то
     
  14. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
  15. Terronex

    Terronex Новичок

    С нами с:
    4 май 2018
    Сообщения:
    13
    Симпатии:
    0
    upload_2018-5-10_1-48-13.png
    upload_2018-5-10_1-50-22.png
    Дело в том,что он не понимает функцию sqlsrv_real_escape_string.Это для sql&sqli
    Нужно заменить "sqlsrv_real_escape_string" на подобную функцию,но с тем же параметром
    Пока не знаю как это решить.Больше проблем нет и надеюсь это реально последняя функция с ошибкой...
    UPD: имеенно mssql не понимает функцию*
    Также была ошибка на 36-ой линии и писал о двух функциях.В скобках был лишь $query и решил эту проблему прибавив $conn
    upload_2018-5-10_1-54-27.png
    В скрипте авторизации такая же проблема с sqlsrv
     
  16. Terronex

    Terronex Новичок

    С нами с:
    4 май 2018
    Сообщения:
    13
    Симпатии:
    0
    Также после коннекта проверил через php код запись в бд и всё чудесно работает,а значит осталось по-моему мнению заменить лишь функции
     
  17. Terronex

    Terronex Новичок

    С нами с:
    4 май 2018
    Сообщения:
    13
    Симпатии:
    0
    Решил проблему экранирования.Добавил addslashes();
    Ля,не зря мучался :3
    Всем спасибо)