トップページphp
1001コメント342KB

【PHP】下らねぇ質問はID出して書き込みやがれ 85

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/06/15(月) 22:53:52ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 84
http://pc11.2ch.net/test/read.cgi/php/1240835951/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0159nobodyさん2009/06/24(水) 13:31:30ID:???
配列は変数じゃないと?
0160nobodyさん2009/06/24(水) 14:40:53ID:XDFiYdla
>>158さん

ありがとうございます。勉強になります
<? ?> 内でステートメントが完結していなくても
問題ないんですね
0161nobodyさん2009/06/24(水) 14:43:29ID:???
ステートメントが寸断されてたらそりゃ問題あるよ
問題ないのはブロックだろ
0162nobodyさん2009/06/24(水) 17:58:43ID:???
MacとWindowsを識別して別のページに飛ばすことって可能ですか?
携帯・PCは識別出来たんですが、OSの識別はぐぐっても出てこない。
見落としてたらすんません。誰かご教授お願いします。
0163nobodyさん2009/06/24(水) 18:05:12ID:???
UAでわからなかったっけ?
Mac?Windows?みたいに質問するって方法もある
あとやったことないけどJavaScriptで改行コード"\n"を展開させてそれを受信してみるとか。。
0164nobodyさん2009/06/24(水) 18:15:53ID:???
get_browser
ttp://jp2.php.net/manual/ja/function.get-browser.php
も忘れずに。
0165nobodyさん2009/06/24(水) 18:24:52ID:???
>>163-164

ありがとう!
WindowsかWindowsじゃないかで、やってみようと思います。
0166nobodyさん2009/06/24(水) 18:54:57ID:O6/z8sKK
>>154
ローカル環境という言葉自体をはじめて聞きました
ググってみたのですが、説明が抽象的でよくわかりませんでした
ローカル環境を構築したPCはサーバーになるということですか?
だとしたらサーバーにしないで動作確認だけする方法はありますか?
ずれた質問をしてるかもしれませんがご教示願います
0167nobodyさん2009/06/24(水) 19:54:37ID:???
まず「ローカル」と「サーバ」の違いを理解したほうがいいよ
Webアプリケーション製作の基礎中の基礎。っていうか根本概念。
プログラム書くのはまだ早すぎる。
0168nobodyさん2009/06/24(水) 20:57:38ID:???
$lastという変数をvar_dumpしたところ
string(1) " "
と返ってきました
これは変数に半角空白が入ってると
思い

if($last == ' ')echo 'true';

と書いてみたのですがtrueが帰ってきません
string(1) " "をもっと詳しく調べる方法はないでしょうか?
0169nobodyさん2009/06/24(水) 20:59:46ID:???
ord()
0170nobodyさん2009/06/24(水) 21:11:08ID:???
どうせ改行コードだろう
0171nobodyさん2009/06/24(水) 21:13:51ID:O6/z8sKK
>>167
ローカルはオフラインのこと
サーバーはオンラインでデータをやり取りするためのもの


・・・と解釈してるのですが間違ってますか?
0172sage2009/06/24(水) 22:24:39ID:QqjFg27f
Apache と php のインストール
0173nobodyさん2009/06/24(水) 22:48:49ID:???
>>161
そうだったんだ?
0174nobodyさん2009/06/24(水) 22:49:32ID:???
>>166
プログラムを教えてください
http://pc12.2ch.net/test/read.cgi/tech/1243778529/
0175nobodyさん2009/06/24(水) 22:57:21ID:???
>>171
間違ってる
0176nobodyさん2009/06/25(木) 00:57:46ID:Niw+Ve6P
【OS名】XP
【PHPのバージョン】php5.2
【質問内容】
HTMLでinputボタンを下記のように6個作ってあります。

A0 B0
A1 B1
A2 B2

A0のボタンが押された後、B0のボタンが押されたら「1」
A0のボタンが押された後、B1のボタンが押されたら「2」

と言うようにボタンの組み合わせによって数値を作り
3桁のパスワードを作る画面を作りたいと思っているのですが、
PHP1日目故、どこをどう作っていいのか分からず途方にくれています。

何かヒントでも頂ければと思い書き込みさせてもらいました。
レス頂ければ幸いです。
0177nobodyさん2009/06/25(木) 01:08:21ID:???
パチスロでも作ってんの?
0178nobodyさん2009/06/25(木) 02:22:08ID:???
>>176
要は3桁の数字をボタンで入力させて、サーバーに送ればいいんでしょ?
それだったらJavascript使って、ボタン押した時にhiddenなinputに一桁ずつ入れて、三桁目が入ったらphpファイルにpostすればいいんじゃない?

