【PHP】用PHP创建备忘录应用程序【1】

首先

我开始学习PHP大约一个月了,我创建了一个简单的备忘录应用程序,所以我决定将它作为备忘录发布文章。(由于只实现了最基本的功能,所以外观等方面并不重要。另外,出于记录目的,我会详细描述每一行代码,所以文章会很长。)

通过这个备忘录应用程序,我学到了有关SQL操作、从PHP到SQL的连接以及CRUD概念的知识。

在这篇文章中,我们将介绍如何创建备忘录并在列表中显示它们。

写下备忘录内容

在input.html文件中创建一个表单来记录备忘录,格式如下。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>メモの入力</title>
</head>
<body>
  <form action="input_do.php" method="post">
    <textarea name="memo" cols="30" rows="10" placeholder="メモを入力してください"></textarea><br>
    <button type="submit">登録する</button>
  </form>
</body>
</html>

当您在

标签的action属性中指定PHP文件(本例中为input_do.php),会将表单中输入的值传递给该PHP文件。同时,需将method属性设置为POST。

method属性可以设置为GET和POST两种。它们之间的区别如下所示。

GETPOST送信内容がURLとして渡される本文(本体)として送信される

简单来说,这是有关提交表单后内容是否显示在URL中的问题。为了避免风险和URL过长,我们选择了POST方式。

创建数据库

使用MySQL在名为mydb的文件夹中创建一个名为memos的表。这个表有三个列,分别是连续编号的id、记录备忘录内容的memo和记录创建日期时间的created。

image.png

DB和PHP的连接

为了连接DB和PHP,我会创建一个只负责连接的PHP文件。
在未来创建多个文件的备忘录应用中,为每个文件编写与DB连接相关的代码很麻烦且不易维护,因此我会准备一个专用于DB连接的文件。

<?php
$db = new mysqli("localhost:9000", "root", "root", "mydb");
?>

生成一个mysqli对象的实例并将其赋值给变量$db。参数依次为localhost:端口号、用户名、密码、数据库名。

显示备忘录列表

创建一个能够显示备忘录列表的php文件。作为这个页面上想要添加的功能

    • 登録されているメモの内容と日時を表示
    • メモの作成ボタンの設置(input.htmlへの遷移)
    5件ずつのメモでページを変更
<?php
require('dbconnect.php');

//最大ページ数を求める
$counts = $db->query('select count(*) as cnt from memos');
$count = $counts->fetch_assoc();
$max_page = floor(($count['cnt']-1)/5 + 1);

$stmt = $db->prepare('select * from memos order by id desc limit ?, 5');
if (!$stmt){
  die($db->error);
}

$page = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_NUMBER_INT);
$page = ($page ?: 1);
$start = ($page-1)*5;
$stmt->bind_param('i', $start);
$result = $stmt->execute();
?>

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>めもちょー</title>
</head>
<body>
  <h1>メモ帳</h1>

<p><a href="input.html">新しいメモ</a></p>


<?php if (!$result): ?>
  <p>表示するメモがありません</p>
<?php endif; ?>
  <?php $stmt->bind_result($id, $memo, $created); ?>
  <?php  while($stmt->fetch()): ?>
    <div>
      <h2><a href="memo.php?id=<?php echo $id; ?>"><?php echo htmlspecialchars(mb_substr($memo,0,50)); ?></a></h2>
      <time><?php echo htmlspecialchars($created) ?></time>
    </div>
    <hr>
  <?php endwhile; ?>
  <p>
    <?php if($page > 1): ?>
      <a href="?page=<?php echo $page-1; ?>"><?php echo $page-1?>ページ目</a> | 
    <?php endif; ?>
    <?php if($page < $max_page): ?>
      <a href="?page=<?php echo $page+1; ?>"><?php echo $page+1?>ページ目</a>
    <?php endif; ?>
  </p>

</body>
</html>

从上述代码中,我们将提取与所需功能相关的部分,并将它们汇总。
关于”创建备忘录按钮的设置(跳转到input.html)”。

<p><a href="input.html">新しいメモ</a></p>

通过在a标签的href属性中设置input.html,可以注册一个新的便签。

展示注册记事的内容和日期

<?php
require('dbconnect.php');
$stmt = $db->prepare('select * from memos order by id desc limit ?, 5');
if (!$stmt){
  die($db->error);
}
$stmt->bind_param('i', $start);
$result = $stmt->execute();
?>
<?php if (!$result): ?>
  <p>表示するメモがありません</p>
<?php endif; ?>
  <?php $stmt->bind_result($id, $memo, $created); ?>
  <?php  while($stmt->fetch()): ?>
    <div>
      <h2><a href="memo.php?id=<?php echo $id; ?>"><?php echo htmlspecialchars(mb_substr($memo,0,50)); ?></a></h2>
      <time><?php echo htmlspecialchars($created) ?></time>
    </div>
    <hr>
  <?php endwhile; ?>

通过使用 require 来指定文件名,可以使用该文件中已经编写的内容。
现在我们正在通过 require dbconnect.php 的方式,所以在这个时点上数据库连接已经完成。

通过 prepare 方法,可以将指定的 SQL 语句提交给数据库执行。上述的 SQL 语句的意思是“从 memos 中按降序取出任意个数的数据,最多只取 5 条”。如果数据库服务器无法准备该语句,prepare 方法会返回 FALSE,因此可以使用 if 语句来记录发生了哪种错误。通过 bind_param 方法,在 SQL 语句中可以将值传递给问号占位符。

使用execute方法执行SQL语句。如果无法成功执行,则返回FALSE,这时会使用条件分支显示没有备忘录的消息。
在这里,使用bind_result方法将提取的数据存储到变量$id, $memo, $created中。
如果SQL语句有结果,比如SELECT语句,就需要使用fetch逐个提取数据。因此,需要使用while循环处理,在存在数据的情况下循环提取数据。

我們使用 h2 標籤顯示備註的內容,並使用 time 標籤顯示備註的日期和時間。通過 bind_result 函數,備註的內容保存在變數 memo 中,備註的日期和時間保存在 created 中,只需使用 echo 函數即可顯示它們。然而,在 HTML 中,特殊字符如 < 或 > 具有特殊意義,不能直接寫入。為了正確顯示備註內容,我們需要使用 htmlspecialchars() 函數,同時考慮到可能存在非常長的字串作為備註內容,我們使用 mb_substr() 函數,將最大字數限制為50個字。

image.png

最后

我打算在本文中到这里为止。

    • 次の記事では5件ずつでページを変更する方法
    • メモの編集画面
    • メモの削除
    メモの詳細画面

我想将这些写成文章。由于是为了整理自己的思绪而写的,所以可能会有很多不易阅读和理解的地方,但如果能对你有所帮助,我会很高兴的。

广告
将在 10 秒后关闭
bannerAds