2016-06-03 4 views
0

Здравствуйте, я пытаюсь создать несколько страниц для школьного проекта. Вся тема о создании, удалении, поиске, обновлении мест назначения для отдыха. У меня проблема с удалением записи. Я создал html-страницу с формой, чтобы получить имя места назначения, которое вы хотите удалить. Далее появится код java-страницы, которую я создал. Вы видите что-то не так? Потому что все, что я пытаюсь записать, не будет удалено. БлагодаряНевозможно удалить запись в JDBC

HTML PAGE

<html> 
    <head> 
     <title>Delete</title> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    </head> 
    <body> 
     <h1 align="center">Insert the destination you want to delete</h1> 

     <form action="delete.jsp" method="post"> 
      <input type="text" name="delete"> 
      <BR> 
      <INPUT TYPE="SUBMIT" value="Delete!"> 
     </form> 





    </body> 
</html> 

JAVA СТР

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<%@page import="java.sql.*" %> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Delete</title> 
    </head> 
    <body> 


     <% 

      String name=request.getParameter("name"); 
      Class.forName("com.mysql.jdbc.Driver"); 
java.sql.Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/vac", 
"user","pass"); 

Statement myStatement=con.createStatement(); 
String SQLstring="DELETE FROM dest WHERE name= '" +name+ "'"; 
myStatement.executeUpdate(SQLstring); 
myStatement.close(); 
con.close(); 
out.println("Destination deleted!"); 

     %> 
    </body> 
</html> 
+0

Где в вашем html-формате параметр "name"? – OldProgrammer

+1

Также: ваш код уязвим для атак SQL Injection. [Пожалуйста, прочтите здесь] (http://bobby-tables.com), чтобы узнать о них и как их предотвратить. – Barranka

ответ

3

Я думаю, что имя параметра "не удалять", не "имя", в соответствии с названием формы ввода.

С уважением.

+0

о бог спасибо .....: D –

0

Как отмечено в ответе Антонио Мартинеса, имя параметра было неправильным (это не name, а delete). Я чувствую, что должен опубликовать этот ответ, чтобы указать на риск SQL Injection, который показывает ваш код.

Вы должны never построить запрос так, как вы делаете (принимая внешние параметры для построения инструкции), поскольку он может позволить вставлять код изгоев. Вы должны всегда использовать подготовленные заявления для рассмотрения с участием пользователей:

String sqlString = "delete from dest where name=?"; 
/* The question-mark is a place holder for the parameter. 
    Notice that you don't need to enclose it in quotes, 
    the prepared statement will take care about that. */ 
PreparedStatement ps = con.prepareStatement(sqlString); 
/* Notice that nothing is executed here: you're only preparing the 
    statement using the SQL string (which includes the place-holder(s) 
    for the parameter(s). */ 
ps.setString(1, delete) 
/* Here you assign the parameter(s) value(s) to the prepared statement. 
    The parameters are numbered starting from one, and ordered 
    the way they appear in your SQL string. 
    The setXXX() methods of the prepared statement allow you to 
    pass the correct value to the query. Strings, in this case, are 
    properly handled, so any rogue code the user might try to inject will 
    not pass as "executable code", but simply as a string. */ 
ps.execute(); 

Опять же, я советую вам read here узнать о нападениях SQL-инъекции: То, что они есть, что это риск, связанный с ними и как предотвратить их.