下記ソースはどこが悪いでしょうか?
--------------------------------------
<html>
<body>
<form action=”index.php” method=”post”>
<input name=”choice_num” value=”” type=”text” />
<input name=”submit” value=”submit” type=”submit” />
<?php
if($_POST[’choice_num’]){
$fp = fopen(’goods.csv’,’r’);
while($line = fgetcsv($fp,1024)) {
if($_post[’choice_num’]==$line[0]{
echo $line[1];
}
}
}
?>
</body>
</html>
</form>
がないからではないでしょうか?
<html>
<body>
if($_POST[’choice_num’]){
$fp = fopen(’goods.csv’,’r’);
while($line = fgetcsv($fp,1024)) {
if($_POST[’choice_num’]==$line[0]{
echo $line[1];
}
}
}
?>
</body>
</html>
現在こうなってます。
これも同じでした・・・
------------------
<html>
<body>
これでボタンを押すと、「1」が残ったまま
何も起りません・・
if($_POST[’choice_num’]){
$fp = fopen(’goods.csv’,’r’);
while($line = fgetcsv($fp,1024)) {
if($_POST[’choice_num’]==$line[0]{
echo $line[1];
}
}
}
?>
</body>
</html>
http://www.php.net/manual/ja/language.variables.external.php
PHP: 外部から来る変数 - Manual
PHPのバージョンはいくつですか?
$_POSTのような変数が使えるのは4.1.0からです。
確認してみたらどうでしょうか?
以前のバージョンであれば $HTTP_POST_VARS としなければいけません。
バージョンは4.3.4です。
つい先日ダウンロードしました。
手元のマシンで試したところ、すでに指摘されている、
$_post[’choice_num’]
↓
$_POST[’choice_num’]
と、
if($_POST[’choice_num’]==$line[0]{
↓
if($_POST[’choice_num’]==$line[0]){
の修正(閉じカッコが無い)で作動しました。
私のほう、ダメです〜
php自体の問題なんでしょうか!?
ちなみに、商品一覧の「みかん」やらの
内容はどこに表示されるんでしょう?
まだ一度も表示されないので・・・
エラーが出ていないところを観ると、
if($_post[’choice_num’]==$line[0]{
の所が
if($_post[’choice_num’]==$line[0]){
のように括弧を閉めていない事は無いと思いますが、
忘れていたら括弧を閉じて下さい。
あと、goods.csvの中身ですが、仮に下記の様な内容だとすると、1を入れるとリンゴ、2を入れるとメロンが出るはずです。
1,リンゴ,200
2,メロン,1000
3,バナナ,100
また、csvファイルの中身が
リンゴ,1,200
メロン,2,1000
バナナ,3,100
のようになっていたら「1」を入れても見かけ上はなにもおこりません。
括弧は閉じたんですが、ダメでした。
goods.csvは一つ目の例にあるように
1,りんご
2,メロン
となっています。
if($_post[’choice_num’]==$line[0]{
ではなく、
if($_POST[’choice_num’]==$line[0]){
です。
動作確認もしました。
なお、goods.csvのデータは
1,fff
1,fff
としています。
<html>
<body>
<form action=”ss.php” method=”post”>
<input name=”choice_num” value=”” type=”text” />
<input name=”submit” value=”submit” type=”submit” />
<?php
if($_POST[’choice_num’]){
$fp = fopen(’goods.csv’,’r’);
while($line = fgetcsv($fp,1024)) {
if($_POST[’choice_num’]==$line[0]){
echo $line[1];
}
}
}
fclose($fp);
?>
</form>
</body>
</html>
まるまるコピーすてみましたが
ダメでした。
となると、私のマシンのphpがおかしいのですね。
ちゃんと自分で勉強しましょう。
でなければ分かる人に運営/制作を任せるべきです。
取り敢えずスクリプト書いておきますがあからさまな脆弱性を含むためこのままパブリックスペースで運用しないように。
また文字コードを考慮していないので日本語文字列は化ける/検索出来ない事があります。
取り敢えず 現状の知識 + はてな に頼るのがまちがいです。
---
<html>
<body>
<form action=”” method=””>
filename: <input type=”text” name=”filename”>
key: <input type=”text” name=”key”>
<input type=”submit” name=”submit”>
</form>
<hr>
<?php
error_reporting(E_ALL ^ E_NOTICE);
if (!file_exists($_REQUEST[’filename’]))
{
exit(”ファイル {$_REQUEST[’filename’]} は存在しません¥n”);
}
if (empty($_REQUEST[’key’]))
{
exit(”検索語が入力されていません¥n”);
}
$fp = fopen($_REQUEST[’filename’], ’r’);
while (!feof($fp))
{
$line = fgets($fp);
if(preg_match(”/{$_REQUEST[’key’]}/”, $line))
{
// ヘッダ
print ”<ol>¥n”;
// 行内容
$params = explode(’,’, $line);
foreach ($params as $param)
{
print ”¥t<li>”. htmlspecialchars($param) .”</li>¥n”;
}
// フッタ
print ”</ol>¥n”;
}
}
fclose($fp);
print ”<p>ファイル {$_REQUEST[’filename’]} の検索を完了しました。</p>”;
?>
</body>
</html>
すみません。
これをそのまま運用することは考えていませんし、
会社のホームページは専門業者にまかせています。
ただ、今後の為に本を見ながらやっていたのですが、
やりたいことが載っていないのと、
参考にできるものもわからずはてなで質問。
さらにそれを使って色々ためそうと思っている中
全く動かないので、聞いた次第です。
ご意見ありがとうございます。
また、頂いた内容は練習用に使わせていただきます。
if($_POST[’choice_num’]==$line[0]{
に)が足りないのではないでしょうか。
if($_POST[’choice_num’]==$line[0]){
です。
試しました。
phpを入れなおさないとダメみたいですね〜
goods.csvの中身がわからないのでなんとも言えませんが、 while の次の行で $_POST[’choice_num]、$line[0]、$line[1]を表示させてみて、実際に適切な値が得られているのか確認すれば良いと思います。
print ”NUM = ”. $POST[’choice_num’] . ”
”;
print ”line[0] = ”. $line[0] . ”
”;
print ”line[1] = ”. $line[1] . ”
”;
csvの中身は単純に
1,リンゴ
2,メロン
3,イチゴ
です。
教えていただいた方法で試してみます。
二度目の回答です。
もしかしてひょっとしてなのですが…
何度かここからコピペしている間に、全角の「’」や「”」が混在してる…なんてことはないですよね?(^-^;
手元で試したら、それで同じような現象が再現出来ましたので…。
はい、コピーすると全角の「”」などが混じったり
するので、手入力しています。
> phpを入れなおさないとダメみたいですね〜
原因特定が先だと思いますが。
可能性を上げればキリが無いのですが、取り敢えず PHP スクリプトと読込対象となる csv ファイルは同じディレクトリに設置してますか。
<? phpinfo() ?>
とだけ記入した PHP スクリプトファイルにブラウザからアクセスして正しく表示されるのであれば PHP のインストール自体に問題のある可能性は少ないと思います。
と表示されました。
2回目の回答です。
サンプルに若干手を加えて、一致しない場合「x」を表示するようにしてみました。
goods.csvの中身が
1,リンゴ
2,メロン
3,イチゴ
なので、「1」を入力して「submit」をクリックすると、
リンゴ
x
x
と表示されるはずです。
表示されない場合試しに表示されたページのHTMLコードを表示してみてどのようになっているか確認するといいかもしれません。
<html>
<body>
<form action=”index.php” method=”post”>
<input name=”choice_num” value=”” type=”text” />
<input name=”submit” value=”submit” type=”submit” />
<?php
if($_POST[’choice_num’]){
$fp = fopen(”goods.csv”,”r”);
while($line = fgetcsv($fp,1024)){
if($_POST[’choice_num’] == $line[0]){
echo ”
” . $line[1];
}else{
echo ”
x”;
}
}
fclose($fp);
}
?>
</body>
</html>
きっとスクリプト自体は間違っていないと思います。
そこで、
1)ファイルをアップロードする時の問題
2)goods.csvの問題
3)PHP自体の問題
等が考えられます。
・サーバのOSや、スクリプトを作成しているOSやソフトは何か?(バージョンも含めて)
・FTPに使っているソフトは何か?
等がわかると問題の切り分けも出来るような気がします。
また単純に文字を表示するだけのスクリプトを書いて実行できるか確認するのもいいかもしれません。
<html>
<body>
<?php
echo ”test
”;
?>
</body>
</html>
下に書いていただいたテストソースは
何も表示されません。
今の環境ですが、私のコンピュータで行っています。
*Windows2000Pro
*PHP 4.3.4
*Apache 1.3.28
*MIFESにて編集
試しに、問題なく動作するはずの
phpファイル(当社のホームページで使っているもの)
を私のPCで見てみましたが、表示されませんでした。
テキストの羅列となってしまいます。
という事は、私の入力した練習用PHPにも誤まりは
多々ありましたが、それ以前の問題という事ですよね。
なんかあせってきました(>_<)
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | accessmania | 62回 | 59回 | 0回 | 2004-03-29 17:50:19 |
変えてみましたが、同じでした・・・
四角のフォームに「1」と入れ「submit」ボタンを
押すという操作でいいんですよね?
ボタンを押すと「1」の数字も消えてしまい、
何もおこりません。