• ベストアンサー

ブラウザからの変数変更[PHP]

こんにちは。 PHPスクリプトの配布プロジェクトを運営しております。 早速ですが、質問です。 インストールプログラムを作ろうと思い、パスワードの設定のページを作成したのですが、$_POSTを使用しデータを受信するところまではうまくできました。 しかし、そこから./config/instdata.phpの中の変数、 $adminpass = ""; に保存する方法がわかりません。 fopen()関数を使用したらできるかもしれないと思ったのですが、詳しい方法がわかりません。 どなたか、教えていただければ幸いです。 ソースは、以下になります。 [../install/index.php] <途中略(<head>など)> <form method="post" action="../install/passcheck.php"> <input type="password" style="width:350px; height:50px; display:block; font-size:35px;" name="password"> <input type="submit" value="送信" style="width:150px; height:50px; letter-spacing:30px; font-size:20px; font-weight:bold;"> </form> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [../install/passcheck.php] <?php $pass = $_POST["password"]; ?>   ・   ・   ・ <以下略> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [../config/instdata.php] <?php $adminpass = ""; // 現在は、設定していません。 <以下略> ?> passcheck.phpは、パスワードの保存用ファイルです。 ここで変数「$adminpass」にパスワードの保存をしたいと思っています。 長文失礼しました。回答をお待ちしております。

  • PHP
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • nicolish
  • ベストアンサー率72% (13/18)
回答No.2

$string = "<?php\n" . '$adminpass = ' . $_POST['pass'] . ";\n" . '?' . '>'; file_put_contents('./config/instdata.php', $string); プログラムの構造がおかしくなるような危険な文字列などを排除するのを忘れないようにしましょう。 というか、phpファイルを動的に生成するのは危険すぎるので、普通はファイルなりDBなりに適当に書き出して、PHPからそれを読み出すような処理をします。

ri19960913
質問者

お礼

すいません。自己解決しました。 $string = "<?php\n" . '"' . '$adminpass = ' . $_POST['pass'] . '"' . ";\n" . '?' . '>'; file_put_contents('./config/instdata.php', $string); で実験したところ、行きました。 お二方、ありがとうございました! 感謝です!

ri19960913
質問者

補足

