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

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

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

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

Q&A

解決済

2回答

6142閲覧

php初心者です。issetの使い方がよくわかりません。

shoutikubai

総合スコア11

PHP

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

1グッド

0クリップ

投稿2016/08/08 08:10

編集2016/08/08 08:50

issetをつかって、名前とコメントを入力したときと、空白のときで、働くプログラムを変更したいのですが、やり方がよくわかりません。

###該当のソースコード

php

1<form action="kadai_2_2_1.php" method="post" > 2名前を入力してください。<br/> 3<input type="text" name="name" value="" /><br/> 4コメント<br/> 5<textarea name ="comment"cols="50" 6 7rows="5"></textarea><br /> 8<input type="submit" name="toukou" value="投稿" 9 10/> 11 12</form> 13 14 15<?php 16if(isset($_POST["toukou"])){ 17if((isset($_POST["name"])) and (isset($_POST 18 19["comment"]))){ 20$number = file_get_contents("counter.txt"); 21$name = $_POST["name"]; 22$comment = $_POST["comment"]; 23$date = date('Y-m-d-G-i'); 24 25$file_number = "kadai_7.txt"; 26$number_array = file( $file_number ); 27 for( $i = 0; $i <= count($number_array );++$i ){ 28 $number++ ;} 29 30 31 32$fp = fopen("kadai_7.txt", "a"); 33fwrite($fp, 34 35"$number'<>'$name'<>'$comment'<>'$date\n"); 36fclose($fp); 37 } 38} 39 40$file_name = "kadai_7.txt"; 41 42 $ret_array = file( $file_name ); 43 44 45 for( $i = 0; $i < count($ret_array); ++$i ) { 46 $line = explode( '<>', $ret_array[$i]); 47 echo ( $ret_array[$i] . "<br />\n" ); 48 } 49 50 51 52?> 53 54

###試したこと
ifとissetを使って、
if(isset($_POST["toukou"])){
if((isset($_POST["name"])) and (isset($_POST["comment"])))
として、
名前とコメントに書き込まれた場合のみテキストファイルに書き込まれるようにして表示したいのですが、名前とコメントが空白の場合でも、テキストファイルに空白の結果が書きも込まれて表示されてしまいます。名前とコメントが空白の場合はテキストファイルに書き込まれないようにして、書き込まれた場合の値のみ表示されるようにしたいのですが、どうすればよいのでしょうか?
どうかお願いします。

KiyoshiMotoki👍を押しています

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

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

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

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

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

kei344

2016/08/08 08:17

「プログラムが働いてしまう」とは「どの部分が」「どうなると思って」「どうなったのか」をお書きください。コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「</>」ボタンを押すとコードブロックになります。
guest

回答2

0

ベストアンサー

php

1<?php 2ini_set('display_errors', 1); 3error_reporting(E_ALL); 4 5date_default_timezone_set('Asia/Tokyo'); 6 7if (null != filter_input_array(INPUT_POST)) { 8 $name = filter_input(INPUT_POST, 'name'); 9 $comment = filter_input(INPUT_POST, 'comment'); 10 11 if (!empty($name) && !empty($comment)) { 12 $number = file_get_contents("counter.txt"); 13 $date = date('Y-m-d-G-i'); 14 15 $file_number = "kadai_7.txt"; 16 $number_array = file($file_number); 17 for ($i = 0; $i <= count($number_array); ++$i) { 18 $number++; 19 } 20 21 $fp = fopen("kadai_7.txt", "a"); 22 fwrite($fp, "$number'<>'$name'<>'$comment'<>'$date\n"); 23 fclose($fp); 24 } 25} 26 27$file_name = "kadai_7.txt"; 28 29$ret_array = file($file_name); 30 31$lines = array(); 32for ($i = 0; $i < count($ret_array); ++$i) { 33 $lines[] = explode('<>', $ret_array[$i]); 34} 35?> 36<!DOCTYPE HTML> 37<html lang="en-US"> 38 <head> 39 <meta charset="UTF-8"> 40 <title></title> 41 </head> 42 <body> 43 <form action="" method="post" > 44 名前を入力してください。<br/> 45 <input type="text" name="name" value="" /><br/> 46 コメント<br/> 47 <textarea name ="comment"cols="50" rows="5"></textarea><br /> 48 <input type="submit" name="toukou" value="投稿" /> 49 </form> 50 51 <div> 52 <?php foreach ($lines as $line) : ?> 53 <?= implode(' | ', $line); ?><br> 54 <?php endforeach; ?> 55 </div> 56 </body> 57</html>

投稿2016/08/08 08:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2016/08/08 08:30

XSS脆弱性あるけど、ご自身で対策コード追加しておいてください。
KiyoshiMotoki

2016/08/08 08:46

Kosuke_Shibuya様  <html lang="en-US"> は  <html lang="ja-JP"> ではないでしょうか? また、  if (!empty($name) && !empty($comment)) 部分について、empty() だと入力欄に "0" と入力されたときに誤判定してしまう(※)ので、  if (strlen($name) > 0 && strlen($comment) > 0) のほうが良いかと思います。 ※ http://php.net/manual/ja/function.empty.php  > 次のような値は空であるとみなされます。  > ...  > ・"0" (文字列 の 0)
退会済みユーザー

退会済みユーザー

2016/08/08 08:49

> <html lang="en-US"> emmet のテンプレのまんまだった…w empty の誤判定にまでは触れませんでした。ファイル名が、kadai.... 所詮課題...
KiyoshiMotoki

2016/08/08 08:59

Kosuke_Shibuya様 返信ありがとうございます。 本気の回答でしたので、本気でチェックさせていただきましたw
asahina_dev

2016/08/08 09:18

・w・ シングルクォートがのこるなんてきづいてはいけない
shoutikubai

2016/08/08 09:33

こんなに詳しい回答ありがとうございます。 ベストアンサーにさせていただきました。
退会済みユーザー

退会済みユーザー

2016/08/08 09:38

> 本気の回答でしたので、本気でチェックさせていただきましたw ありがとうございます。 でも、回答には10分以上かけないようにしています。ボランティアだし。 > シングルクォートがのこるなんてきづいてはいけない 気づかないふりしました。 仕様ではないというエビデンスがないので… > こんなに詳しい回答ありがとうございます。 いえいえ、手抜き回答ですよ。プロダクトレベルではありません。
guest

0

issetは変数がセットされていること、そして NULL でないことを検査するものです
NULL 以外の値をとれば TRUE、 そうでなければ FALSE を返します。
空白は TRUE を返します。
この場合は

php

1if (!empty($_POST["toukou"])

だとおもいます。

投稿2016/08/08 08:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

shoutikubai

2016/08/08 09:34

issetについての解説ありとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問