//blog/tags/about/friends

做一个 PHP 留言板

- code javascript mdui php web message board

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

GitHub: https://github.com/jsun969/MessageBoard

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

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

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

文本框动态属性

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

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

以下是代码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

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

过滤 HTML

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

echo htmlspecialchars($message["message"])