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

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

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

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

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

Q&A

解決済

2回答

905閲覧

PHPでリダイレクト処理を行いたい

Cherry1217

総合スコア24

PHP

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

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

0グッド

0クリップ

投稿2019/05/14 13:44

PHPでデータ入力後にページを更新すると、入力されたデータがDBに保存され
重複データが表示されてしまうのでリダイレクト処理を使用して重複データが作成されないようにしたいのですが、処理が実行されずページを更新する度に大量のデータがDB に保存されてしまいます。
大量のデータが保存されてしまう原因が解らないので、アドバイス等お願いします。

PHP

1<?php 2 3ini_set('error_reporting', E_ALL); 4ini_set('display_errors', 1 ); 5 6 7//接続確認 8try{ 9 $dsn='mysql:dbname=morning glory;host=127.0.0.1'; 10 $user='root'; 11 $password='root'; 12 13 $pdo = new pdo( 14 $dsn,$user,$password,[ 15 //例外が発生した場合に、スローする(エラーをお知らせする) 16 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 17 //SQLを使用する際にその条件や値がおこなる場合、それをパラメータかしていろんな値や 18 //条件で使い回ししない 19 PDO::ATTR_EMULATE_PREPARES => false 20 ]); 21 22}catch (PDOException $e) { 23 header('Content-type: text/plain; charset=UTF-8', true, 500); 24 exit($e->getMessage()); 25 26 //接続終了 27 $pdo = null; 28 29} 30?> 31 32<!DOCTYPE html> 33<html lang="ja"> 34<head> 35 <meta charset="utf-8"> 36 <meta name="description" content="タスク"> 37 <title>タスク</title> 38</head> 39 40<body> 41 42 43 <form method="POST"> 44 <h>タスクを入力します</h> 45 <p><input type = "text" name = "text" size = "70"></p> 46 <p><input type = "submit" value = "タスクを追加する"></p> 47 </form> 48 49 <form cethod="POST"> 50 <p><input type = "button" value = "完了"></p>  51 52<ul>タスク一覧</br></u;> 53 54<?php 55 56if(!isset($_POST['text'])){ 57$errors = 'タスクが未入力です。'; 58}else{ 59 $task_name = $_POST['text']; 60} 61header('Location: http://localhost/PHP/'); 62 63try{ 64 $dsn='mysql:dbname=morning glory;host=127.0.0.1'; 65 $user='root'; 66 $password='root'; 67 68 $pdo = new pdo( 69 $dsn,$user,$password,[ 70 //例外が発生した場合に、スローする(エラーをお知らせする) 71 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 72 73 PDO::ATTR_EMULATE_PREPARES => false 74 ]); 75 76$sql1 = $pdo -> prepare("insert into task_information(task,Completion_status) 77values(:task_name,:Completion_status)"); 78$sql1 -> bindParam(':task_name',$task_name, PDO::PARAM_STR); 79$sql1 -> bindValue(':Completion_status', 1 , PDO::PARAM_INT); 80$sql1 -> execute(); 81 82$sql2 = "select task from task_information"; 83 84$res = $pdo->query($sql2); 85 86foreach($res as $value){ 87 echo '<input type = "checkbox" name = "text2" value ="'.$value['task'].'">'; 88 echo $value['task'].'<br/>'; 89} 90 91 92 93}catch (PDOException $e) { 94 header('Content-Type: text/plain; charset=UTF-8', true, 500); 95 exit($e->getMessage()); 96 97} 98 99 100 101?> 102</body> 103</html> 104

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

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

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

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

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

guest

回答2

0

テーブル定義がどうなっているか分からないとなんとも言えない部分があるのですが、PHP仕様的にNGなところがあります。
header()

覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。

現状の作りですと、header()実行前に必ず画面出力があります。
そのあたりはまず改善された方が良いかと(通常はエラー出るはずです)

PHPの処理はHTMLの出力より前に行うように書いたほうが間違いないです。
PHPの実行結果をHTMLに表示させたいときも変数に詰めておいてechoだけHTML内に書くとか、ロジック部分と画面出力部分を明確に分けると良いかなと。

投稿2019/05/14 13:59

m.ts10806

総合スコア80850

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

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

0

ベストアンサー

headerの前にHTMLがあるからでは。

【PHP: header - Manual】
https://www.php.net/manual/ja/function.header.php

覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。

投稿2019/05/14 13:46

kei344

総合スコア69400

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問