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

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

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

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

Q&A

解決済

1回答

1889閲覧

phpのフォームから、必要な要素だけを取り出す。

bakusoku

総合スコア16

PHP

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

0グッド

0クリップ

投稿2016/11/14 08:10

編集2016/11/18 05:20

phpについて。
番号(1,2,3、、、)、内容を含んだフォームを送信して、それをテキストファイルで、配列で保存します。
配列の各要素は、(1)のように番号から始まります。
その配列の各要素の番号だけを取り出したく、substr()の命令で、最初の2文字”(”+”番号”を取り出し、str_replace()で”(”部分を取り除きたいと思っています。
しかし、下記のプログラムを実行し、var_dumpで型の確認をすると、1番目のフォームのみ、番号の文字列の大きさがstring(1)ではなく、string(4)となってしまいます。
これをstring(1)となるようにしたいです。

ご指導をよろしくお願いいたします。

//フォーム

```ここに言語を入力 <form action="URL" method="post"> <table> <tr><td>名前:</td> <td><input type=text name="name"></td></tr> <tr><td>コメント:</td> <td><textarea name="comment" cols="30" rows="5"></textarea></td></tr> <tr><td><input type="submit" name="submit" value="送信"></td></tr></table> </form>
<!-- ファイルに番号、時間、名前、コメント等書き込む--> <?php if(isset($_POST["submit"])){ $fp1 = fopen('kadai_2_4.dat','r+'); $num = fgets($fp1); if (empty($num)){ $num =1;} fseek($fp1,0); //これは必要。なければ、1>2>23>2324....と続く。 fputs($fp1,$num + 1); //フォーム内容と送信時間、送信番号を書き込む。 $timestamp = date("Y/m/d H時i分s秒"); $name = $_POST["name"]; $comment = $_POST["comment"]; $file = "kadai_2_4.txt"; //.txtはフォーム内容 $fp2 = fopen($file, "a+"); fwrite($fp2, "(".$num.")|"."名前:".$name."|コメント: ".$comment."|投稿時間: ".$timestamp.""."\n"); fclose($fp2); fclose($fp1); }?> <!-- ファイルを読み込んで配列に変換、さらにリストに変換して画面表示する。--> <?php if(isset($_POST["submit"])){ $num_arr = array(); $content = file("kadai_2_4.txt"); foreach ($content as $list) : //リストは送信ファイル一つずつ $parts = explode("|", $list); //partsは送信ファイルの各要素を配列化したもの echo $parts[0]."===<br />"; var_dump($parts[0]); echo"===<br />"; $parts0 = substr($parts[0],0,2); $parts1 = str_replace("(","",$parts0); echo $parts1; var_dump($parts1); if($strlen = ""){$parts1=1;}else{ array_push($num_arr, $parts1); var_dump($num_arr);} ?> <?php foreach ($parts as $part):?><!--ここから再度、サイトに送信ファイルを記入する--> <table><tr> <?php echo $part;?> </tr></table> <?php endforeach; ?> <?php endforeach; }?>

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

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

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

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

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

kei344

2016/11/14 08:24

コードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
Y.H.

2016/11/14 08:24

番号の文字列の大きさがstring(1)ではなくstring(4)となる var_dumpの結果を提示いただかないと入力データが具体的に示されてないので誰にもわからないと思います。
guest

回答1

0

ベストアンサー

置き換えなどは使用しないで下記で取得してみてはどうですか?
先頭一文字は必ず"("ということなので、一文字目を無視して、
最初に出現する")"の位置の前までを抽出しています。

PHP

1$str = "(1)"; 2$num = substr($str, 1, strpos($str, ')') -1); 3

投稿2016/11/14 08:29

himakuma

総合スコア952

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

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

bakusoku

2016/11/14 12:25

ご指導ありがとうございます。 指示していただいた通りにやれば解決しました。 (1)の前には何も文字は記入していませんが、プログラムの結果としては(1)の前に3string分の何かがありました。 $str = "(1)";  //var_dump($str)=6になりました。 $num = substr($str, 3, strpos($str, ')') -1);  //4番目から、”)”の前まで取得しました。
Y.H.

2016/11/14 12:37

先頭3バイトということで、たぶん、入力ファイルがBOM付きUTF-8なのでしょう。 入力ファイルは windowsのメモ帳(notepad.exe)で作成されましたか? ソースファイルやデータファイルを作成する場合(文字コードがUTF-8の場合)、「BOM無し」で保存できる物で作成・編集しましょう。 メモ帳はBOM付きでしか保存できません。
bakusoku

2016/11/14 13:37

Y.H.さん、ご指摘ありがとうございます。 atomエディタに変更しました。
bakusoku

2016/11/14 17:27

ffftpで接続した状態でプログラムをアップロードし、ウェブ上でphpファイルを実行しているのですが、エディタを変更しても、BOMが消えません。 また、ffftpの接続設定で「ホストの漢字コード」を「無変換」から「utf-8」(BOMなしの方です)に変更すると、「無変換」のときにはなかった文法エラーが発生してしまいます。 ffftp接続において、BOMを消す方法を教えていただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問