欢迎访问
这里是荆棘的私人博客
螓首蛾眉
做一个PHP留言板

测试站地址(白嫖Lime的域名)
https://msg.jsun.limecho.net/

起因是,飞鸽传书差不多写完了,写点休闲的东西,于是想到了前后端耦合PHP和一直想用但是没用上的MDUI

如果你需要部署到自己的服务器应该没有,请事先查看Github上的Readme

https://upyun.jsun.limecho.net/2021/06/image-1024x735.png!/format/webp/lossless/true

初学PHP,没多久PHP倒是环境配置了挺久功能也就截图上的这么点,记录一点技术层面遇到的问题解决方案

文本框动态属性

需要实现勾选匿名昵称邮箱输入框禁用,这里由于使用了MDUI,可以使用它自带的一个类JQ工具库:https://www.mdui.org/docs/jq

但是修改完之后,输入框确实禁用了,但是样式没有改变,查了半天应该用

https://upyun.jsun.limecho.net/2021/06/image-4.png!/format/webp/lossless/true

以下是代码userInfoTmp缓存了匿名前的输入,取消勾选后无需再次输入

let userInfoTmp = [];
$('#isAnonymous').on('click', () => {
  $('.userInfoInput').prop({
    'disabled': $('#isAnonymous').prop('checked'),
    'value': (index, oldValue) => {
      if ($('#isAnonymous').prop('checked')) {
        userInfoTmp[index] = oldValue;
        return '';
      } else {
        return userInfoTmp[index];
      }
    }
  });
  mdui.updateTextFields($('.userInfo'));
});

SQL操作预处理

好像是可以防止SQL注入

if ($stmt = $conn->prepare("INSERT INTO message (`is_anonymous`,`ip`,`name`,`email`,`message`) VALUES (?,?,?,?,?)")) {
  $stmt->bind_param("issss", $isAnonymous, $ip, $name, $email, $message);
  $isAnonymous = (bool)$_POST["isAnonymous"];
  $ip = $_SERVER['REMOTE_ADDR'];
  $name = $_POST["name"];
  $email = $_POST["email"];
  $message = $_POST["message"];
  $stmt->execute();
}

此处$_SERVER[‘REMOTE_ADDR’]记录了用户IP,虽然isAnonymousSQL中是tinyint(1)但是依然可以传入bool,会转换成0/1

Github图标按钮

原本以为加一个icon按钮就完事了,但是并没有搜到这个icon

https://upyun.jsun.limecho.net/2021/06/image-2.png!/format/webp/lossless/true

那么文档顶部的图标是怎么实现的呢,原来是SVG

https://upyun.jsun.limecho.net/2021/06/image-3-1024x403.png!/format/webp/lossless/true

过滤HTML

如果用户留言了HTML,用echo可能造成xss注入的问题,于是将echo修改

echo htmlspecialchars($message["message"])
赞赏

发表评论

textsms
account_circle
email

螓首蛾眉

做一个PHP留言板
 测试站地址(白嫖Lime的域名)https://msg.jsun.limecho.net/ 起因是,飞鸽传书差不多写完了,写点休闲的东西,于是想到了前后端耦合的PHP和一直想用但是没用上的MDUI 如果你需…
扫描二维码继续阅读
2021-06-05