でもパスワード入れる画面なら、普通にinput type=textのほうが操作性いいと思うよ!
0179nobodyさん2009/06/25(木) 02:31:59ID:Niw+Ve6P
>>177
パチスロではないです。課題で出された問題なんです。

>>178
そうです。ボタンの組み合わせで3桁の数値を作って111の様なパスを設定し、
それをログイン画面の入力欄に入力されたパスワードと比較して、
正しければOKのページ、間違いならエラーメッセージと言うような
処理にしたいと思っています。

Javascriptで上記が満たせる処理が作れるんでしょうか?
色々調べてみようと思います。
0180nobodyさん2009/06/25(木) 03:51:50ID:???
>>179
これってPHPの課題?
画面の遷移無しでって話ならjs使わないと無理だろ。
画面の遷移ありならPHPだけで出来るけど。

どうせなら課題の問題全部伝えないと答え出ないよw
0181nobodyさん2009/06/25(木) 04:07:38ID:???
>>179
>>180の言う通りでPHPで実現するにはどうしても画面遷移が必要だし、そうするメリットは何もない。
だから数字の入力と、サーバーに送る動きは別物で考えるべき。
前者はJSで、後者はPHPでやればいいよ。

暇だから書いてあげるよ!課題は?
0182nobodyさん2009/06/25(木) 04:24:18ID:???
本人のためにならんことを
0183nobodyさん2009/06/25(木) 06:41:54ID:HSbLKHIx
>>180
PHPの課題です。
画面の遷移の有無でも違いがあるんですね。
知りませんでした。

>>181
>>176で書いた処理を使ってパスワードを設定した後、
そのパスワードをどこかに保持した状態でログイン画面に遷移します。
ログイン画面から入力されたパスワードと設定したパスワードを比較して、
正しければOKのページ、エラーならメッセージの表示と言う風に
処理を分岐させたいと考えています。

javascriptとPHPを上手く使わないといけないのですね。
奥が深いです。
0184sage2009/06/25(木) 07:29:23ID:utUUg4I/
>>176
javascriptで簡単にできるぞ
0185nobodyさん2009/06/25(木) 13:20:30ID:???
関数の前に & がつくのは、つかないのと何が違うのでしょうか?

function &test() {
}

function test() {
}
0186nobodyさん2009/06/25(木) 13:30:30ID:???
>>185
リファレンス

PHP: リファレンスの説明 - Manual
http://www.php.net/manual/ja/language.references.php
0187nobodyさん2009/06/25(木) 13:35:10ID:???
>>186
ありがとうございます。
変数のリファレンスは分かった気がします。

