プログラミング中、あった問題 08
・!"#$%&'()=~<>+? というIDが登録されること
問題点:記号が影響されました。SQLが実行できません。
解決方法:特殊記号を変わります。
id = id.replaceAll("(?i)(')", "''");
pw = pw.replaceAll("(?i)(')", "''");
・アカウント削除 パスワード変更 Todo編集機能 Todo追加機能 Todo削除機能
問題点:HTMLで特殊記号が影響されました。
解決方法:特殊記号を変わります。
String userid = shain.getId();
String userpw = shain.getPw();
userid = userid.replaceAll("(?i)(&)", "&");
userid = userid.replaceAll("(?i)(')", "'");
userid = userid.replaceAll("(?i)(\")", """);
userpw = userpw.replaceAll("(?i)(&)", "&");
userpw = userpw.replaceAll("(?i)(')", "'");
userpw = userpw.replaceAll("(?i)(\")", """);
userid = userid.replaceAll("(?i)(<)", "<");
userid = userid.replaceAll("(?i)(>)", ">");
userpw = userpw.replaceAll("(?i)(<)", "<");
userpw = userpw.replaceAll("(?i)(>)", ">");
・HTMLのディスプレイ
想定結果と違いました。余計な記号を表しました。
正しい:!"#$%&'()=~<>+?
結果:+?"> !"#$%&'()=~<>+?
解決方法:特殊記号を変わります。
String todo_text = rset.getString("todo_text");
todo_text = todo_text.replaceAll("(?i)(&)", "&");
todo_text = todo_text.replaceAll("(?i)(')", "'");
todo_text = todo_text.replaceAll("(?i)(\")", """);
todo_text = todo_text.replaceAll("(?i)(<)", "<");
todo_text = todo_text.replaceAll("(?i)(>)", ">");
・記号のアカウントは編集機能が使えません。
問題点:URLで遷移することができませんでした。
解決方法:IDとPASSWORDをエンコードします。
String userid_utf8 = URLEncoder.encode(userid, "UTF-8");
String userpw_utf8 = URLEncoder.encode(userpw, "UTF-8");
・DataBaseの日時を修正しました。
以前:年月日だけです。
現在:時分秒を追加しました。
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = sdf.format(timestamp);
・日時の追加
実行方法:DataBaseからデータの保存時間をもらいます。
sql.append("SELECT `todo_id`,`todo_text`,`finished`,`upload_date` FROM `todo` WHERE user_id = '" + userid + "'");
・編集機能の更新日時を追加しました。
String sql = "UPDATE `todo` SET `todo_text` ='" + data + "',`upload_date` ='" + time + "' WHERE `todo_id` = '" + todoid + "'";
・改善方向
日時の型が変わります。
現在の型:2019-05-09 00:00:00
想定の型:2019年05月09日(木)00:00