ありがとうございます。 先ほど試したところ、正常に変更されました。 また、質問で申し訳ないのですが、 保存すると、 <?php $adminpass = 12345; ?> のようになります。 パスワードをダブルクォーテーション(")で囲みたいのですが、どのようにすればよいでしょうか? $string = "<?php\n" . '$adminpass = ' . "$_POST['pass']" . ";\n" . '?' . '>'; file_put_contents('./config/instdata.php', $string); や、 $string = "<?php\n" . '$adminpass = ' .". $_POST['pass'] .". ";\n" . '?' . '>'; file_put_contents('./config/instdata.php', $string); など、いろいろ試したのですが、いきません。 どうか、よろしくお願いします。

その他の回答 (1)

回答No.1

[../config/instdata.php] こちらのファイルを、スクリプト実行時にインクルードするなりして 簡単に使えるようにする…ということですよね? http://php.benscom.com/manual/ja/function.var-export.php 関数 var_export を使うと便利です。 この関数に配列を渡すと、 array(   :   : ) という感じの文字列で返ってくるので、それを使います。 // まず設定ファイルの中身を読み込み $conf = include('../config/instdata.php'); // 新たな設定を上書き $conf['adminpass'] = $pass; // ファイルを開く $fp = fopen('../config/instdata.php', 'w') or die('ファイルを開けません'); // 書き込む文字列 $str = '<?php return '; $str .= var_export($conf, true); $str .= '?>'; // 書き込み fwrite($fp, $str); // ファイルを閉じる fclose($fp); とっても単純につくると、上のようになります。 本来ならファイルが壊れるのを防ぐために、ファイルロックの機構を施したりします。 このようにすると、../config/instdata.php は <?php return array(   :   : ) ?> みたいな内容になります。使うのも簡単で、設定ファイルを読み込みたいページから $conf = include('../config/instdata.php'); とするだけで読み込めます。 分かりにくい説明でスミマセン;

関連するQ&A

  • PHPについて質問です。

    PHP超初心者です。 初めて変数の変更プログラムを作ってみたのですが、 Warningエラーが出て、一部の機能が有効になりません。 henkou.php ↓↓↓↓ <?php $oldpass = $_POST["oldpass"]; $newpass = $_POST["newpass"]; $newpass2 = $_POST["newpass2"]; ?> <html> <head> <title>変数変更テスト</title> <meta name="robots" content="noindex,nofollow"> </head> <body> <form method="post" action="/henkou.php"> 古いパスワード:<input type="password" name="oldpass"><br> 新しいパスワード:<input type="password" name="newpass"><br> 新しいパスワード:<input type="password" name="newpass2"><br> <input type="submit" value="送信"> </form> <?php require "/conf/config.php"; if ("$oldpass != $password") { echo "パスワードが一致しません"; } else { echo "パスワード変更が完了しました。"; $password_file = file("/conf/config.php"); $password_file = str_reprace ("\"$password\" = \"$newpass\""); SaveFile("/conf/config.php"); } ?> </body> </html> config.php ↓↓↓ <?php $password = ""; // 設定前なので空白です ?> エラーは、 Fatal error: require() [function.require]: Failed opening required '/conf/config.php' (include_path='.:/usr/local/lib/php') in /home/***.net/henkou.php on line 21 と、 Warning: require(/conf/config.php) [function.require]: failed to open stream: No such file or directory in /home/***.net/henkou.php on line 21 ここからが本題ですが、 上のプログラムが正しいかどうか、確認していただきたいのです。 また、間違えている部分があったら、ご指導いただければと思います。 どなたか、手助けをお願いします!

    • ベストアンサー
    • PHP
  • php パラメータ

    新規登録として登録できたら別ウインドウに遷移せずそのままtopに戻し戻ってきたらデータが登録されているようにしたいですがなかなか出来ません 調べたら、exec関数を使えばできるとのことですが $return_data = exec("/usr/local/bin/php ./top.php param1 = 1 m2 = 2"); こんな例がありましたが自分の力ではこのプログラムのどこを修正すればtop.phpに返ってくるかわかりません 下記は新規登録を行うための入力フォームです 登録するボタンを押したらそのままtopに移動したいのですがいまはinsert.phpに飛んでしまいます regist.php <html> <head><title>新規登録</title></head> <body> <blockquote> <form action = "insert.php" method = "POST"> <br><br>登録画面<br><br> すべての項目入力してください<br> 番号<input type="number" name = "ID"> (一覧画面にない番号を入力してください) <br> <br>氏名<input type="text" size = "50" name = "NAME"><br><br> 住所<input type="text" size = "130" name = "ADDR"><br><br> <a href="http://localhost/top.php"> <input type = "submit" value = "登録する" style ="font-size:20px; width: 100px; height: 40px"></A> <a href="http://localhost/top.php"> <input type = "button" value = "一覧に戻る" style ="font-size:20px; width: 100px; height: 40px"></A> </body> </blockquote> </form> </body> </html> 下記はinsert.phpです <!--insert.php 登録完了--> <html> <body> <blockquote> <?php $con=mysqli_connect("localhost","root","admin","db_test"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } if ($_POST['ID'] != '' && $_POST['NAME'] != '' && $_POST['ADDR'] != '') { $id = mysqli_real_escape_string($con, $_POST['ID']); $name = mysqli_real_escape_string($con, $_POST['NAME']); $addr = mysqli_real_escape_string($con, $_POST['ADDR']); $sql="INSERT INTO tbl_test (番号, 氏名, 住所) VALUES ('$id','$name','$addr')"; if (!mysqli_query($con,$sql)) { die('Error: ' . mysqli_error($con)); } echo "登録完了しました"; } else { echo "<br><br>データが未入力の箇所があります。すべてデータを入力してください"; } mysqli_close($con); $return_data = exec("/usr/local/bin/php ./top.php param1 = 1 m2 = 2"); ?> <br><br><br> <a href="http://localhost/regist.php"> <INPUT TYPE = "button" VALUE = "登録画面に戻る" style ="font-size:20px; WIDTH: 140px; HEIGHT: 40px"></A> <br><br><br> <A HREF="http://localhost/top.php"> <INPUT TYPE = "button" VALUE = "一覧に戻る" style ="font-size:20px; WIDTH: 140px; HEIGHT: 40px"></A> </blockquote> </body> </html> どこを直せばいいですか? 本格的に直さないとできないですか?

    • ベストアンサー
    • PHP
  • php データ新規追加

    入力フォームに入力された番号が登録されてなかったら新規登録できるようにしたい INSEPT IGNORE INTOで主キーを無視するのではなく重複したらエラーメッセージを出しユーザにもう一度入力させるようにする 新規登録フォーム <html> <head><title>新規登録</title></head> <body> <blockquote> <form action = "insert.php" method = "POST"> <br><br>登録画面<br><br> すべての項目入力してください<br> 番号<input type="number" name = "ID"> (一覧画面にない番号を入力してください) <br> <br>氏名<input type="text" size = "50" name = "NAME"><br><br> 住所<input type="text" size = "130" name = "ADDR"><br><br> <a href="http://localhost/top.php"> <input type = "submit" value = "登録する" style ="font-size:20px; width: 100px; height: 40px"></A> <a href="http://localhost/top.php"> <input type = "button" value = "一覧に戻る" style ="font-size:20px; width: 100px; height: 40px"></A> </body> </blockquote> </form> </body> </html> 登録を実行するフォーム <?php $con=mysqli_connect("localhost","root","admin","db_test"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } if ($_POST['ID'] != '' && $_POST['NAME'] != '' && $_POST['ADDR'] != '') { $id = mysqli_real_escape_string($con, $_POST['ID']); $name = mysqli_real_escape_string($con, $_POST['NAME']); $addr = mysqli_real_escape_string($con, $_POST['ADDR']); $sql="INSERT INTO tbl_test (番号, 氏名, 住所) VALUES ('$id','$name','$addr')"; if (!mysqli_query($con,$sql)) { die('Error: ' . mysqli_error($con)); } header('Location: http://localhost/top.php'); exit(); } else { ?> <html> <body> <blockquote> <br><br>データが未入力の箇所があります。すべてデータを入力してください <br><br><br> <a href="http://localhost/regist.php"> <INPUT TYPE = "button" VALUE = "登録画面に戻る" style ="font-size:20px; width: 140px; height: 40px"></A> <br><br><br> <A HREF="http://localhost/top.php"> <INPUT TYPE = "button" VALUE = "一覧に戻る" style ="font-size:20px; width: 140px; height: 40px"></A> </blockquote> </body> </html> <?php } mysqli_close($con); ?> どういう風にselect文を書けばいですか?

    • ベストアンサー
    • MySQL
  • PHPでエラーを元の画面にかえすには

    エラーメッセージを次の画面に行かずに 新規登録ボタンを押したら エラー表示を入力している画面に 表示するにはどうしたら出来ますか? javascriptは触れたことがないので使いたくないです ありましたら簡単なサンプルも教えて下さい 下記は入力フォームです <html> <head><title>新規登録</title></head> <body> <blockquote> <form action = "insert.php" method = "POST"> <br><br>登録画面<br><br> すべての項目入力してください<br> 番号<input type="number" name = "ID"> (一覧画面にない番号を入力してください) <br> <br>氏名<input type="text" size = "50" name = "NAME"><br><br> 住所<input type="text" size = "130" name = "ADDR"><br><br> <input type = "submit" value = "登録する" style ="font-size:20px; width: 100px; height: 40px"> <a href="http://localhost/top.php"> <input type = "button" value = "一覧に戻る" style ="font-size:20px; width: 100px; height: 40px"></A> </body> </blockquote> </form> </body> </html> 空白だったら入力フォームにエラー表示し再度ユーザに入力させたい

    • ベストアンサー
    • PHP
  • PHP初心者です。何処がエラーなのかさっぱり解りません。

    超初心者です。 PHPの勉強を始めたばかりで、いきなりつまずいています。 下記の表示になりエラーになっているのですが、何処がエラーなのか意味が解りません。 Parse error: syntax error, unexpected $end in C:\xampp\htdocs\phplesson\03\login.php on line 31 どなたか教えてください。 よろしくお願いします。 ----------------- <?php session_start(); $error_message = ""; //ログインボタンが押されたかを判定 if (isset($_POST["login"])) { if ($_POST["member_name"] == "php" && $_POST["password"] == "password") { //ログインが成功した証拠をセッションに保持 $_SESSION["login_name"] = $_POST["member_name"]; //管理者専用画面へWebブラウザをリダイレクトさせる $login_url = "http://{$_SERVER["HTTP_HOST"]}/phplesson/03/anq_result.php"; header("Location: {$login_url}"); exit; } $error_message ="メンバー名かパスワードを間違えています。"; } ?> <html> <body> <?php if ($error_message) { print '<font color="red">' .$error_message. '</font>'; } ?> <form action="/phplesson/03/login.php" method="post"> メンバー名:<input type="text" name="member_name" value="" /><br /> パスワード:<input type="password" name="password" value="" /><br /> <input type="submit" name="login" value="ログイン" /> </form> </body> </html>

    • ベストアンサー
    • PHP
  • 悪戦苦闘PHP セッション変数

    毎日悪戦苦闘しながらすごしずつプログラムができるようになって来ました。今越えられないで困っている問題がありまして、ご教授していただきたくて投稿しました。下のようなプログラムを実行しますと Warning: session_register() [function.session-register]: Cannot send session cookie - headers already sent by (output started at C:\Apache Group\Apache2\htdocs\sample\test.php:3) in C:\Apache Group\Apache2\htdocs\sample\test.php on line 30 となってしまいます。なぜか昨日は上手く行っていたのですが、今日こんなエラーがでて解決できないでいます。ためしにtmpに保存されていたセッションファイルを削除してみたりしたのですがだめでした。原因が分かる方是非ご教授お願いいたします。 <?php //セッション変数の保存フォルダのパス session_save_path("C:/Apache Group/Apache2/htdocs/sample/tmp"); if(isset($_POST[simei]) and isset($_POST[pass])){ $con=sqlite_open("../SQLiteManager/php_db"); $sql = "select * from **** where **** = '$_POST[****]' and **** = '$_POST[*****]'"; $result = sqlite_query($con,$sql); $row = sqlite_num_rows($result); if($row==0){ $not= "正しくありません"; } else{ //////////セッション変数設定//////////// session_start(); session_register("simeix","passx"); $_SESSION[simeix]=$_POST[simei]; $_SESSION[passx]=$_POST[pass]; //////////////////////////////////////// header("location: abcdefg.php"); exit(); } } else{ echo "ハンドルネーム、パスワードを入力してください。"; } ?> <html> <body> <div id=a> <table><tr><td><font color="#ffffff"> <B>ログイン</b></font></td> </tr> <tr><td> <form action="acntop.php" method="post"> <font color="#ffffff">HDネーム:</font><input type="text" name="simei"value="" > <font color="#ffffff">パスワード:</font><input type="password" name="pass" value=""> <input type="submit" value="送信"> </form> </td> </tr></table> <?=$not;?> </div> </body> </html>

    • ベストアンサー
    • PHP
  • PHPのセッションについて

    PHPのセッションについて 現在ログインフォームを作成しているのですが、 ログインフォームからIDとパスワードを送信して、合っていれば セッションを発行してロケーションで飛ばそうと思っているのですが、 初回時にIDとパスワードを入力して送信しても、セッションが引き継がれず 2回目以降だとセッションが引き継がれる症状に悩んでおります。 どなたかご教授ください。 宜しくお願いいたします。 【login.php】-------------------------------- <?php session_name("stock"); session_start(); $error_flag = 0; if(isset($_POST["login"])){ $id = htmlentities($_POST["id"],ENT_COMPAT); $password = trim(htmlentities($_POST["password"],ENT_COMPAT)); if($login_id == $id && $login_pass == $password){ $_SESSION["id"] = $id; $_SESSION["password"] = $password; header("Location:stock.php"); exit; }else{ $error_flag = 1; } } echo <<<EOD <form method="post" action="login.php" id="login"> <input type="text" name="id" id="id" > <input type="password" name="password" id="password"> <input type="submit" name="login" value="ログイン" /> </form> EOD; 【stock.php】--------------------------------- <?php session_name("stock"); session_start(); echo $_SESSION["id"]; echo $_SESSION["password"]; ?>

    • ベストアンサー
    • PHP
  • フォームから受け取ったデータを変数に/PHP

    入力フォームからデータを送信し、受け取ります。 <form action="index.php" method="post"> <input type="text" name="hoge"> <input type="submit"> </form> <?php echo htmlspecialchars($_POST['hoge']); ?> この時に受けったデータが、「りんご」だとして この「りんご」を変数にしたいです。 ↓ <?php $keyword = "りんご"; ?> このようにするには、 <form action="index.php" method="post"> <input type="text" name="hoge"> <input type="submit"> </form> <?php echo htmlspecialchars($_POST['hoge']); ?> の後にどのような処理をすればよいでしょうか? または初めから「$keyword」としてフォームからデータを送ることはできるのでしょうか? 何卒ご指導の程よろしくお願いします。

    • ベストアンサー
    • PHP
  • php $_SESSIONでデータが残らない。

    いつもお世話になり誠にありがとうございます。 標記の件。 インプット画面ー>確認画面ー>戻るー>インプット画面 インプット画面に戻った時、どうしても最初のインプット画面で打った内容が消えてしまいます。 プログラムを診て、誤りを指摘して頂けないでしょうか? 今度はCSSなども書きます。 どうぞよろしくお願い致します。 記 <?php session_start(); $mode = 'input'; if( isset($_POST['back']) && $_POST['back'] ){ //何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ $_SESSION['name'] = $_POST['name']; $_SESSION['email'] = $_POST['email']; $_SESSION['category']= $_POST['category']; $_SESSION['message'] = $_POST['message']; $mode = 'confirm'; } else if( isset($_POST['send']) && $_POST['send'] ){ $mode = 'send'; } else { $_SESSION['name'] =""; $_SESSION['email'] =""; $_SESSION['category']=""; $_SESSION['message'] =""; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta http-equiv="content-type" content="text/html" charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>ブログ</title> <meta name="description" content="このWebサイトは、初めてHTMLで作るブログページです。"> <link rel="stylesheet" href="./css/style.css"> <style> body{ width: 100%; max-width: 800px; margin-top: auto; margin-left: auto; margin-right: auto; background-color: rgb(71, 133, 157); padding: 10px; text-align: center; } div{ background-color: rgb(247, 248, 245); padding: 2em; } script{ margin-top: 12em; } p { margin-left: 2em; text-align: left; font-size: 25px; font-weight: bold; color: rgb(10, 10, 10); } form { font-size: 25px; font-weight: bold; color: blue; } input { font-size: 25px; margin:auto; } </style> </head> <body> <div class="v_line_fix"> <h1>Blog K・T</h1> <h2><a href="index.html">トップページ</a></h2> <?php if( $mode=='input'){ ?> <form method=post> お名前(ニックネーム)<br> <input type="text" name="name" value="<?php echo $_SESSION['name'] ?>"><br> Eメール<br> <input type="email" name="email" value="<?php echo $_SESSION['email'] ?>"><br> カテゴリー<br> <input type="text" name="category" value="<?php echo $_SESSION['category'] ?>"><br> 本文<br> <textarea style="font-size:1.5em;" cols="30" rows="80" name="message"><?php echo $_SESSION['message'] ?></textarea><br> <input type="submit" name="confirm" value="確認" /> </form> <?php }else if( $mode=='confirm'){ ?> <!--確認画面--> <form method="post"> <?php echo $_SESSION['name']?><br> <?php echo $_SESSION['email']?><br> <?php echo $_SESSION['category']?><br> <br> <?php echo nl2br($_SESSION['message'])?><br> <input type="submit" name="back" value="戻る"/> <input type="submit" name="send" value="送信"/> } </form> <?php } else { ?> <!--完了画面--> <?php } ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPの基礎を勉強している初心者です

    formタグで入力した情報を指定のページへ飛ばしたいのですが、出来ません。 以下のコードをローカルサーバで試しているのですが、submitボタンを押してもリンク先のページに飛ばないという状況です。 問題点を指摘頂きたいです。 <form method="post" action="check.php"> <input name="nickname"type="text"style="width:100px"> <input type="submit" value=" 送信"> </form>

    • ベストアンサー
    • PHP

専門家に質問してみよう