PHP&MySQLの初心者です。
レンタルサーバーでPHP&MySQLを利用したいと思い、入門本を読みながらやっておりますが、PHPからMySQLのデータベースへ
入力しようとすると、
Warning: extract() expects first argument to be an array in /home/.sites/62/site118/web/ken4.php on line 12
のエラーがでます。
色々調べて行くとどうも「extract($_POST)」がPHPのバージョンによって使えないとの事までは解ったのですが、これを回避する方法がわかりません。
レンタルサーバーはPHP4(4.0.6)とMySQL(3.23)です。
是非ともご回答をお待ちしています。
ちなみに入門本のスクリプトは以下のものです。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<title>県データ登録</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>
<?php
extract($_POST);
if($ken<>''){
mysql_connect('××××','×××','××××');
mysql_select_db('×××');
$sql = "insert into todofuken values('$ken', '$kec', $jin, $men,)";
mysql_query($sql);
$ken = '';
echo "データを登録しました<br />";
echo "登録を続けますか <a href=\"ken4.php\">続行</a>";
exit;
}
?>
<p>データを入力してください</p>
<form action="ken4.php" method="post" >
<p>県 名:<input type="text" name="ken" size="40"></p>
<p>県庁所在地:<input type="text" name="kec" size="40"></p>
<p>人 口:<input type="text" name="jin" size="40"></p>
<p>面 積:<input type="text" name="men" size="40"></p>
<input type="submit" value="登録">
<input type="reset" value="リセット">
</form>
</body>
</html>
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
シフトJISだとインジェクション対策がかなりいろいろ引っかかりそうですが
たとえばmysql_escape_stringをつかってこんな感じにします。
今回の場合ですと外部からうけとる変数を'ken','kec','jin','men'に
しぼっています。そうしないと、ユーザーが任意で設定した変数を
勝手におくられてきた場合、想定外の挙動をとる可能性があります。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<title>県データ登録</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>
<?PHP
foreach(Array('ken','kec','jin','men') as $val){
if($_POST["{$val}"]!="") $$val=mysql_escape_string($_POST["{$val}"]);
}
if(isset($ken)){
$link=mysql_connect('××××','×××','××××');
mysql_select_db('×××',$link);
$sql = "insert into todofuken values('{$ken}','{$kec}', '{$jin}', '{$men}')";
mysql_query($sql,$link);
//print $sql;
unset($ken);
echo <<<eof
データを登録しました<br />
登録を続けますか <a href="{$_SERVER['PHP_SELF']}">続行</a>
eof;
}else{
echo <<<eof
<p>データを入力してください</p>
<form action="{$_SERVER['PHP_SELF']}" method="post" >
<p>県 名:<input type="text" name="ken" size="40"></p>
<p>県庁所在地:<input type="text" name="kec" size="40"></p>
<p>人 口:<input type="text" name="jin" size="40"></p>
<p>面 積:<input type="text" name="men" size="40"></p>
<input type="submit" value="登録">
<input type="reset" value="リセット">
</form>
eof;
}
?>
</body>
</html>
ありがとうございます。教えて頂いた方法でうまく行きました。
今までVBAでの経験はかなりあったので、PHP&MySQLもと思ってやり始めましたが、入り口で躓き気持ちが萎えかけていましたが、
一つステップがUP出来たので、また頑張れそうです。
本当に有り難う御座いました。
No.2
- 回答日時:
>>(実際には$valになんらかの処理をいれて危険要素を排除してください)
>の意味がイマイチ分かりません。
mysql_real_escape_string()や、文字コード問題やSQLインジェクションやクロスサイトスクリプティングについてしっかり調べましょう。
しっかり知識を得た上で対策をとらないと、公開サーバーにアップしたとたんに攻撃を受けてしまいます。
No.1
- 回答日時:
extract()自体が危険性を含む関数のため$_POSTなど
外からデータを持ちこむ際のご利用にはオススメできません。
ただ、どうしてもそれが必要で、なんらかの理由でうまく動かないので
あれば同様の処理は以下のようにしてみてはいかがでしょうか?
(実際には$valになんらかの処理をいれて危険要素を排除してください)
if(is_array($_POST))
foreach($_POST as $key=>$val){
$$key=$val;
}
早速のご意見有り難うございます。
Warning: extract() expects first argument to be an array in /home/.sites/62/site118/web/ken4.php on line 12
のエラーは回避出来ましたが、データベースに入力は出来ませんでした。
全くの初心者で申し訳ないのですが、
>(実際には$valになんらかの処理をいれて危険要素を排除してください)
の意味がイマイチ分かりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP php ログイン 1 2022/11/01 00:24
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<input type="hidden" >で配列...
-
PHPの関数実行
-
チェックボックスの初期選択と...
-
PHP ボタンが押されたら処理を...
-
HTMLで前の画面に戻る時、入力...
-
phpでの複数選択チェックボック...
-
PHPでフォームから任意の画像削...
-
PHPで、ボタンを押すと同じペー...
-
PHPを勉強中の専門学生です。 ...
-
DBの値をチェックボックスに反...
-
1つのphpファイルで、入力フォ...
-
php + javascriptで値の保持
-
複数行のデータ一括更新に関して
-
チェックボックスの必須項目指定
-
extract($_POST)
-
PHPのmysqlに格納したデータの...
-
テキストボックスに初期値を入れる
-
フォーム INPUTの文字化け対策...
-
php、HTML5に詳しいかた。H...
-
フォームボタンを押すたびに数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
HTMLで前の画面に戻る時、入力...
-
<input type="hidden" >で配列...
-
PHP ボタンが押されたら処理を...
-
検索時の選択内容を保持する方法
-
DBの値をチェックボックスに反...
-
ラジオボタンをsessionで使いたい
-
パラメーターを隠す
-
PHPで画像の渡しが上手く行きま...
-
フォームへの前回入力値をクリ...
-
フォームボタンを押すたびに数...
-
フォームでのリセットを使う方法
-
syntax error, unexpected '}' ...
-
PHPの関数実行
-
テキストボックスに初期値を入れる
-
phpで分からないエラーが出てし...
-
入力した部分を表示させたまま...
-
入力フォーム→確認画面→送信画...
-
画面が更新されてもチェックボ...
-
Javascript→PHPに...
-
配列をhiddenで
おすすめ情報