関数のリファレンスは
どんなときに使うと便利か誰か教えてくれませんか。
0188nobodyさん2009/06/25(木) 14:27:22ID:???
関数の返り値を参照にしたい場合だよ
だから変数と同じ
0189nobodyさん2009/06/25(木) 15:08:43ID:???
>>188
ありがとうございます。
どういう時に返り値が参照渡しだといいのでしょうか。
0190nobodyさん2009/06/25(木) 16:53:33ID:???
だから変数が参照渡しだと嬉しいときと同じ
0191nobodyさん2009/06/25(木) 17:04:31ID:???
変数も分かった気がするだけなので(^^;;
どういう時かよく分からんのです。。。
0192nobodyさん2009/06/25(木) 18:00:17ID:???
動けばいいっちゃ
0193nobodyさん2009/06/25(木) 18:16:24ID:???
誰か具体例教えてくださーい
0194nobodyさん2009/06/25(木) 18:48:17ID:???
たい焼きの作り方かな?
0195nobodyさん2009/06/25(木) 19:34:23ID:???
まずは、たい焼きくんを釣る
0196nobodyさん2009/06/25(木) 20:00:11ID:???
SQLクエリに対して何もヒットしなかった場合を判別したいときって、sqlite_num_rows()で
行数を見るしか方法無い?
sqlite_queryの結果ハンドルがFALSEを返すかと思ったけど、よく読むとクエリが失敗した
場合にFALSEを返すので使えない。

今はこんな風に書いているけど、何かこう美しくないというかもっとスマートな方法が
あるような気がする。

$sql = "SELECT ....";
$res = sqlite_query($db_con, $sql);

if (sqlite_num_rows($res) == 0) {
  //0件の時はSQL投げ直し
  $sql = "SELECT ...";
  $res = sqlite_query($db_con, $sql);
}

while ($row = sqlite_fetch_array($res, SQLITE_ASSOC)) {
}
0197nobodyさん2009/06/25(木) 20:23:47ID:utUUg4I/
mysql_affected_rows();
0198nobodyさん2009/06/25(木) 20:31:04ID:4KEfnuyb
>>184
javascriptでどういう風にプログラムを組めばいいか
何かヒントを教えて頂けないでしょうか?
0199nobodyさん2009/06/25(木) 20:55:26ID:utUUg4I/
<script type="text/javascript">
// <![CDATA[
function test(n) {
document.getElementById("out").innerHTML = n;
}
// ]]>
</script>
<div id="out"></div>
<input type="submit" value="1" onClick="test(1)">
0200nobodyさん2009/06/25(木) 21:19:33ID:???
>>197
やっぱり行数で見るしかないのか…
イメージ的に、boolで返してくれそうな関数があっても良さそうなんだけど。
0201nobodyさん2009/06/26(金) 01:13:39ID:???
クエリは正しく通ってるんだからfalseじゃおかしいだろ
0202nobodyさん2009/06/26(金) 01:32:36ID:???
>>198
<?php
if($_POST["pass"]=="成功の場合の数字")
echo "成功";
else
echo "エラー";
?>
0203nobodyさん2009/06/26(金) 01:44:34ID:m+lfcOij
<form action="write.php?data=○○" method="post">

○○の部分にphpの変数を入れたいのですがどうしたらいいでしょうか?
0204nobodyさん2009/06/26(金) 01:50:13ID:???
'〜〜' . $var . '〜〜';
0205nobodyさん2009/06/26(金) 01:57:52ID:m+lfcOij
>>204
phpの外のhtmlのタグの中に入れたいのです
0206nobodyさん2009/06/26(金) 02:05:28ID:???
>>203
省略表示が使えるなら

<form action="write.php?data=<?=$hoge?>" method="post">

って感じ。使えないなら

<form action="write.php?data=<?php echo $hoge;?>" method="post">

って感じ。あんまり美しくないけど。
0207nobodyさん2009/06/26(金) 02:08:36ID:m+lfcOij
>>206
ありがとうございました
0208nobodyさん2009/06/26(金) 02:21:51ID:???
気持ち悪い書き方だな
0209nobodyさん2009/06/26(金) 03:56:41ID:eh6qHIVY
cakephpなんですが

コントローラのメソッドで
function add($id) {

function add($id = null) {
の違いがわかりません。

後者でもURLのパラメータ値がidに入ってくるのに、
nullで初期化する意味はあるのでしょうか?
0210nobodyさん2009/06/26(金) 06:23:17ID:???
http://www.php.net/manual/ja/functions.arguments.php#functions.arguments.default
0211nobodyさん2009/06/26(金) 07:35:12ID:???
Apacheがうまくインストールできません、プロンプト画面が出て\Program Files
でシステムエラーのようなものが表示されます。
0212nobodyさん2009/06/26(金) 07:50:16ID:vbul8rC5
XAMPPとかいったセット使えよ
名前違うかも
0213nobodyさん2009/06/26(金) 07:51:56ID:vbul8rC5
ここにある
http://www.apachefriends.org/jp/xampp-windows.html#2671
0214nobodyさん2009/06/26(金) 10:23:56ID:TMhnu1Td
>>176
if($_POST['A0']=="A0"){
$b=str_rplace=("B0","1",$a);
$b=str_rplace=("B1","2",$a);
print("パスワードは".$b);
}else{
print("操作が間違っています");
}
0215nobodyさん2009/06/26(金) 10:30:30ID:???
えっ
0216nobodyさん2009/06/26(金) 11:22:27ID:Ht+rgjYH
オウム手配犯3人写真 
平田 信(44歳)
http://www.keishicho.metro.tokyo.jp/jiken/tehai/image/hirata001.jpg
高橋克也(51歳)
http://www.keishicho.metro.tokyo.jp/jiken/tehai/image/takahashi001.jpg
菊地直子(37歳)
http://www.keishicho.metro.tokyo.jp/jiken/tehai/image/kikuchi001.jpg
0217nobodyさん2009/06/26(金) 13:56:50ID:???
class Test {
function a() {}
}
$t = new Test();

のように new Test() した後に
Test クラスに b メソッドを追加することってできますか?
0218nobodyさん2009/06/26(金) 14:02:25ID:???
不可
0219nobodyさん2009/06/26(金) 14:03:22ID:???
ぐぐったらpeclのrunkit使えばできるらしい
0220nobodyさん2009/06/26(金) 14:13:28ID:???
>>219
ありがとうございます。ですよね。
runkit は凶悪なツールですね。
0221nobodyさん2009/06/26(金) 16:20:28ID:???
pg_query() は try で捕まえられないのでしょうか?

pg_query($db, 'begin;');
try {
pg_query($db, $sql); // ★エラーが発生
}
catch (Exception $e) {
pg_query($db, 'rollback;');
}
pg_query($db, 'commit;');
0222nobodyさん2009/06/26(金) 16:21:28ID:???
それ例外投げるの?
0223nobodyさん2009/06/26(金) 16:24:13ID:???
ですよねー
0224nobodyさん2009/06/26(金) 16:42:12ID:???
Warning: pg_query(): Query failed: ERROR: が捕まえられるわけじゃないんですね。。。
0225nobodyさん2009/06/26(金) 16:45:45ID:???
set_error_handlerかPDO使えばできるよ
0226nobodyさん2009/06/26(金) 17:04:09ID:???
>>225
ありがとうございます!
set_error_handler でうまくいきましたー。
0227nobodyさん2009/06/26(金) 17:25:24ID:???
try のブロック内にいるかどうか判定できませんか?
0228nobodyさん2009/06/26(金) 17:25:48ID:???
なんで?
0229nobodyさん2009/06/26(金) 17:44:17ID:???
>>228
既存プログラムである >>221
一部 try を入れて、>>226 のように

function error_handler($no, $message, $file, $line) {
throw new Exception("[$no] $message at $file:$line");
}

というのを用意しました。

try 外のエラーが error_handler のために
おかしなエラーになっているので、

function error_handler($no, $message, $file, $line) {
$message = "[$no] $message at $file:$line";
if (try 内部か) {
throw new Exception($message);
}
else {
die($message);
}
}

にしたいなと。
0230nobodyさん2009/06/27(土) 03:46:30ID:???
普通ラップするクラス作って begin commit rollback prepare execute とかで
まとめるもんじゃね?
そこで例外投げればいいわけだし。

素直にPDO使えばいいのに。
0231nobodyさん2009/06/27(土) 04:15:49ID:+RIsncnI
セッションファイルを直接読もうと思ってunserialize()したんですが、セッションってserialize()と同じ形式で保存されていないようで(デリミタが微妙に違う?)セッションファイルを直接読む場合どうすればいいのでしょうか?
02322312009/06/27(土) 05:06:52ID:+RIsncnI
自己レスです。こんな感じでできました。

$session_file = "/tmp/sess_5f660455a0c309d48c04b0597144a9fa";
$data = preg_split('/([A-Za-z_][A-Za-z0-9_]*)\|/',file_get_contents($session_file),
-1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
for($i=0;$i<count($data);$i+=2)
$_SESSION[ $data[$i] ] = unserialize($data[$i+1]);
0233nobodyさん2009/06/27(土) 09:21:00ID:???
the requested operation has failed とエラーが出て、apacheとphpの連携が取れない。
システムファイルを修正する前はapacheがちゃんと起動できたのに、誰か助けて〜〜〜〜〜〜!
0234nobodyさん2009/06/27(土) 11:46:01ID:???
php4だったと思います。
GoogleのHTMLを取得して、別に用意したlog.htmlに上書き
という処理をしたいです。

<?php
$lines = file("http://www.google.co.jp/index.html");
foreach ($lines as $l) {
$html .= $l;
}
$inc = fopen("log.html","w");
fwrite($inc,$html);
fclose($inc);
?>

上記コマンドで文法ミスがありますでしょうか?
別問題としてcronを使っているので、cron側の問題でしょうか?
0235nobodyさん2009/06/27(土) 12:25:28ID:???
つスレタイ
0236nobodyさん2009/06/27(土) 12:33:20ID:+txMHXQ4
234,IDだします
0237nobodyさん2009/06/27(土) 12:59:40ID:???
文法ミスがあったらfatal errorが出るんじゃね?
0238nobodyさん2009/06/27(土) 16:34:23ID:nkgcVTu2
質問です
データベースから取り出した文字列を、textやtextAreaの形でブラウザに表示をさせ、
もし変更があれば、変更を入力してもらい、変更があった場合と変更がない場合で
処理をかえるプログラムを作っています。

ここでphpの文字列比較がうまく行かなくって悩んでいます。
データベースから取り出した文字列をセッションで保存(この文字列を以下「A」とします。)
それをブラウザで表示させ、再度入力をしてもらった文字列(以下「a」とします。)
「a」はもちろん入力された後、すぐにhtmlspecialcharsを通しています。
if(strcmp(A,a)==0){
//処理1
} else {
//処理2
}
とすると、何の変更もないのに処理2を行ってしまいます。
なにかうまい方法はないでしょうか?
「A」をhtmlspecialcharsで変換してみてもだめでした。

どなたかご存知でしたらお教えください。
よろしくお願いいたします。
0239nobodyさん2009/06/27(土) 17:33:06ID:???
入力してもらった文字列をhtmlspecialchars通す必要あるの?
表示しないでしょ?
0240nobodyさん2009/06/27(土) 19:26:15ID:???
比較がおかしいなら両方の変数をvar_dump()して見比べればわかるだろうにと
脊髄反射してみる
0241nobodyさん2009/06/27(土) 20:56:19ID:nkgcVTu2
>>239
一応確認のために、入力してくれた値を再表示するので、通してます。
>>240
見比べても、全く違いがないんだけど・・・・
0242nobodyさん2009/06/27(土) 21:27:39ID:???
htmlspecialcharsはDBに入れる前でなく表示する直前にかけれ
0243nobodyさん2009/06/27(土) 21:39:09ID:nkgcVTu2
>>242
とりあえず、試しにhtmlspecialcharsをかけないで試してみた。
でも、変わらず・・・。

ただ、htmlspecialcharsをかけてもかけなくても、文章によっては正常に「同じ」と評価する場合もある。
なんか、だめな文字とかあるのかな?
0244nobodyさん2009/06/27(土) 21:57:17ID:nkgcVTu2
追加
評価している両方の文章の見分けは、やっぱりつかない。
でも文字列にmd5をかけてみたら、違う数字になった。
やっぱりどこかが違っているみたい。
0245nobodyさん2009/06/27(土) 22:15:58ID:???
じゃ問題が再現するコードを出してくれ
0246nobodyさん2009/06/27(土) 22:35:53ID:nkgcVTu2
すみません。自己解決しました。
macの改行文字「\r」を評価するもの同士から削除すると、再現されなくなる。
どうやら昔macで入力したデータは、文字列評価で誤作動を起こすらしい。
0247nobodyさん2009/06/27(土) 22:45:01ID:???
改行コードが違っただけじゃん
0248nobodyさん2009/06/28(日) 00:03:18ID:???
rtrim()は普通やるよな
0249nobodyさん2009/06/28(日) 08:31:21ID:???
DBに入れる時は mysql_real_escape_stringを使うみたいですが、

前にこんな風に使ってる方が居ました。
mysql_real_escape_stringを使ってさらにhtmlspecialcharsも使ってました
0250nobodyさん2009/06/28(日) 10:06:21ID:???
mysql_real_escape_string()はMySQLが正しく受け取れるSQL文になるようエスケープするもの。
htmlspecialchars()は表示するときに無用なゴミを取るもの。
0251nobodyさん2009/06/28(日) 11:38:42ID:???
無用なゴミ・・・?
0252nobodyさん2009/06/28(日) 11:44:31ID:???
んじゃ、HTMLエンティティに変換可能な特殊文字を変換する、で
0253nobodyさん2009/06/28(日) 13:20:28ID:???
それがどう無用なゴミと繋がるの・・・?
0254nobodyさん2009/06/28(日) 16:04:22ID:04jk16zQ
ログイン認証のidとpassをsql使えない鯖なのでdatファイルで管理してるんだけど
他の人から丸見えなんで、隠す方法ってありますか?
0255nobodyさん2009/06/28(日) 16:07:45ID:???
>>254
basic認証が使えないってことは.htaccessも使えないのかな?
使えるならそれで隠せるし
てかパーミッションいじればいいのでは?
0256nobodyさん2009/06/28(日) 16:35:43ID:04jk16zQ
>>255
basic認証で隠せました!
ありがとです
0257nobodyさん2009/06/28(日) 18:07:47ID:P1lH7m+s
mysqlで
テーブル1
a b  c  d  e
1 0 -10 -2  1

とある場合、abcdeの値全部に
値が0より上の場合だけ
-1を足してやりたいのですが、
今まで、phpで値を参照して、0以上なら〜
という風に最低でも5回調べていました。
何かもっと効率的な方法はありますでしょうか
よろしくおねがいします
0258nobodyさん2009/06/28(日) 18:25:56ID:???
それ何のデータ?
■ このスレッドは過去ログ倉庫に格納されています