質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2853閲覧

PHP リンクのパラメータに日付の情報を持たせたい

kotouharuto

総合スコア38

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/09/11 12:37

実現したいこと

タイトルの通り、「リンクのパラメータに日付の情報を持たせたい」
つまり、

<a href="menu_delete.php?action=delete&id={$row.id}&date={$date->format('Ymd')} class="complate" name="delete">完了</a>

このようなリンクのdate={$date->format('Ymd')}に日付の情報を持たせたいです。

現在の状況

現在筋トレメニューを日付別に登録して管理するwebアプリケーションを作成していて、今はメニュー削除処理を作成しているのですが、削除処理ファイルに遷移するとカレンダーファイルから持ってきた日付のデータが消えてしまいます。
これを直して削除処理を実行した時に日付データを引き回したいです。

該当のソースコード

php

1//calendar.php(カレンダー機能のphpファイルです) 2<?php 3require_once '../libs/init.php'; 4 5//今日の日付を持ったオブジェクト 6$current_date = new DateTime(); 7 8//日曜日の始まりにする処理 9if(0 < $current_date->format('w')) { 10 $current_date->modify(sprintf('- %d days', $current_date->format('w'))); 11} 12 13$last_date = (clone $current_date)->modify('+ 7 days'); 14$dates = []; 15while($current_date < $last_date) { 16 $dates[] = clone $current_date; 17 $current_date->modify('+ 1 day'); 18} 19 20//smarty接続ファイル 21$smarty = getSmarty(); 22$smarty->assign('dates', $dates); 23$smarty->display('calendar.tpl');
{* calendare.tpl(カレンダー機能のsmartyファイルです) *} <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>PHPカレンダー</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <link href="https://fonts.googleapis.com/css?family=Noto+Sans+JP" rel="stylesheet"> </head> <body> {foreach $dates as $date} //日付データを持たせたパラメータのリンク <a href="menupost.php?date={$date->format('Ymd')}">{$date->format('Y/m/d')}</a><br> {/foreach} </body> </html>

//menupost.php(メニュー追加機能のphpファイルです) <?php require_once '../libs/init.php'; if(!isset($_SESSION['user_id'])) { header("Location: login.php"); } $date = $_GET['date']; try { $pdo = db_connect();    //メニュー情報取得 $menus = fetchAllMenus($pdo, $_SESSION['user_id'], $date); } catch (PDOException $Exception) { print "error:". $Exception->getMessage(); } $smarty = getSmarty(); $smarty->assign('menus', $menus); $smarty->assign('date', $date); $smarty->display('menupost.tpl');
{* メニュー追加機能の表示ファイル(こちらは必要な部分だけにして抜粋してます) *} <table class="table table-hover mt-5"> <thead> <tr> <th scope="col"></th> <th scope="col">メニュー</th> <th scope="col">回数</th> <th scope="col">セット数</th> <th></th> </tr> </thead> <p>{$date}</p> {foreach from=$menus item=$row} <tbody> <tr> <td></td> <td>{$row.menu}</td> <td>{$row.num}</td> <td>{$row.setnum}</td> {* ここで問題が起きてます(date) *} <td><a href="menu_delete.php?action=delete&id={$row.id}&date={$date->format('Ymd')} class="complate" name="delete">完了</a></td> </tr> </tbody> {/foreach} </table> <form action="insert.php" id="contact" method="post"> <div class="container"> <div class="head"> <h2>メニューを追加しましょう!</h2> </div> <input type="hidden" name="date" value="{$date}"></input> <input type="text" name="menu" placeholder="トレーニングメニュー"/><br /> <input type="number" name="num" placeholder="回数or秒数" /> <input type="number" name="setnum" placeholder="セット数"/><br /> <button id="submit" type="submit">追加</button> </div> </form>

php

1<?php 2//menu_delete.php 3require_once '../libs/init.php'; 4 5$pdo = db_connect(); 6try { 7 $pdo->beginTransaction(); 8 $id = $_REQUEST['id']; 9 $date = $_REQUEST['date']; 10 var_dump($date); 11 $delete = deleteTrainingMenu($pdo, $id, $date); 12} catch(PDOException $Exception) { 13 $pdo->rollBack(); 14 print 'エラー:'. $Exception->getMessage(); 15} 16 17if(isset($_REQUEST['action']) && $_REQUEST['action'] == 'delete' && $_REQUEST['id'] > 0) { 18 header("Location:menupost.php"); 19}

ちなみにdeleteTrainingMenu()はこちらです、

php

1function deleteTrainingMenu($pdo, $id, $date) 2{ 3 $sql = "DELETE FROM `trainingmenu` WHERE id = :id AND date = :date"; 4 $stmt = $pdo->prepare($sql); 5 $stmt->bindValue(':id', $id, PDO::PARAM_INT); 6 $stmt->bindValue(':date', $date, PDO::PARAM_INT); 7 $stmt->execute(); 8}

画面遷移

calendar.php(ここでカレンダーから日付を選択します。ちなみにここで日付データを持たせています)->menupost.php(ここでメニューを追加したり削除用のページに遷移したりします)->menu_delete.php(ここで削除機能を実行します。ですが日付のデータを持たせることができません)

上手くいかない原因の仮説

new Dateなどで現在時刻を取得できていないから?
パラメータがただの文字列としか扱われていないかも?


以上です。
コードが長くなってしまいましたが、お時間のある方はご回答よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

html

1<a href="menu_delete.php?action=delete&id={$row.id}&date={$date->format('Ymd')} class="complate" name="delete">

で " " の対応が不完全なので、

html

1<a href="menu_delete.php?action=delete&id={$row.id}&date={$date->format('Ymd')}" class="complate" name="delete">

と"を付け加えましょう。

投稿2020/09/11 14:09

seastar3

総合スコア2287

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kotouharuto

2020/09/11 23:33

ご回答ありがとうございます。 完全に忘れていました、試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問