くだすれPHP(超初心者用)5at PHP
くだすれPHP(超初心者用)5 - 暇つぶし2ch441:nobodyさん
09/01/19 00:22:12
いやPOSTでもいいけど

442:nobodyさん
09/01/19 04:21:49
>>437
よく意味がわからんが・・・

<form name="form1" method="post" action="hoge.php">
<input type="submit" onclick="return check();" />
名前:<input type="text" name="name" />
</form>
<script type="text/javascript">
function check(){

  //checkコード
  if (document.form1.name=='') {
    alert('名前が入力されていません');
    return(false);
  }

  return(true);

}
</script>


あとはhoge.phpでnameを受けとってセッション変数に放り込むなり好きにするヨロシ。

443:nobodyさん
09/01/19 04:44:39
ただのjavascriptの話になってるw

444:nobodyさん
09/01/19 17:58:38
うわわわわ。。。
issetでもisSetでも書けるくさいなぁ(´・ω・`)

445:nobodyさん
09/01/19 20:15:28
str_replaceよりpreg_replaceが速いのか

446:nobodyさん
09/01/20 00:26:44
>>445
それはありえない
preg_replaceは正規表現の処理が入る分遅くなる
ついでにいうと、単純な置換ならstrstrよりstr_replaceの方が速い

447:445
09/01/20 00:28:42
>>446
じゃあここのはウソってことか。。。

URLリンク(phpspot.org)

448:nobodyさん
09/01/20 00:37:17
うん

449:nobodyさん
09/01/20 00:58:56
>>447
そのサイトは検証もせずコピペしてるだけだからあまり鵜呑みにしない方がいい

450:nobodyさん
09/01/20 01:55:00
原文はこう書いてある。
str_replace is faster than preg_replace, but strtr is faster than str_replace by a factor of 4

PHPの勉強の前に、まず英語勉強しようぜ

451:nobodyさん
09/01/20 06:28:50
>>450
その原文の出典ってどこ?

452:nobodyさん
09/01/20 07:38:55
>>447のリンク先

453:nobodyさん
09/01/20 12:58:32
>>447
記事がうそじゃないとしても、2年も前だとあまり当てにならないな。
5.1.x時代だっけ

454:nobodyさん
09/01/20 14:17:46 auDP4Xko
sql文の中に多数の変数を入れるにはどうしたらよいのでしょうか?

455:nobodyさん
09/01/20 14:24:08
普通に文字列連結じゃだめなの?
意図がいまいちわからない。

あ、エスケープはしっかりしろよな。


456:454
09/01/20 20:16:30
>>455
はい普通に . でした
6時間前の自分にゲンコツしときました

457:nobodyさん
09/01/20 23:14:20 FkFXLWeK
URLリンク(php5.seesaa.net)

ここを見ながら勉強中で、ひとつ前の
Step9・入力された値をPHPでチェックする
まではうまくいったんですが、
Step10・入力された値をJavaScriptでチェックする
が、うまくいきません。イントラネットとかいうのが関係してるんでしょうか。。
何度も確認したんですけど、警告ウインドウが出てきません

458:nobodyさん
09/01/20 23:21:44
問題の切り分けすべし

459:nobodyさん
09/01/21 03:11:36
まずなにも入れないで計算してみて。
あとjavascript有効になっている?


460:nobodyさん
09/01/21 09:46:52 VkT7uFdT
>>459さん
javascriptは、セキュリティのところでいじればいいんですよね。
それでしたら有効になってます。
なにも入れないで計算すると
-------------------
+=0

前の画面へ戻る
-------------------
って出ます。IEから見るソースは
-------------------

<html>
<head>
<title>calc.php</title>
</head>
<body>
+=0
<br/>
<br/>
<a href="#"onclick="history.back();return false;">前の画面へ戻る</a>

</body>
</html>
------------------------------
です。
書いてるソースのほうは
URLリンク(php5.seesaa.net)
にあるとおりだと思います。

461:nobodyさん
09/01/21 10:44:16
calc.htmlはどうなっているの?
最初に実行するプログラムはなに?
calc.htmlだよね?
そこからcalc.phpで処理してってことだけど、
form action とか大丈夫これどうり記述しているよね?
jsも読み込んでいるよね。
パスもあっているよね?



462:nobodyさん
09/01/21 13:51:32 ruw5pBd2
<input type="text" name="名前" size="20" />
<?
$line = "==名前==";
$line = ereg_replace("==(.*)==", $_REQUEST["\\1"], $line);
?>
上記スクリプトで $line を name="名前" のフォーム値に置換したい
のですができません。どうすれば置換できるでしょうか?

463:nobodyさん
09/01/21 14:09:33
マニュアル見れ
あとeregよりpreg

464:nobodyさん
09/01/21 14:58:58 VkT7uFdT
>>461さん
calc.htmlのソースは

---------------------------
<html>
<head>
<script type="text/javascript"src="calc.js"></script>
<title>calc.html</title>
</head>
<body>
<form name="form1"action="calc.php"method="post">
<input type="text"name="txtA"id="txtA">

<select name="selOpe"size=1>
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>

<input type="text"name="txtB"id="txtB">=?
<br>
<input type="submit"value="計算">
<input type="reset"value="クリア">
</form>
</body>
</html>
-------------------------------------
です。パスがあっているかどうかは、どこを見るとわかりますか?

465:nobodyさん
09/01/21 15:12:50
>>464のソースの中を見ればわかりますよ!( ^∀^)b

466:nobodyさん
09/01/21 15:27:54
sample012
の中にはなにが入っている?
sample011までPHPは動いていたんだよね?
わからん。
ほんと。URLリンク(php5.seesaa.net)
と同じことしているんでしょう?
calc.jsもsample012のフォルダの中にはいっているんでしょう?
ソースはコピペしてやっているんでしょう?



467:nobodyさん
09/01/21 16:23:54 VkT7uFdT
>>465さん
>>466さん
コピペしなおしたらできるようになりました。
でもどこが悪かったのかわからに・・

468:nobodyさん
09/01/21 19:35:45
考えられるのは、どっかに空白がはいってしまったこと。
なんか変な文字がどこかにはいってしまったか。
おれもコピペでそういうことになったことは
よくある。
見たとこミスはないので、あのソースをきちんと理解
して次進んでいいと思うよ


469:nobodyさん
09/01/21 21:43:57 VkT7uFdT
空白もいけないんですか
先生ありがとう

470:nobodyさん
09/01/21 22:33:22
いやあくまでも想像だけど、でも間違っているところがないから。
以後もし動かったら再度コピペすることを望みます。


471:462
09/01/22 10:25:52 PnoeEoeZ
>>463
すみません、マニュアル見直しました。
ところで、

$line = "==名前==";
//$line = preg_replace("/==(.*)==/e", "$_REQUEST['$1']", $line);
$line = preg_replace("/==(.*)==/e", "rep('$1')", $line);
function rep ($text) { return $_REQUEST["$text"]; }

コメント行の置換が動作せずに下記エラーが発生するのですが、
いちいちrepのようなfunctionを用意しなきゃいけないのでしょうか?

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING'
in /************/index.php on line 340

472:nobodyさん
09/01/22 10:36:31
preg_replace_callback じゃないのか

473:nobodyさん
09/01/22 12:54:40
$line = "==名前==";
$line= preg_replace("/==(\S*)==/e", 'sprintf("<input type=\"text\" name=\"$1\" value=\"%s\" />", isset($_REQUEST["$1"]) ? $_REQUEST["$1"] : "")', $line);

こうやりたいのか?

キー文字は==全角==じゃなくて==半角==がいいと思うが

474:473
09/01/22 13:16:38
htmlspecialcharsも使わないとやヴぁいか。。。

475:462
09/01/22 13:23:02 PnoeEoeZ
>>473
すいません、解決しました。バカみたい・・・
$line = preg_replace("/==(.*)==/e", 'sprintf("%s", $_REQUEST["$1"])', $line);

476:nobodyさん
09/01/23 05:27:52 L5uKYwrL
今初めてのPHP+mysqlを勉強しているのだが、
17章のサンプルアプリケーションが動かない。
これって仕様かな?
おれはcent os5でやったんだが、画面真白で。
linuxで誰かやってくれませんか?すいませんが
お願いします。ソースは一応レンタルサーバーと
ホームページ上に貼り付けているんで、
ソースダウンロードできないんだ。
URLリンク(gichioka.web.fc2.com)←ソースをダウンロード
URLリンク(www.krautgrrl.com)←データベース
とかもろもろ貼ってあります。
お手数ですが、よろしくお願いします



477:nobodyさん
09/01/23 05:29:33 L5uKYwrL
日本語へたで申し訳ないですが、まあ両方見てやってみてください。
ほんとはphpの本のスレに行きたかったんだけどなくなってしまった
みたいで。
すいませんが、よろしくお願いします


478:nobodyさん
09/01/23 05:34:48 L5uKYwrL
すいません。
サンプルコードありました。
昔はなかったのに
URLリンク(www.oreilly.co.jp)
ここです。


479:nobodyさん
09/01/23 07:37:08
オライリー本、
読んで理解できたためしがない

480:nobodyさん
09/01/23 08:08:21
>>478
エラーメッセージは?

481:nobodyさん
09/01/23 16:01:37
<?php
session_start();
$anc = array('anc1' => 'one', 'anc2' => 'two', 'anc3' => 'three'); $html = '<html><body><form action="">';
switch ($_REQUEST['m']) {
case '1':
$html .= 'confirm<br />';
foreach ($anc as $k => $v) { $_SESSION[$k] = $_REQUEST[$k]; if ($_REQUEST[$k]) { $html .= $v . '=checked! '; } }
$html .= '<br /><input type="hidden" name="m" value="2"><input type="submit" value="go!">';
break;
case '2':

482:nobodyさん
09/01/23 16:04:18
$html .= 'finish<br />'; $param = ''; foreach ($anc as $k => $v) { $_SESSION[$k] = $_REQUEST[$k]; if ($_REQUEST[$k]) { $param .= $v . '=checked! '; } }
if ($fp =@ fopen('anc.dat', 'a')) { fputs($fp, date("Y/m/d H:i:s ") . ' ' . $param . ' ' . $_SERVER["REMOTE_ADDR"] . "\n"); fclose($fp); } $html .= 'thank you!';
break;
default:
$html .= 'question<br />'; foreach ($anc as $k => $v) { $html .= '<input type="checkbox" name="' . $k . '" value="1">' . $v . ' '; }

483:nobodyさん
09/01/23 16:08:55
$html .= '<br /><input type="hidden" name="m" value="1"><input type="submit" value="next">';
}
$html .= '</form></body></html>'; echo $html; exit;
?>

パソコンが今使えないので携帯で消化してしまってごめんなさい
このプログラムのoneやtwoを別のファイルに記録したいんですが
どうすればよいでしょうか?
すごい初心者なので、良ければ具体的に教えていただければ嬉しいです
スレチや失礼あればごめんなさい

484:nobodyさん
09/01/23 16:11:58 Jr51+scJ
あと、これを一時間くらいでやらなきゃなので
テンパってます…
お待ちしてます

485:nobodyさん
09/01/23 16:34:47
初心者とかじゃなくて、
「oneやtwoを別のファイルに記録したいんですが 」
日本語か?それ。

486:nobodyさん
09/01/23 16:40:52 Jr51+scJ
すいません
やはり分かりにくかったですか


questionの解答がoneやtwoになっていて
その解答を記録したいんです
解答した日付時刻などはanc.datに記録されますが
なにを答えたかが記録出来てないと思うのですが

487:nobodyさん
09/01/23 16:58:18
>>486
なんかエラー出てると思うけどねぇ。
エラーを確認するのが解決への近道だよ。

たぶん、原因は↓かと。
$param .= $v . '=checked! ';

$param .= "{$v}=checked! ";
に変えてみたらどうかな?

488:nobodyさん
09/01/23 17:08:51 Jr51+scJ
>>487
あれ
paramじゃなくてそこはhtmlにではないですかね
僕の方では一応エラーは出てません

489:nobodyさん
09/01/23 17:21:03
>>486
セッションが引き回せていないだけ、ってオチじゃないの?
case '2'のところで、print_r($_SESSION)ってやってみれば?

490:nobodyさん
09/01/23 17:27:13 Jr51+scJ
>>489
すいません
どの辺りに入れたらいいかよろしければおねがいします
セッション引き回す?の意味がよく分からないのですが
…念のためお聞きしますが、このプログラムでは解答をファイルに書き込めないですよね?

491:nobodyさん
09/01/23 17:37:42
>>486
もう少し頭を整理したら?
回答はどのファイルに書き込むの?
> oneやtwoを別のファイルに記録したいんですが
回答毎に別のファイルを作るってことかい?

492:nobodyさん
09/01/23 17:39:39
//$_SESSION[$k] = $_REQUEST[$k];
//if ($_REQUEST[$k]) {
if ($_SESSION[$k]) {

493:nobodyさん
09/01/23 17:52:40
>>490
デバッグなんだから、どこでもいいよ。
とりあえず、聞く前に試したら?

セッションに代入した(はずの)後、
代入された(はずの)セッションを使う前

494:nobodyさん
09/01/23 17:58:15 Jr51+scJ
>>491
これをwebアンケートのようにしたときに
これを解答した人が何を選んだのか記録するファイルを作りたいんです
今はanc.datをつくればそこに日付等が記録されますが
できれば加えてone,two,threeのどれにチェックをつけたかも記録したいということです
記録するのがanc.datファイルでなくてもよいです

>>492
ありがとうございます!
それで上記みたいな事ができるでしょうか?
今は分かりませんが、夜に試してみます

495:nobodyさん
09/01/23 18:00:35 Jr51+scJ
>>493
自分でさっきいろいろ挿入してみました
どうしてもエラーが出てしまったので
あとで>>492を試してみます
ありがとうございます!

496:476です。
09/01/23 19:42:52 L5uKYwrL
エラーメッセージは
Warning: Unknown: Failed opening '/var/www/html/login.php' for inclusion (include_path='.:/usr/local/include/php/libs') in Unknown on line 0
でした。
わかる人いますか?
ぜんぜんわかりません。
ちなみにsmartyはURLリンク(hangar5.blog48.fc2.com)
でインストールしました。



497:nobodyさん
09/01/23 20:01:20
すんまそん、どなたか教えて下さい

あるphpで書かれたスケジューラを使っているのですが、ユーザ認証の際に
POSTで パスワードを受け取り($pwd)、これの一部をsaltとして使い、crypt()でパスワードを暗号化しています。
おおまかな処理は以下の様な感じで行っています(htmlspacialchars等は省きました)。

/* $userid, $pwd => POSTから受け取ったユーザ名・パスワード */
$ pwd_cr = crypt( $pwd, substr( $pwd, 3, 2 ) );

/* SQL文作成 */
$sql = "SELECT id, passwd FROM users ";
$sql .= "WHERE id='".$userid."' AND password='".$pwd_cr."'";

/* SQLの結果セット取得 */
$res = pg_query($conn, $sql);
$cnt = pg_num_rows($res);


教えてもらいたい事ですが、この crypt( string $str [, string $salt ] ) について、
$str と $salt が完全に同じものである場合、どのような環境でも、生成される文字列は常に同一のものになるのでしょうか?

なんでまたこんな事を聞くかと言うと
Windows ServerにApacheとPHPをぶちこんで動かしていたら、Apache再起動のタイミングで
何故か 同一の $str ・ $salt から生成される文字列が変わってしまった経験が今日を含めて2回起きたからです。
そりゃ確かに php.netのマニュアルには

> そのシステム上で使用できるその他のアルゴリズムを使用します

と書いてあるんですが…ンなcryptの動作がコロコロ変わるものなんでしょうか?


498:nobodyさん
09/01/23 20:04:21
連投すみません、追記。

crypt の挙動が変わる辺りで Windows Update を挟んでいたかどうかは、情けない事にわかりません。
むしろ、 Windows Update で crypt の挙動が変わる可能性があるなら、どのHotfixが怪しいか教えてもらえるとありがたいです。


499:nobodyさん
09/01/23 20:10:33
>>496 (>>476)
「 /var/www/html/login.php 」について、下の2つの確認まじおすすめ
・確実に存在しているのか
・Apacheを実行しているユーザが読めるのか(パーミッションを確認)


500:476です。
09/01/23 20:41:49 L5uKYwrL
>>499さんへ
/var/www/html/login.php
確実にあります。
パーミッションもユーザーが読めるようにしています。
smartyもできてます。
if (class_exists('Smarty')) {
$smary =& new Smarty;
printf("you can use Smarty(version %s).\n", $smary->_version);
} else {
echo "you can't use Smarty.\nplease install Smarty library.";
}
で確認をとりましたし、テストデータもいれました。
ってことはlinuxだからだめってことですよね?
ほかに考えられないんですよ。
基礎からのphpのサンプルアプリケーションもlinuxでだめでした。




501:nobodyさん
09/01/24 21:09:15
>>476
・ DB関連の記述は間違っていないか
  MySQLみたいだけど、特に $db_host 等
・ php自体の記述が間違ってないか
  つーかphpの文法はわかってる?あとファイル始端終端の無用な空白行やコメント、文字コードとかにも注意。
・ 最初に $test = 0; を、随所に echo "TEST".$test.": OK";$test++; を入れて止まってるところを探せ
  php勉強するなら結局はコレ大事。

あとは、本気でどうにも出来ないけどどうにかしたい、って言うなら↑の3つを試した後で
今使ってるMySQLの中身と、今のDocumentRootのディレクトリ構成、php.ini、httpd.conf を、ディレクトリ構成ごとまとめて
zipでうpする位は必要だな。レスが付くかどうかは知らんけど。

>>476 の source.zip だけじゃ db_login.php とか、Auth/HTTP.php とか入ってないっしょ。
ドキュメント見たらなんか、学習に沿って自分で作って配置するものらしいけど…そんなんわからんがな。
これじゃ相当なヒマ人かエスパーじゃない限りレスも何もでけん。

502:476です。
09/01/24 22:31:06 M+3olz+y
>>501
Auth/HTTP.php これはpearだぜ。
db_login.php はつくったけど、結果はだめでした。
もういいです。すいませんでした。
Warning: Unknown: Failed opening '/var/www/html/login.php' for inclusion (include_path='.:/usr/local/include/php/libs') in Unknown on line 0
これも連日ぐぐっているけど、だめ。
orellyに聞いたところ確認するって。
誰か持っていてアプリをlinuxで試した人いるかなって
思ったんだけど、いないみたいですね。
スレ汚しすいません。
持っている方はぜひやってみて。
報告待っています
souce.zipは削除しますので、
暇なエスパーの方でおれやってみようかな?っていう方
URLリンク(www.oreilly.co.jp)
からダウンロードしてみてください。
ではすいませんでした。


503:nobodyさん
09/01/24 22:41:25
もっかい自分が今扱っているコードと関連ファイル(ディレクトリ構成そのままで)をうpしてくれ

504:nobodyさん
09/01/24 23:08:37
"Unknown on line 0"
そのエラー、稀に文字コードの問題はあるにしてもソースの問題じゃないと思うけど。
サーバー設定で権限がなくて読みに行けないとか、だな。

505:nobodyさん
09/01/24 23:11:53
元ファイルがUnknownなのにlogin.phpがincludeできないというのもおかしいな

506:nobodyさん
09/01/24 23:21:55
>>505
おかしくない。よくあること。

507:nobodyさん
09/01/24 23:23:43
なぜに?

508:nobodyさん
09/01/24 23:49:33
Unknown on line 0
Unknownとは、読みに行く側のリソースが特定できていないということ。
Web経由のアクセスの場合、login.phpはあるが、権限が不足していたりすると404じゃなく、
phpハンドラーに渡されて、そのエラーになる。普通によくあること。
>>500は「パーミッションもユーザーが読めるようにしています。 」って書いてるが、
読めなくなる原因はファイルパーミッションだけじゃないからね。

509:nobodyさん
09/01/24 23:56:53
実際のところ、>>501のアドバイスの3つ目をやってみてないわけだな。
とりあえず、最初に叩くファイルの冒頭にecho "hoge";exit();これでどうなるか。
そっからデバッグしてけば別のエラーになるさ。

510:nobodyさん
09/01/25 01:33:09
>最初に $test = 0; を、随所に echo "TEST".$test.": OK";$test++;
だせぇw

511:476です。
09/01/25 02:01:51 esMzMmSN
>>503さんへレスくれた方へ
URLリンク(gichioka.web.fc2.com)
すべてのファイルとデータベースとphp.iniを入れました。
よろしくお願いします。

512:nobodyさん
09/01/25 02:15:21
どれ実行して>>502が出んの?

513:nobodyさん
09/01/25 02:28:51 esMzMmSN
login.phpとposts.phpです。


514:nobodyさん
09/01/25 02:41:42
>>510
ださくない、ださくないよ

515:nobodyさん
09/01/25 02:44:07
>>513
login.phpの中で/var/www/html/login.phpなんてincludeしてんの?

516:nobodyさん
09/01/25 03:08:45
ダブルクォーテーションで囲んだ文字列に改行をいれてもエラーにならないのですが、
これって文章化されたPHP仕様に含まれてますか?
てっきりヒアドキュメントを使わなくてはならないものだと思っていたのですが…

$multiline = "
LINE 1
LINE 2
LINE 3
";

517:nobodyさん
09/01/25 03:24:57
PHPだけじゃなくて一般の言語全てがそうだと思われます(pyなんとかは一般でないから除く)

518:nobodyさん
09/01/25 03:58:37
>>516-517

VBだと改行で認識するよね。
だからVBからきた人だと、改行入れても
エラーにならない、という仕様のほうが
不思議に思うんでしょう。

519:516
09/01/25 04:22:47
ありがとうございます。

有名どころのフレームワーク等でも

$multiline = "LINE1\n"
. "LINE2\n"
. "LINE3\n"

と書いているものがほとんどなので、使ってはいけないのかなと疑問を持った次第です。
SQLとか埋め込む時は>>516の方が断然楽ですよね…

ヒアドキュメントはいらない子?

520:nobodyさん
09/01/25 04:37:23
いる子

521:nobodyさん
09/01/25 05:48:15
>>519
ヒアドキュメントは、"をエスケープしなくてすむのがいい。

522:nobodyさん
09/01/25 05:59:54
多次元配列の要素数を返す関数はありませんか?
例えば
$test['a'][1];
$test['a'][2];
$test['b'][1];
$test['b'][2];
$test['b'][3];
この配列で要素数5を返したいのですが
countでは3が返ってきます。
何かほかの関数や手段はありますか?

523:nobodyさん
09/01/25 06:07:51
>>522
array_merge_recursive

524:nobodyさん
09/01/25 06:08:42
array_walk_recursive
すまんこっちのほうだ

525:nobodyさん
09/01/25 07:39:19
echo count($test, 1)

URLリンク(jp2.php.net)

526:nobodyさん
09/01/25 08:17:33
>>476
>>515
だからさ、login.phpのファイルはあるけど何らかの問題で読めてないんだって。

たとえば、お前らのサーバでも試せるからやってみ。
test.php作ってパーミッションを000にしたファイルにアクセス。

したら、
Warning: Unknown: Failed opening ・・・
になるから。

527:nobodyさん
09/01/25 08:29:44
おいおい、マルウエアかよ

528:476です。
09/01/25 11:45:32 esMzMmSN
だからさ、login.phpのファイルはあるけど何らかの問題で読めてないんだって。

なんででしょうか?


529:nobodyさん
09/01/25 11:56:54
なんでて、言う前に試してみた?
login.phpの中身を空っぽにしてアクセスしてみ?

530:nobodyさん
09/01/25 12:04:32
>>528
原因はパーミッション以外にいろいろあるよ。
パーミッションだってあってるのかどうか。

他にはopen_basedirとかsafe_modeとか、
CGIで動いてるレンサバなんかならそれに合わせた設定が必要だし。

531:nobodyさん
09/01/25 12:08:36
>>526
上と被るけどそれじゃ単純なhello worldスクリプトも動かないってこと?

532:nobodyさん
09/01/25 12:09:07
>>528宛てね

533:nobodyさん
09/01/25 12:14:51
>>531
Hello Worldが動くかどうかなんて、エスパーじゃあるまいしわからないさ。
が、とりあえず、それを試せば問題は次に移るってこと。

Warning: Unknown: Failed opening '/var/www/html/login.php' for inclusion (include_path='.:/usr/local/include/php/libs') in Unknown on line 0
冗長だけどもっかい書くとね。
Apache:login.phpにリクエスト来ました。ファイルありました。phpハンドラー、後はよろしく。
php:了解、じゃ、ファイルをインクルードして処理します~。あ、ファイル、インクルードできません。

で、エラー
from:不明なリソース to: login.php action:include result:無理

534:nobodyさん
09/01/25 12:19:12
こういうケースでよくあるのは
パーミッションが間違ってる。
open_basedirの設定にtypoがあって動かない。
include_pathに問題がある
safe_modeの設定に問題がある
PHPがsuexecで動いてて、ファイルの所有ユーザーかグループに問題がある
などなど。

535:nobodyさん
09/01/25 12:20:35
>>533
いやお前さんに聞いてるだけじゃなくて本人に聞いてるんだよ

536:nobodyさん
09/01/25 12:21:27
まぁ、login.phpの冒頭にphpinfo(INFO_CONFIGURATION);
とでも書いて結果を貼ってもらうってのがいいのかもしれないね。この場合。

537:nobodyさん
09/01/25 12:22:17
>>535
あぁ、そういうことね。

538:476です。
09/01/25 13:36:25 esMzMmSN
>>536
phpinfo(INFO_CONFIGURATION);
かいたやつを入れましたのでよろしくお願いします。


539:476です。
09/01/25 13:42:05 esMzMmSN
source.zipの中にはいっています。


540:nobodyさん
09/01/25 13:44:10
source.zipアクセスできなかったよ?
ところで、login.phpでecho "Hello World!";はしてみたの?

541:nobodyさん
09/01/25 13:44:40
てか、そのURL貼っちゃえw

542:nobodyさん
09/01/25 13:45:57
>>538
なぜ531はシカト?

543:nobodyさん
09/01/25 13:49:36
え、シカトされて怒ってんの?

544:nobodyさん
09/01/25 13:50:22
これは、マルウエアをインストールさせるための釣りだな。たぶん。

545:476です。
09/01/25 14:46:06 esMzMmSN
login.phpでecho "Hello World!";
はできました。
source.zipアクセスできるようになりましたので、よろしくお願いします。

>>マルウエアをインストールさせるための釣りだな。たぶん。
変なこといわないでください


546:nobodyさん
09/01/25 14:53:00
>>545
そしたら、元のソースにして、エラーが出る個所を特定すればいい。
1行でも解釈できれば例のエラーにはならないから。
で、リダイレクトループとかで問題が出ているケースもあるから、
error_log(__LINE__);とかを怪しいところにはさんで行って、どこまで処理が進んでるかチェック。

547:476です。
09/01/25 15:00:45 esMzMmSN
error_log(__LINE__);
の使い方がわかなんね。
どうやって使うの?


548:nobodyさん
09/01/25 15:04:41
それ書いて、エラーログ見れば、行番号が出力されてくる。
コマンドラインが使えるならエラーログでtail -f /var/log/httpd/error_logとかで見張ってればよくわかる。
エラーログが見れないんならechoでもいいけど、要するにどこまで処理が進んでるかチェックして
そのエラーメッセージを出せば、新しい情報がとれるでしょ?

549:nobodyさん
09/01/25 16:08:16
なんで原因を特定しようとせんの?
Hellow World→動く
サンプルコードをそのまま挙げた→動かない
これしかやってないでできないできない言うとかありえないっす

550:476です。
09/01/25 20:01:42 esMzMmSN
みなさん。ありがとうございます。
error_log(__LINE__); でいろいろ調べてみたいと思っています


551:476です。
09/01/25 20:12:36 esMzMmSN
エラーがでました。

PHP Fatal error: require_once() [function.require]: Failed opening required 'config.php' (include_path='.:/usr/local/include/php/libs') in /var/www/html/login.php on line 3
だそうです。
調べてみてもわからん。


552:476です。
09/01/25 20:13:47 esMzMmSN
ひとつ事例があり、SELINUXが原因かと思いましたが
SELINUXは切ってありました。


553:476です。
09/01/25 20:51:19 esMzMmSN
すいません。質問です。
無事動いたのですが....動いたといえるのか。
HTTP/AUTH.PHPが作動したのですが、
Member Area のサーバーにはユーザー名とパスワードが必要です。
と普通でます。
で、db_login.phpのデータを入れたんですがだめでした。
もしかして
$AuthOptions = array(
'dsn'=>"mysql://$db_username:$db_password@$db_host/$db_database",
'table'=>"users", // テーブル名
'usernamecol'=>"username", // ユーザ名の列
'passwordcol'=>"password", // パスワード列
'cryptType'=>"md5", // パスワードの暗号化形式
'db_fields'=>"*" // 他の列も取得可能にする
のどこかにデータを入れなくてはいけないのでしょうか?


554:nobodyさん
09/01/25 21:17:56
とりあえず、初期の問題は片付いたわけだな。よかったよかった。

>>553
聞きたいことをもう少し整理してくれ。

555:476です。
09/01/25 21:24:21 esMzMmSN
Member Area のサーバーにはユーザー名とパスワードが必要です。
とでるんですがユーザー名とパスワードを入れてもうごきません。
初歩的ですいませんが、
>>553のどの部分に自分のデータを記載すればいいのでしょうか?
僕はdb_login.phpにデータが入っているのでなにもいれてなく>>553
のままなんですが。
ここの部分がおかしいんですよね?



556:nobodyさん
09/01/25 21:31:42
mysqlでしょ?
usernameっていうユーザいるの?

557:nobodyさん
09/01/25 21:35:07
まず、こんだけ色々アドバイスもらってんだから、動くに至った経緯を書け。
ここはお前専用の質問スレじゃないんだ。

で、login.phpが動かないとか、そもそも入力されたユーザ名・パスワードが間違ってた時の挙動が
どうなるのかを把握してんのか?
それと自分でうpした中のDB.txtの中身を理解してるのか?
具体的には62・63行目。

…もしかしてNG推奨だったのか

558:nobodyさん
09/01/25 21:35:50
データベースのレコードに自分のユーザー名とパスワード、md5ハッシュを保存
db_login.phpにはそのデータベースにアクセスするための権限情報を保存

559:476です。
09/01/25 21:38:41 esMzMmSN
'usernamecol'=>"username", // ユーザ名の列 ←変更
'passwordcol'=>"password", // パスワード列 ←変更 
すればいいですか?
あ、mysqlに入っているusernameとpasswordはすでに試しましたが
だめでした。
それがいまいちよくわからないんですよね
なんでだめなのか


560:nobodyさん
09/01/25 21:39:56
パスワードはちゃんとハッシュしてんの?

561:nobodyさん
09/01/25 21:47:18
しっかし、よく釣れるなぁw

562:476です。
09/01/25 22:23:02 esMzMmSN
>>557さんへ
マスまずパスが違っていました。
僕のパスはinclude_path = ".:/usr/local/include/php/libs"
なので、ここにpearとconfig.phpを入れてやりました。
そしたら動きました。
>>560さんへ
パスワードはちゃんとハッシュしていますよ。

563:nobodyさん
09/01/25 22:34:43
>>562
PEAR入れて無かったってこと?

564:476です。
09/01/25 22:43:40 esMzMmSN
いや、pearのパスが間違っていました。


565:nobodyさん
09/01/25 23:06:00
元はどこにあったの?

566:522
09/01/26 01:07:02 Ihgtqp1K
>>525
それだと、a・bという項目もカウントしてしまい、7を返すようです。5を返す方法はないですか?

567:nobodyさん
09/01/26 01:16:16
>>566
>>524


568:522
09/01/26 05:09:38 Ihgtqp1K
>>567
すみません、バージョンが4なのでarray_walk_recursiveは使えないみたいです。
他にありませんか?

569:nobodyさん
09/01/26 05:10:14
引き算すりゃいいでしょ。countとcountで

570:nobodyさん
09/01/26 05:48:20
>>522
$count = 0;
foreach ($test as $value) {
 $count += count($value);
}
echo $count;

571:570
09/01/26 05:58:46
ちなみに>>570の方法は2次元配列の場合で
それ以上になると再帰(リカーシブ)でやったほうがいい
(foreachのネストでも可能だが読みやすさに限界がある)
ただし再帰は頭の回転が速くないと何やってるかわからなくなるので
苦手なら無理して使う必要はない

572:nobodyさん
09/01/26 06:13:09
>>570-571
発想はいまいちだが、初心者にしちゃぁ、よくできたな。

573:nobodyさん
09/01/26 06:26:30
巣にお帰り
スレリンク(php板)

574:nobodyさん
09/01/26 06:30:54
自己紹介乙

575:nobodyさん
09/01/26 10:12:51
>>570
わざわざそんなことしなくてもこれでいけるっぽ

echo count($test, 1) - count($test);

576:nobodyさん
09/01/26 10:29:32
html拡張子でPHP5が動くように設定しつつ、
404エラーの際に自作エラーページを表示させるには
どうすれば良いかご存知の方いませんでしょうか。

.htaccessで「AddType PHP5-script html」を指示してしまうと
「ErrorDocment 404 error.html」で指定したページが表示されません。
PHP4の時は両立できたんですが…

577:nobodyさん
09/01/26 10:41:26 2xglnPYy
>>576

AddType php5-script .html

578:nobodyさん
09/01/26 10:44:39
>>575
3次元以上の場合は?

579:nobodyさん
09/01/26 11:03:14
>>577
あー大文字で書いてしまったのはここに書き込む際の記載ミスです。
実際の.htaccessではご指摘のように記載してます。html拡張子でPHP5は動いてます。
でもそうすると404エラーで自作ページが表示できなくて困ってます。
AddTypeでやってもAddHandlerでやっても結果は同じで、
「AddType application/x-httpd-php .html」でPHP4の環境では両立できるんです。

580:nobodyさん
09/01/26 11:05:47
エラーページが表示されないのならどんなページが表示されてる?
まっちろ?

581:nobodyさん
09/01/26 11:14:50
>>580
IEならIE、FireFOXならFireFOXのフツーの404NotFoundページが出ます

582:nobodyさん
09/01/26 11:19:56
そのエラーのソースの中でheader("HTTP/1.0 404 Not Found");してみるとどうなる?

583:nobodyさん
09/01/26 11:22:02
だったら例のあれじゃない?
自作エラーページのサイズが小さ過ぎるとか。。。

584:nobodyさん
09/01/26 11:27:03
>>582
変化ありませんでした。
IEのHTTP 404 未検出の画面が出ます。

>>583
ファイルサイズは1Kbありました。

585:nobodyさん
09/01/26 11:29:13
>>584
404header返せばいけるはずなんだがな。
どんなソースになってるよ。

586:nobodyさん
09/01/26 11:46:12
>>585
単純なHTMLページの1行目に↓をぶち込んだんですが…
<?php
header("HTTP/1.0 404 Not Found");
php?>

.htaccessで拡張子指定しているのは今は.htmlだけなのですが
存在しない.htmファイルを探させると自作エラーページへ行くことがわかりました。
が、.htmlファイルだとIE規定のページになっています。
.htmlでPHPが動くように指定してしまうとErrorDocmentが
狙った動きをしてくれない、という事でしょうか。

ちなみに今、直接自作エラーページを指定したらIE規定のページが出ましたので
404headerはちゃんと返ってきているようです。

587:nobodyさん
09/01/26 11:54:43
Apacheスレかhtaccessスレあたりで聞いたほうがいいぞ

588:nobodyさん
09/01/26 12:06:45
htaccessスレが見つけられなかったのと
PHPで何とか似たような事をやる技があったりしないかなーと
思ったりしたんですが、やっぱ無理すよね。スイマセンでした。
Apacheスレの方で聞いてみます。ありがとうございました。

589:nobodyさん
09/01/26 14:26:16 7H1IWdV1
>>586
> php?>

何これ。

590:589
09/01/26 14:27:55
と思ったら関係ないな、すまん。

591:nobodyさん
09/01/26 21:42:45
右から読んでもphp

592:nobodyさん
09/01/26 23:07:21
左から読んでもphp

なんて言うと思ったか

593:nobodyさん
09/01/27 06:21:30
前から読んでも(ry

594:nobodyさん
09/01/27 10:00:43
<?山本山
タケヤブヤケタ
山本山?>

595:nobodyさん
09/01/29 04:21:55
URLリンク(free-p.ddo.jp)
こことおなじものを自分のローカルサーバに設置したいのですがどこかに置いてないでしょうか?

596:nobodyさん
09/01/29 04:32:25
なぁにこれ?

597:nobodyさん
09/01/29 07:06:35
>>595
サイトの中身良く見りゃわかんだろ・・・
evalは、文字列の中身をphpのコードとして解釈して実行するもの。
base64_decodeしてからgzinflateしてるんだから
base64_encodeしてからgzdeflateすれば、期待の物が出来るんじゃね?

これでわからないんだったら、プログラミングやめた方が良いかもな

598:nobodyさん
09/01/29 10:51:02
性格悪いな

599:nobodyさん
09/01/29 12:03:24
>>597
最初と最後の1行ずつは要らんだろ常識的に考えて。

600:nobodyさん
09/01/29 12:10:04
>>597
スレリンク(php板)l50
ここの995=997だろ

601:nobodyさん
09/01/29 13:24:49
>>600
フイタww
淡々と技術情報の交換を2chでしたいってそりゃ無理だろw
2chってそういうとこだとおもうべきだな

602:nobodyさん
09/01/29 17:55:36
質問です!
サーバーがPHP5になってしまい
今まで使っていたフリーのメールフォームが使えなくなりました。
PHP5のフリーのメールフォームを探したのですが全然わからず
ここにたどり着きました。
フリーのメールフォームのサイトを教えて頂けないでしょうか?

603:nobodyさん
09/01/29 18:20:03
スレ違いで内科?

604:nobodyさん
09/01/29 18:24:41
まともな人がいないのでこちらでも質問を

//$_SESSION['abc']; は前ページで123を代入

//ここから
$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/');
}
session_destroy();

echo $_SESSION['abc'];//123

と表示したいのですが何か方法はないのでしょうか?クッキーとか使わずに。


605:nobodyさん
09/01/29 18:29:17
頭痛くなってきた。
要点をまとめてくれないか

606:nobodyさん
09/01/29 18:40:48
$_SESSION['abc'] にはすでに123が入ってるが
$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/');
}
session_destroy();
とすると123も消えるけど、それを消さずに

echo $_SESSION['abc'];//123
と後でも表示させたい。

理想としては
$abc = $_SESSION['abc'];
$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/');
}
session_destroy()
$_SESSION['abc'] = $abc;
echo $_SESSION['abc'];

と表示できればいい。

607:nobodyさん
09/01/29 19:53:27
>>604 == >>606 だよな?
「どうしても$_SESSION['abc']を使いたい理由」ってのがわからんと、普通のPGは他の手段を考えると思うぞ。
>>606 の中で $abc に入れてるんだったら、そのまま echo $abc; すりゃ良いじゃん、的な。
つーかsession_start()しなくて良いんかな。

長ったらしくない程度に、もう少し質問の背景を含めて、かつ要領良くまとめて質問すれば回答が返って来ると思う。

608:nobodyさん
09/01/29 20:07:16
釣りだよ。
URLリンク(oshiete1.goo.ne.jp)

609:nobodyさん
09/01/29 20:25:30
スレリンク(php板:672番)
スレリンク(php板:880番)

理由はどうあれこういうマルチするアホは相手にしないほうがいい

610:nobodyさん
09/01/29 23:28:49
何回読んでも>>604のやりたいことがわからない

611:nobodyさん
09/01/29 23:37:26
前よく出没してた基地外だろ

612:nobodyさん
09/01/29 23:41:37
やりたいことは見えてる。
「ログイン・ログアウトとは別にセッションデータを引きまわしたい」ってことだろ。
で、普通は>>604みたいなソースにはならないのに、わざわざ教えてgooだか、
phpのマニュアルでセッション破壊用のソースをそれだと勘違いして質問してるだけ。

すでに回答ついてるのに、人の意見を聞けない困ったチャンか、単なる荒し

613:nobodyさん
09/01/30 10:09:33
>>607
ログインログアウトとは別に、スタイルシートをセッションで持ち歩いていて、
ログアウト>>606で書いたようにログアウトとしたときセッションに保存してあるスタイルシート変数も消えてしまいます。
なので、セッション(ログアウト)を消す前に$abc = $_SESSION['abc']; として消した後再び、$_SESSION['abc'] = $abc; などにして再度セッションにいれればなと考えていますが、
うまくいきません。
そこで何かいいほうほうは無いものかと。



614:nobodyさん
09/01/30 12:27:38
悔しいっ・・・でも・・・触っちゃう・・・っ(ビクビク

>>613
cookie使えよ。sessionなんかにそんなん入れんな。
sessionに入れるならログアウト=専用スタイルシート破棄として使え。
$_SESSION と session_*()を勉強し直して来い

615:nobodyさん
09/01/30 23:37:15 gxYTwHzL
URLリンク(epg.2ch.net)
から、別サーバー(自分のブログとか)に
スレの勢いと局、番組名だけを取得して表示させることってできますか?

616:nobodyさん
09/01/30 23:39:57
うん

617:nobodyさん
09/01/31 00:20:10 Zjr5MV5E
<form action="<?= $_SERVER['PHP_SELF']; ?>" method="POST">
<input type="text" name="textbox" value="">
<input type="submit" value="送信">
</form>

<?php

$text = htmlspecialchars( $_POST["textbox"] );

if ( get_magic_quotes_gpc() ) {
$text = stripslashes( $text );
}
print $text;
?>

これ、ゲストの人がコメント書き込むくらいならいいんだけど、自分が投稿しようと思った時に
$_SERVER['PHP_SELF'];が入っているからエディットページ(管理人専用の編集ページ)かなんかでindex.phpに書き込めないと思うんだ。
エディットページでindex.phpに反映させる方法ってない?

618:nobodyさん
09/01/31 00:28:12
エディットページで$_SERVER['PHP_SELF']にしなければいいのでは?

619:nobodyさん
09/01/31 00:41:31 Zjr5MV5E
お!というとどういう風に記述すればいいですか?

620:nobodyさん
09/01/31 00:42:37
ファイル名

621:nobodyさん
09/01/31 00:42:41
>>615 $rtn = file_get_contents( 'URLリンク(epg.2ch.net) ' );

>>617 漏れは神様でもエスパーでもないんだから、
おまいのやりたいことを補完して理解なんかできない。
質問は相手に理解できるように書こう。

でも <input type=hidden name=action value=edit>
とか場合わけしる

622:nobodyさん
09/01/31 00:43:50
なぜにhidden使う必要が?

623:nobodyさん
09/01/31 01:07:34 Zjr5MV5E
>>621 説明足らずで すまん ありがとう。要は管理人専用ページでこのスクリプトを使用した時に$_SERVER['PHP_SELF']だと現在いじってる(管理人専用ページ)でスクリプトが実行されてしまうんではないかと。
あくまで表示したいのはindex.phpなので、そこんとこどうなんかなーと思いまして。

>>620
と、いうことは$_SERVER['PHP_SELF']を$_SERVER['index.php']にしたらいいってことですか?

624:nobodyさん
09/01/31 01:09:00
お前は何を言ってるんだ?

625:615
09/01/31 01:27:06 myPf0iH/
>>621
<?php
$temp = "URLリンク(epg.2ch.net)";
$html_f=file_get_contents($temp);
$replace = "(2)";
$scriptphp = "<br />";
$word = str_replace($replace, $scriptphp, $html_f);
$hogeru = ".dat<>";
$gogeta = "<br />";
$yabai = str_replace($hogeru, $gogeta, $word);
print $yabai;
print($word1_a);
?>

から、偶数行だけ表示するにはどうしたらいいんでしょうか?



626:nobodyさん
09/01/31 01:27:12 Zjr5MV5E
すみません。ようやく分かってきました。
$_SERVER['PHP_SELF'] これ書かなきゃいいんですね。

じゃあそのかわりformのactionにはなんて書けばいいんですかね?

627:nobodyさん
09/01/31 01:28:37
actionの意味知らんの?

628:nobodyさん
09/01/31 01:30:22 Zjr5MV5E
正直なところform処理いじったことがありませんもので…。非常に申し訳ないんですが教えてくれると助かります…

629:621
09/01/31 01:35:09
>>625 最初からそれをいいたまへ

$rtn = file( 'URLリンク(epg.2ch.net) ' );
for ( $n = 0; $n < count( $rtn ); $n = $n + 2 ) echo $rtn[$n];


630:621
09/01/31 01:38:56
>>623 やっと意味がわかった。管理人は管理人ようのページを作り給え

631:nobodyさん
09/01/31 01:46:56 Zjr5MV5E
>>630ありがとうございます。じゃあ$_SERVER['PHP_SELF']はいらないってことですかね?

632:nobodyさん
09/01/31 01:55:22
>>631

<? // index.php
if ( $_POST['textbox' != '' ) { なんか処理 }
?>
<html><body>
<form action="index.php" method="post>
<input type="text" name="textbox" value=""><input type="submit"
</form>
</body></html>



<? // kanri_index.php
if ( $_POST['textbox' != '' ) { なんか処理 }
?>
<html><body>
<form action="kanri_index.php" method="post>
<input type="text" name="textbox" value=""><input type="submit"
</form>
</body></html>

を作れ

633:nobodyさん
09/01/31 01:59:14
いやindex.phpでいいだろ

634:nobodyさん
09/01/31 02:06:10
色んなやり方あるけど初心者だそうだからいちばん新ぷりに

635:nobodyさん
09/01/31 13:18:26 Zjr5MV5E
ありがとうございます!ようやくわかった気がします。actionって動作させたいファイル名を指定したらいいんですね。
これでなんとかなりそうです。ありがとうございました!

636:nobodyさん
09/01/31 19:25:28
prepareの使い方で質問があります。
下記のコードを実行すると
Call to a member function prepare() on a non-object
とエラーが返ってきます。

$sql = "insert into table (column2,column1) values(?,?)";
$sth = $this->db->prepare($sql);
$result = $this->db->execute($sth, array($column2_value,$column1_value));

プレースホルダを使わずqueryを発行すると問題なくdbが更新されるのですが、
どこかおかしいのでしょうか

637:nobodyさん
09/01/31 19:26:42
すみません、環境書き忘れました。
php5,postgresです

638:nobodyさん
09/01/31 19:28:26
>636
どのクラスのprepareだよこの馬鹿馬鹿まんこ!

$this->dbが接続失敗か何かで初期化されていないように思われる。

639:nobodyさん
09/01/31 20:01:51
レスどうもありがとうございます。
そのあたりを探ってみます。


640:nobodyさん
09/01/31 20:02:31
いや$dbのnewしてるとこ見れば一発だろw

641:nobodyさん
09/01/31 20:16:52
出来ました。どうもありがとうございます。
さっきのエラーは昔書いたクラスコピペして直したら出なくなったのですが、
dbが更新されなくて悩んでいたら文字コードの違いが原因でした。

mb_convert_encodingで挿入する値をdbの文字コードに直して解決しました。
お世話様でした。

642:nobodyさん
09/01/31 20:23:42 QDNvJIlq
sqlite php5 利用です。
登録メールアドレスの重複チェックをしたいのですが、うまく動きません。
if(!$db=sqlite_open("database/database.sqlite",0666,$err)){
die("データベース接続エラー".$err."<br>");
}
////////////////////////////データベース二重登録防止////////////////
$check_sql="SELECT * FROM add_table WHERE add = '$mailadd'";
if($abc = sqlite_query($db,$check_sql)){
header("Location: mail.php?miss=miss&miss_naiyou=sumi");
    //登録済みの場合は飛ばす
}
sqlite_close($db); //データベースクローズ

643:nobodyさん
09/01/31 20:26:51
>>642
URLリンク(jp2.php.net)

644:nobodyさん
09/01/31 20:31:10 lgngjuqH
<?php
$temp = "URLリンク(epg.2ch.net)";
$html_f=file_get_contents($temp);
$br = "<br />";
$replace = "(2)";
$word = str_replace($replace, $br, $html_f);
$replace = ".dat<>";
$word = str_replace($replace, $br, $word);
$replace = "res/min";
$word = str_replace($replace, $br, $word);
$replace = "] ";
$word = str_replace($replace, $br, $word);
$a = explode( "<br />", $word );
$b[0]= "g";
print $a[2]; print $br; //…(1)
print $b[0]; print $br;
$strs[0] = "srename :"+ $a[2] +",";//…(2)
$strs[1] = $b[0];
print $strs[0]; print $br;//…(3)
print $strs[1];
?>
出力
[NHK総合]探検ロマン世界遺産
g
0
g


(3)の$strs[0] が0になってしまうのはなんでですか?
おねがいします。

645:nobodyさん
09/01/31 20:33:43 QDNvJIlq
>>643
マニュアル見てもさっぱりわかりません


646:nobodyさん
09/01/31 20:39:00
>>644
+を.にかえてみ

647:nobodyさん
09/01/31 20:40:47
>>645
じゃ諦めれ

648:nobodyさん
09/01/31 20:42:10
>>646
おーできました
ありがとうございます!!

649:nobodyさん
09/01/31 20:59:19 QDNvJIlq
>>642
解決しました。
if(sqlite_fetch_array(sqlite_query($db,$check_sql))){
header("Location: mailmagazine.php?miss=miss&miss_naiyou=sumi");
}

>>643
ありがとうございます

650:nobodyさん
09/02/01 21:04:08
質問です
elseif (preg_match("/^\d{8}$/", $_GET["id"])){
$id = $_GET["id"];
}
GETで8桁の数字のみ受け取るように↑のようにしましたが
if文でマッチしてても変数に代入する際はpreg_matchなりで
GET変数内を数字のみとなるように変換した方がいいものなんでしょうか

651:nobodyさん
09/02/01 21:10:26
お前は何を言ってるんだ

652:nobodyさん
09/02/01 21:11:12
>650
俺ならctype_digit($str) && strlen($str) === 8
まあそれはそれとして、別にいいんじゃね。その正規表現にマッチしてるなら間違いなく数字だけだし。

653:nobodyさん
09/02/01 21:16:32
末尾の$は改行にもマッチするから数字だけとは限らないんじゃ?

654:nobodyさん
09/02/01 22:42:37
ググってたら遅くなりました
>>652
matchに漏れがなければ問題ないように思たんですが
あげてもらった関数の方が確実 でしょうか
>>653
正規表現はまだよくはわかってないのですがググったところ
\r\nのことでしょうか。
URLリンク(scripting.cocolog-nifty.com)
ここを参考に一応"/^\d{8}\r?$/"としてみましたが
>hoge$に掛かりません
の理屈が今一わかりません。

655:650
09/02/01 22:56:05
よく考えたら\rが混じる時点で正常なデータではないので
もとの"/^\d{8}$/"で問題なしな気がしますがどうなんでしょう


656:652
09/02/01 23:22:37
重視したのは分かりやすさ。正規表現だと、何を意味しているのか分かりづらい。
パターンがよほど複雑な時以外は正規表現は避けたほうがいい。

>653-654
改行とか忘れてたわ。
if(preg_match("/^\d{8}$/", "12345678\n")){
 echo 'match';
}

657:nobodyさん
09/02/03 00:43:02
半年ロムってろと言われてずっと見てきたが
もうPHP諦めることにした。さっぱり分からん。

このスレのどこが超初心者用なんだ。

658:nobodyさん
09/02/03 01:51:58
3年ROMってろ

659:nobodyさん
09/02/03 02:00:14
もう、諦めたんだ放って置いてくれw
プログラムなんて嫌いだ。

660:nobodyさん
09/02/03 09:47:26
何が分かんないんだよ

661:nobodyさん
09/02/03 10:34:27
放っておいてやれよ

662:nobodyさん
09/02/03 14:10:58
なんか残念だな...。

このスレだけ読み続けても、超初心者が分かるようにはならないと思う。
このスレは、超初心者も質問していいというだけで、来る質問が全部、
超初心者向けというわけではないから。

もう見てないかもしれないけれど、入門書を図書館とかで借りてきたほうが
いいと思うよ。


663:nobodyさん
09/02/03 14:18:03
PHPなんってググって触ってみりゃ、どうにでもなるものを、
半年もROMってわからないなんて、ネタに決まってるだろ
もしネタじゃないなら、10年はROMるべき。
そうして人生が終わるさ

664:nobodyさん
09/02/03 20:28:48
人生も諦めたらスッキリするのに

665:nobodyさん
09/02/04 06:33:54
>>664
全く原因が分からないのでお聞きしたいのですが…

$im=createimagefromjpeg(image.jpg);
imagejpeg($im);
destroy

上記の様な単純な記述で画像を開きたいのですが、
ローカルならできるのになぜかインターネット経由だと
できないのです…
実行すると半角で「リ」と表示されるだけで
print hoge;などを付け足しても何もかわりません

phpinfoでGDが使えることは確認したのですが、
他に原因が思いつきません
初心者丸出しすいませんが教えていただければ尻丸出しにしますのでどうかお願いします

666:nobodyさん
09/02/04 06:34:18
>>664
全く原因が分からないのでお聞きしたいのですが…

$im=createimagefromjpeg(image.jpg);
imagejpeg($im);
destroy

上記の様な単純な記述で画像を開きたいのですが、
ローカルならできるのになぜかインターネット経由だと
できないのです…
実行すると半角で「リ」と表示されるだけで
print hoge;などを付け足しても何もかわりません

phpinfoでGDが使えることは確認したのですが、
他に原因が思いつきません
初心者丸出しすいませんが教えていただければ尻丸出しにしますのでどうかお願いします

667:nobodyさん
09/02/04 06:50:26
image.jpgがないんでね?

668:nobodyさん
09/02/04 08:17:43
>>666
MIMEヘッダー出してる?

669:nobodyさん
09/02/04 10:03:22
ああそれだな

670:nobodyさん
09/02/04 17:18:03
>>667
確かにファイルは存在しています・・・
>>668
MIMEヘッダーは
header("content-type: image/jpeg");
で出力できてますでしょうか?
ご指摘の後にこれを追加してやってみてのですがだめでした。
ただ、文字化けのような表示から画像を表示できていないマーク?
のような表示にはかわりました・・・

671:nobodyさん
09/02/04 17:25:29
>>670
imagecreatefromjpeg
にしてみたら?
それで、$imがfalseになってないかチェック
それから、imageやheaderを出力する前に余計な出力をしないように、ソースの冒頭でob_startして、直前で破棄



672:nobodyさん
09/02/04 17:39:12
ところで皆さんPHPとMYSQLは勉強し始めて
どれくらいの期間で使えるレベルになりましたか?

673:nobodyさん
09/02/04 17:41:17
使うだけなら書籍読みつつ1日でカバーできる範囲
使いこなすまでは相当かかったが

674:nobodyさん
09/02/04 17:50:34
>>670
「image.jpg」→「"image.jpg"」

675:nobodyさん
09/02/04 18:10:51
"imagejpg"になってたりするのか

676:nobodyさん
09/02/04 18:32:32
そもそもcreateimagefromjpegなんて標準関数はないわけだが
imagecreatefromjpeg(string $filename)ならあるけど

677:nobodyさん
09/02/04 18:33:11
単純にサーバにGDライブラリがはいってないだけなんじゃね?
phpinfoみてみれ

678:nobodyさん
09/02/04 18:37:31
>>677
>>666

679:nobodyさん
09/02/04 18:37:52
>>676
>>671

680:nobodyさん
09/02/04 18:38:31
書いたとおりに載せないで情報小出しにしてる時点でもう答えようがない

681:nobodyさん
09/02/04 18:38:39
要するに釣り

682:666
09/02/04 20:04:43
お騒がせ致しました

釣りではないのです

広告自動表示のレンタルサーバーを使用していたためにうまくいかなかったようです

広告無しのサーバーでは問題なく表示できました。

ありがとうございました


683:nobodyさん
09/02/04 22:08:23
広告自動挿入のサーバーだと
ヘッダー情報ってだめなの?

684:nobodyさん
09/02/04 22:09:01
PHPの講師やりたいんだけど、
どこの学校がおすすめ?

685:nobodyさん
09/02/04 22:31:36
学校行ってまでPHP学びたいと思うか?

686:nobodyさん
09/02/04 22:37:41
>>685
だって一日で20万もらえるってよ
バカらしくてコーダーなんかやってられないよ

687:nobodyさん
09/02/04 22:41:25
SQL(SQLite)なんですが単対多のデータを取得したら
|A|a|1|
|A|a|2|
|A|b|1|
|A|b|2|
|B|c|1|
|B|d|1|
みたいになるじゃないですか。
重複した項目をまとめて(A,(a,b),(1,2)),(B,(c,d),1)な感じにする関数てあるんでしょうか。


688:nobodyさん
09/02/04 22:46:57
>>685
URLリンク(pdoj.wordpress.com)

とりあえず翻訳やってみたけど、どう?

689:nobodyさん
09/02/04 22:50:36
>>687
pdoとかMDBとかにあるよ
sqliteは知らんけど

690:nobodyさん
09/02/04 22:52:37
>>688
ドキュメントの翻訳で「~と思う」なんて普通使わない

691:nobodyさん
09/02/05 00:20:18
>>689
ありがとうございます。
探したらfetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP)がそれらしいです。
ただマニュアルの例で例えると
array(3) {
["apple"]=>
array(2) {
[0]=>
string(5) "apple"
[1]=>
string(5) "apple"
}
みたいな感じにカラム0の値しか取得できてないようです。
自分がどこか間違ってるのかSQLiteが対応してないのか...
もう少し試してみます。

692:nobodyさん
09/02/05 00:47:17
>>691
ほい
URLリンク(jp2.php.net)

693:nobodyさん
09/02/05 00:49:12
$str = '4,980 円';

↑みたいなフォーマットの価格データを整数値にしたいんだけど
↓よりシンプルにやる方法ってある?

$str = str_replace(array(' ', ',', '円'),array('', '', ''),$str);

694:nobodyさん
09/02/05 00:51:20
$str = (int)str_replace(',','',$str)

695:nobodyさん
09/02/05 00:54:43
ありがとうg

696:nobodyさん
09/02/06 21:22:00
>>692
MySQLでも試してみたのですが結果は同じでサンプルのような結果にならないのですが
どこか捉え違いしているのでしょうか。
PHP 5.2.6/MySQL 5.0.4
|apple|red|
|banana|yellow|
|apple|green|
という内容として、
$dbh = new PDO('mysql:~','root','root');//もしくは'sqlite:~'
$sql = "SELECT name,color FROM table1";
$sth = $dbh->prepare($sql);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP,0);
var_dump($result);
$stmt = null;
結果
array(2) {
["apple"]=>
array(2) {
[0]=>
string(5) "apple"
[1]=>
string(5) "apple"
}
["banana"]=>
array(1) {
[0]=>
string(6) "banana"
}
}
となります。

697:nobodyさん
09/02/06 21:29:26
サンプルのような結果と言われても、サンプルのような結果がどんなもんだかわからんからね。

とりあえず、FETCH_GROUPなんだし、結果が正しいように思うが?

698:nobodyさん
09/02/06 21:34:36
まぁ、試しに
PDO::FETCH_COLUMN|PDO::FETCH_GROUP
じゃなく
PDO::FETCH_ASSOC|PDO::FETCH_GROUP
にしてみたら?

699:nobodyさん
09/02/06 21:39:06
>>697
失礼、サンプルは>>692にもあるPDOStatement->fetchAllの例3です。
期待した結果は
["apple"]=>
array(2) {
[0]=>
string(5) "red"...
なんですが、>>696が正しいということはやっぱりなにか勘違いしてるのかなぁ

700:nobodyさん
09/02/06 21:43:25
あぁそれか、fetchAllの第2引数に0が入ってるじゃん、だから、カラムが制約されてる
それ、外したらどうなる?


701:nobodyさん
09/02/06 21:48:42
array(2) {
["apple"]=>
array(2) {
[0]=>
string(3) "red"
[1]=>
string(5) "green"
}
["banana"]=>
array(1) {
[0]=>
string(6) "yellow"
}
}

になったけど

702:nobodyさん
09/02/06 21:49:22
ああすまん本人じゃなくて俺の環境でやったらってことね


703:nobodyさん
09/02/06 22:07:01
>>700
あれ?どうも。0がなくてもうまく取得できなかった気がしたんですが
今0を外したらPDO::FETCH_ASSOC|PDO::FETCH_GROUP同様うまくいきました。
|PDO::FETCH_GROUPがついたときは第2引数で指定したPDO::FETCH_COLUMNを基準に
グループ化するのかと勘違いを…
実際は複数のカラムが必要なのでPDO::FETCH_NUM|PDO::FETCH_GROUPで
思った通りの結果が得られるようになりました。ありがとうございました。
>>701も確認ありがとうございます。

704:nobodyさん
09/02/06 22:11:15
fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP,0); で普通に取得できたが?
後進のために原因を明らかにしといてくれ

705:nobodyさん
09/02/06 22:21:43
>>704
もし、第2引数に0が入ってても第2カラムを取得できたんならバグだと思うよ

706:nobodyさん
09/02/06 22:26:54
お前は何をいっちょるんだ?
第2引数に0を入れるということは1番目のCOLUMNを用いて残りのカラムをGROUP化するってことだぞ

707:nobodyさん
09/02/06 22:29:53
>>778
何も問題ないが

708:nobodyさん
09/02/06 22:30:55
すまん誤爆した

709:nobodyさん
09/02/06 22:57:48
>>706
デマ書いてすまん、よくわかってなかった。
そのはずだよねぇ。

710:nobodyさん
09/02/08 19:09:17
<?php
try {
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

fntest();
function fntest() {echo "call function";}

} catch (ErrorException $exception){
echo "何かエラーだよ<br />";
echo $exception->getMessage()."<br />";
echo "line:".$exception->getline();
exit();
}
?>
これを実行するとFatal error: Call to undefined function fntest() in~と出ます
定義を先にするかtry~catchをなくすとエラーは出ません
何がいけないんでしょうか


711:nobodyさん
09/02/08 19:26:17
定義が後でtry~catchの中だからでは?

712:nobodyさん
09/02/08 20:00:14
>>711
まんまやん というかだめなんですか?
>次の二つの例のように、ある条件下でのみ関数が定義される場合には、その関数定義は関数がコールされる前に行われていなければなりません。
に当てはまるということでしょうか
とりあえずそういうものだということで前方で定義するようにします

713:nobodyさん
09/02/08 20:00:15
>>710
いったいどうしたらそういう書き方ができるのか知りたいわ

714:nobodyさん
09/02/08 20:35:03
Perlから入った奴なんかはそういう書き方をする事があるな。
Perlは書き方によっては、関数の宣言や定義より先に呼び出しが来てもちゃんと動く。

715:nobodyさん
09/02/08 21:05:08
PHPだって、パース対象がグローバルなら、普通にfunctionの後置定義は有効だよ。
ifやwhileやtryやfunctionの中などの節の中は後置できないだけ。

>>710なんてそんなの百も承知で釣り質問してるに決まってるだろ。
釣られてへぼい回答してんじゃねぇぞ

716:nobodyさん
09/02/08 21:07:39
ツン?

717:nobodyさん
09/02/09 00:04:48
PHPとMySQLで学習用のWEBシステムを作っているのですが

' % 等のDBにとっては迷惑な文字列が入力された場合に、それとHTML上の特殊文字に変換する
にはどうすれば良いですか?

簡単な掲示板を作ったのですが' %が入力された場合にエラーが発生し困っています。


718:nobodyさん
09/02/09 00:12:47
基礎中の基礎すぐる

719:nobodyさん
09/02/09 08:41:31
>>717
mysql_real_escape_string
addslash


720:nobodyさん
09/02/09 08:53:51
addslash ? syntax error

721:nobodyさん
09/02/09 09:16:28
データーベースにデーターをつっこむ直前に
データーベース専用のエスケープ処理をするのが普通

722:nobodyさん
09/02/09 09:20:54
データー(笑)

723:nobodyさん
09/02/09 21:42:26
>717
使える箇所ならプリペアドステートメント。これが一番安全。
URLリンク(jp2.php.net)
URLリンク(jp2.php.net)

使えない箇所ならmysql_real_escape_stringなど。
どの文字が危険かはDBによって違うので、MySQLにはMySQLの、OracleにはOracleの、SQLiteにはSQLiteの専用の関数がある。

724:nobodyさん
09/02/11 12:21:22
htmlの<base>のようにユーザのトップディレクトリを指定したいんですが、
ユーザのトップディレクトリを調べる方法はありますか?


725:nobodyさん
09/02/11 13:56:50
環境は?OSとか

726:nobodyさん
09/02/11 14:12:44
>>725
ああすみません。
開発環境はPHP5.2.6でOSXなんですがWebサーバはまだ借りてないのでどうなるかはわかりません。
PHP5でApachサーバのところを借りようとは思ってます。
なので開発環境との違いや引っ越し時のことを考えて汎用的な関数がないかと質問しました。
一応マニュアルのファイルシステム関数は目を通したんですが…

727:nobodyさん
09/02/11 14:24:23
exit()ってスクリプト終了のために多用してもいいのでしょうか?
たとえばエラーチェック時にdieの代わりに自作関数呼び出して終了みたいな場合など

function return_json($flag, $data){
 if($flag == true)
  $result = $data;
 else
  $result = "ERR:".$data;
 $res = array(
  "status" => $flag,
  "result" => $result );
 print(json_encode($res));
 exit();
}

if(エラーチェック1) return_json(false,"エラー1です"); //エラーなら終了

if(エラーチェック2) return_json(false,"エラー2です"); //エラーなら終了

//最後に
return_json(true,"成功です。");

728:nobodyさん
09/02/11 14:33:34
別にいいんでは?

729:nobodyさん
09/02/11 15:13:35
関数はあくまで何かを返すだけにして、制御を握っているのは「メインのルーチン」ひとつにした方がいい。
あちこちの関数で好き勝手に処理を中断したり画面出力してたりすると、そのうち管理しきれなくなる。
同じ理由で、printするよりは文字列を返す(printは「メインのルーチン」で行なう)方がいいと思う。

俺ならreturn_json()はjsonを返すだけ(exitもprintもしない)にして
function generare_json(){
 if(isError1()){
  return return_json(false,"エラー1です");
 }
 if(isError2()){
  return return_json(false,"エラー2です");
 }
 return return_json(true,"成功です。");
}
とし、echo generate_json()を最後に呼び出す。
exit()はスクリプトの末尾のみ、出力はこの文のみになる。

730:nobodyさん
09/02/11 15:20:37
つうか、正しいjson出力とエラー出力を別の関数にするかな。
boolを渡すより、return_error_json()の方が分かりやすい。

731:nobodyさん
09/02/11 15:23:03
>>719
ヒントをサンクス。

>>723
詳しいありがとうございます。
参考にさせて頂きます。

732:nobodyさん
09/02/11 17:07:46
>>726
ああもしかして、http://~/~user/ の部分の実ディレクトリが知りたいってこと?

733:nobodyさん
09/02/11 17:30:07
実ディレクトリでいいのかな?ローカルでいえば
/Applications/MAMP/htdocs/
となります。
実行ファイルがトップにあるわけではないので相対パスでのファイル指定より
基点からの絶対パスのほうがわかりやすいかなと。

734:724,733
09/02/11 17:31:27
>>732
アンカーわすれてたので念のため

735:nobodyさん
09/02/11 17:45:24
>>733
dirname(__FILE__) とか getcwd() とか

そういうこと?

736:nobodyさん
09/02/11 17:47:36
>>733
$_SERVER['DOCUMENT_ROOT']

737:nobodyさん
09/02/11 18:00:00
ユーザー関係ないじゃんw

738:724,733
09/02/11 19:15:46
>>735,736
$_SERVER['DOCUMENT_ROOT']で希望のパスを得ることができました。
ありがとうございました。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch