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

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

ただいまの
回答率

90.61%

  • PHP

    19810questions

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

【PHP】フォームデータの更新でテキストファイルの配列を入れ替える方法($_GET/ array_splice)

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,028

travijapan

score 1

【PHP関連】初心者のため読みづらいコードを書いている事は理解しております、何卒、ご容赦ください。
以下のForm.php側でテキスト内容を更新する場合に、修正したい配列の要素をうまく指定できません。原因をご教示願います。(恐らく★のついている行の$_GET["lineno"]に原因があると考えています。)
そもそも本を読みながら作っており、なぜどのファイルでも$_GETをフォームでメソッド指定しておらず、まだname属性も指定していないのに、データの受け渡しが使えるのかも調べてもわかりません。素人で、大変恐縮ですが、$_GETの使い方を含めご教示を願います。(例えばisset($_GET["lineno"])というのは、どのデータを受け渡された又はセットしたことを意味するのかがピントきません、$_POSTであれば、必ずHTML1側のフォームタグにメソッドとname属性を指定するので、その中にある、データをsubmitすることによりデータが受け渡される事はりかいできるのですが、素人で本当にすみません)
何卒、宜しくお願い申し上げ上げます。

【Form.php】
<?php
$filename ="//Applications/MAMP/htdocs/date.txt";
#上書きモードの場合

if(isset($_POST["uwagaki"]))
{

$Tenkai=file($filename);
★array_splice($Tenkai,$_GET["lineno"],1,$_POST["uwagaki"]."\n");

$fp2 = fopen ($filename,"w");

for ($i=0; $i<=count($Tenkai);$i++) {
fwrite($fp2,$Tenkai[$i]);

}
fclose($fp2);


}else{
#登録モードの場 合
$fp = fopen($filename, "a");
if(isset($_POST["date"]))
{
$date= $_POST["date"]."\n";
fwrite($fp,$date);
fclose($fp);
header("Location: http://localhost/List.php");
exit;
}
}

?>

<html lang=ja>

<h>Non-titled</h></br>

<form action="Form.php" method="post">
<?php
if (isset($_GET["lineno"])){


echo "<input type=\"text\" name=\"uwagaki\"" ;
}else{

echo "<input type=\"text\" name=\"date\"";
}




/*もし、入力後の?***であれば、 valueを入力しておく*/

if (isset($_GET["lineno"]))
{
$pick = file ($filename);
//txtファイルから配列を取得する
$switch = $pick[$_GET["lineno"]];
//$pick配列から、lineno番目の要素を向いてくる
echo "value=\"$switch\"";
}
?>
id="date">日
<input type="submit" name="regist"
<?php
if (isset($_GET["lineno"]))
{
echo "value=\"更新する\">";
}else{
echo "value=\"登録する\">";

}
?>

</form>

</html>

【List.php】
<!登録したものをlist化したページ>

<?php
$filename ="//Applications/MAMP/htdocs/date.txt";

$list = file($filename);

foreach ($list as $lineno => $contents)
{
$contents= str_replace("|","",$contents);
echo $lineno.":".$contents;
echo "<a href= \"Form.php?lineno=$lineno\">編集する</a>";
echo "<br>";
}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

$_GETか、$_POSTかですが、上記の例ではHTML本文中にPOSTメソッドを
指定されておられますので$_POSTに値が入るのではないでしょうか。

 <form action="Form.php" method="post"> 

GETメソッドとは、例えば、

http://localhost/List.php?regist=20150821&uwagaki=NANTOKA

の?より右側のようにURIとして name=valueの形で渡される形式になります。
今回の用途では、POSTが適していると思います。

プログラムには触れませんでしたが参考になれば幸いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/21 18:38

    ご回答頂き、有り難うございます。
    GETとPOSTについては理解が深まりました。
    ①http://localhost/List.php?×××
    ②http://localhost/List.php
    を同じ.phpファイルで操作するときに、②では$_POSTの値を引き渡したいが①の時に、同じPHPファイル内で,URIの?以降の値を取得する事は可能なのでしょうか、、、

    キャンセル

  • 2015/08/21 20:55

    <form action="Form.php" method="get">
    methodをPOSTからGETに書き直して、
    $_GET['NAME'] でフォーム中のVALUEを得ることが出来ます。
    フォームとプログラムで連動して変更すればOKです!

    キャンセル

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    PHP:簡易掲示板の編集機能

    PHPで簡易掲示板を作っております。 下記コードで編集機能を実装しようとしています。 「各投稿番号とPOST送信されてきた編集番号を比較し、等しい場合、配列値を取得する」 ことはで

  • 解決済

    phpで作成した簡易掲示板で投稿するごとに番号を1ずつ増やしていく方法

    php初心者です 今,phpで簡易掲示板を作成しています 一行ごとに「{番号}<>{名前}<>{コメント}<>{投稿された時間}」と言う形で保存していきたいのですが、投稿す

  • 解決済

    PHP:パスワードが一致したときのみ、投稿の削除をする簡易掲示板

    パスワードが一致したときの条件式をプログラムに書いても反応しません。/ファイル消去/ブロックの6行目あたりにあるif文のandの右側の条件式です。この式で使われている$delDat

  • 解決済

    phpのファイル書き込みについて

    さきほどphpで簡単な掲示板を作ってみたのですが、今度は違う書き方(簡単に)を自分なりに書いてみましたがうまくいきません。どこがどういけないのでしょうか? 今はファイルの書き込み

  • 解決済

    php 簡易掲示板の編集

    実現したいこと 簡易掲示板について。 テキストと送信ボタンがある掲示版を扱います。 フォームを送信すると、別に用意したテキストファイルに内容が保存され、そこから読みだされた内

  • 解決済

    掲示板の作成においてリロードしたら同じ投稿がされるのを防ぎたい

    名前、タイトル、本文を投稿することができる掲示板を作成しました。投稿に関してはなんの問題もありません。しかし、投稿が成功したあとに更新ボタンをおすとおなじ投稿が投稿されてしまいます

  • 解決済

    php 入力フォーム 表示が一回遅れる

    最近phpの学習を始めました。 そこで入力フォームを作成し、送信ボタンを押すと、入力フォームの下に順次送信内容が表示されていくというものを作っています。 詳細: ・入力フォーム

  • 解決済

    launchdで動かすとPermission deniedでエラーとなる

    前提・実現したいこと PHPで作成したBOTをMacのローカル環境で定期実行をしたいが、launchdで動かすとPermission deniedでエラーとなる 発生している問

同じタグがついた質問を見る

  • PHP

    19810questions

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

  • トップ
  • PHPに関する質問
  • 【PHP】フォームデータの更新でテキストファイルの配列を入れ替える方法($_GET/ array_splice)