CRogers25 Ответов: 1

Как исправить ошибку report.asp?


Здравствуйте, В бизнесе мы используем notepad++ для чтения report.asp. Который, когда студент нажимает кнопку, приводит его на страницу, где он может распечатать свой сертификат. Когда они попытаются получить сертификат, это не сработает. Это ошибка, которую я получаю:

]У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного синтаксиса для использования рядом ’
/courses/0000992_PL/report.asp, строка 46.

Это отчет.asp (строка 19):

выровняйте=“центр”&ГТ;&ЛТ;форма метод=“сообщение”и GT;
в <тип входного = “отправить” название=“mybutton3” значение = “распечатайте или сохраните сертификат главного инспектора и выход”/&ГТ;



Что я уже пробовал:

Я попробовал перепечатать другие, которые я не уверен, почему это не так.

Dave Kreskowiak

Эта ошибка не имеет ничего общего с HTML. Это говорит о заявлении запроса MySQL, и вы не разместили его здесь.

Он даже сказал вам, на какую строку смотреть в коде report.asp, и вы перешли к совершенно другой строке! Почему?!

CRogers25

Мои извинения, я хотел отправить сообщение:

(46)установите rs_courses = oConn.Execute(strSQL)
strSQL2="набор учащихся обновление результат=100, где столбцами courseid="&амп;Идентификатор_курса&" и имя пользователя='"&амп;i_name&ампер;"' и пароля пользователя='"&амп;i_pass&ампер;"'"
Установите rs_courses2 = oConn.Выполнить(strSQL2)
Установите objRS = oConn.Выполнить(uRID)

1 Ответов

Рейтинг:
1

OriginalGriff

strSQL2="UPDATE enrollments SET Score=100 WHERE CourseID="&CourseID&" AND UserName='"&i_name&"' AND UserPass='"&i_pass&"'"

Начните с того, что не делайте этого. Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?
Избавьтесь от конкатенации, и есть вероятность, что ваша ошибка SQL будет идти в то же самое время.


CRogers25

большое спасибо, я очень ценю вашу помощь.

OriginalGriff

Всегда пожалуйста!