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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2010/10/13(水) 12:01:33ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

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

◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0932nobodyさん2010/10/26(火) 23:04:08ID:???
>>931
http://php.net/manual/ja/pdo.errorinfo.php
http://php.net/manual/ja/pdostatement.errorinfo.php
0933nobodyさん2010/10/26(火) 23:07:24ID:???
>>931
こっちの方が大事だ
http://php.net/manual/ja/pdo.query.php
0934nobodyさん2010/10/26(火) 23:24:57ID:DOrgamz8
>>932>>933ありがとうです。
ですが、すいません、良く分かりませんでした。。。
0935nobodyさん2010/10/26(火) 23:32:49ID:???
>>934
よく読もうぜ。
関数やクラスを使うときにリファレンスを読むのは基本中の基本だよ。
0936nobodyさん2010/10/26(火) 23:56:02ID:Y5jQHIQ+
>>929
マジすみません><そのとおりでした 
0937nobodyさん2010/10/26(火) 23:58:29ID:DOrgamz8
>>935
単純に何が原因なのでしょうか?構文自体に問題はないように見えますが
0938nobodyさん2010/10/27(水) 01:28:02ID:???
エラー文にはnear "SET"って書かれてるんだから
そこの部分をだしなさいよ
SETって書いてるとこあるんだろ?
0939nobodyさん2010/10/27(水) 01:37:54ID:2BwSQxVQ
>>938
>>828の構文の一行目のことだと思うんですが。。。違ったらスイマセn...
0940nobodyさん2010/10/27(水) 01:53:54ID:???
$stmt = $dbh->query("SET NAMES utf8;");
0941nobodyさん2010/10/27(水) 02:06:36ID:2BwSQxVQ
>>940さんありがとうございます! ですが今度は新しいエラー
Array ( [0] => HY000 [1] => 1 [2] => SQL logic error or missing database )
が出てきました。
0942nobodyさん2010/10/27(水) 02:11:36ID:???
PDOをインスタンス化してる部分を重要な情報外して書いてみ
new PDOの部分ね
0943nobodyさん2010/10/27(水) 02:13:00ID:???
MySQLじゃなくてSQLiteなんでしょ
0944nobodyさん2010/10/27(水) 02:16:35ID:2BwSQxVQ
>>942>>943
レスありがとうございます。SQLiteでやっております。
0945nobodyさん2010/10/27(水) 02:19:04ID:???
つまりset namesの構文は使えない
0946nobodyさん2010/10/27(水) 02:20:12ID:???
なんつうオチだ
0947nobodyさん2010/10/27(水) 02:23:08ID:???
PRAGMA encoding = "UTF-8";
ただしテーブル単位であることに注意
0948nobodyさん2010/10/27(水) 02:25:30ID:2BwSQxVQ
>>945>>946レスありがとうございます。
set namesは使えなかったんですね...

>>941のエラーの対処はどうしたら良いのでしょうか?
調べたらディレクトリの権限に関する情報が出てきたんですが、
パーミッションはディレクトリ777と各ファイル666以上にしてあるのですが

0949nobodyさん2010/10/27(水) 07:13:20ID:???
>>948
はい?>>945が読めないのか?
0950nobodyさん2010/10/27(水) 08:05:53ID:???
読めますが何か
0951nobodyさん2010/10/27(水) 08:35:39ID:???
ダメだよ空気や前後の流れも読めなきゃ
0952nobodyさん2010/10/27(水) 09:02:57ID:???
それも読めますが何か
0953nobodyさん2010/10/27(水) 09:55:40ID:???
まず貼ってある部分以外でエラーが出てる可能性があるので、
PDOを呼び出してるところでエラーを返すものは全部チェック。
エラーを返すかどうかはちゃんと関数リファレンスで調べる。
エラーが出た直後でerrorInfoで詳細を表示っていうのが基本。
最初から一歩ずつ足元を固めていかないと何をやってるのか
わからなくなるよ。
0954nobodyさん2010/10/27(水) 10:47:37ID:???
マニュアルはわからなくなったときに読む物。
0955nobodyさん2010/10/27(水) 11:11:21ID:???
PHP5系で、最初にマッチした文字列のみを置換するには
substr_replaceとstrposの組み合わせ以外で何かスマートな方法はありますか?
0956nobodyさん2010/10/27(水) 11:17:13ID:???
スーパーエンジニアにやってもらう
0957nobodyさん2010/10/27(水) 11:26:42ID:???
preg_replacet使うと回数指定が出来るので楽じゃない?
正規表現なので処理がもったいないのとエスケープ
が必要かもしれないというのが弱点だけどな。
0958nobodyさん2010/10/27(水) 11:52:27ID:???
>>956
市ね
0959nobodyさん2010/10/27(水) 12:21:33ID:PYQNlHNo
日本語と英数字が混在している文字列を全角10文字ごとに
「<br />」タグを挿入したいと思います。
wordwrap関数では半角英数字の場合は↓でうまくいくのですが、
wordwrap($text,20,"<br />",true);

日本語と英数字が混在すると文字化けを起こしてしまいます。

例えば↓のような日本語英数字が混在する場合、

僕の家は埼玉県hogehoge市2-1-2です。(うそ)よろしく

関数か何かで↓のように変換するにはどうしたらよいでしょうか?

僕の家は埼玉県hogeho<br />ge市2-1-2です。(うそ<br />)よろしく
0960nobodyさん2010/10/27(水) 12:44:45ID:???
>>959
解決とは違うがなんでそんなことがしたいの?HTMLの書き方的に凄く気持ち悪い
10文字ごとの幅で折り返したいだけならそれの親要素の幅を指定してやる方がスマートだし正しい
すとりくたん的に受け付けないわ
0961nobodyさん2010/10/27(水) 12:51:55ID:???
firefoxのバージョンによっては半角がwordwrapされないから
0962nobodyさん2010/10/27(水) 12:59:02ID:???
>>959
本当にその例「僕の家は埼玉県hogehoge市2-1-2です。(うそ)よろしく」で文字化けするのなら
文字コードの指定の問題。スクリプトの文字コードやmb_*の値を確認して。

次に、「1234567890123456789あい」という文字列の場合
20で区切ると「あ」が分割されるから文字化けするのは仕方がない。

ということで、mb_strlenとmb_substrなどを組み合わせるのが良いと思うが
全角半角区別なく「10文字」ならmb_strlenで簡単だけど
「全角10文字」と「20バイト」は意味が違うから面倒かもね
0963nobodyさん2010/10/27(水) 13:01:28ID:???
>>961
半角が改行されないのは禁則処理である意味当たり前だからな
そういう理由なら半角数字を全角にするとかの方がまともな対策だと思うが
0964nobodyさん2010/10/27(水) 13:39:47ID:???
>>959
SJIS限定

$len = 20;
$str = "僕の家は埼玉県hogehoge市2-1-2です。(うそ)よろしく";
mb_internal_encoding("sjis");
$result = array();
for ($i = 0; $i <strlen($str); $i += $len) {
$result[] = mb_strcut($str, $i, $len);
}
echo implode("<br />", $result)."\n";

僕の家は埼玉県hogeho<br />ge市2-1-2です。(うそ<br />)よろしく
0965nobodyさん2010/10/27(水) 16:02:45ID:???
ID出さないでageる方法
0966nobodyさん2010/10/27(水) 16:07:06ID:HdTEvBrp
classのインスタンスを別の変数から取得できないかと思い、
↓のようなコードを書いたのですが、何も出力されません。
newする以外に取得する方法はないのでしょうか?

class Test{
var $text = 1;
function getInstance(){
return $this;
}
}
$obj = Test::getInstance();
echo $obj->text;
0967nobodyさん2010/10/27(水) 16:21:36ID:dVXlaE2k
おすすめCMS教えてください
条件はフリーであること

0968nobodyさん2010/10/27(水) 16:23:11ID:???
>>967
http://www.google.co.jp/search?hl=ja&source=hp&biw=1024&bih=655&q=php+cms&aq=f&aqi=g10&aql=&oq=&gs_rfai=
0969nobodyさん2010/10/27(水) 16:24:15ID:???
>>965
メル欄にsage以外の何か書けばID出さずに上がるだろアホ
0970nobodyさん2010/10/27(水) 16:28:00ID:???
>>969
>>965は質問じゃなくてそれをやってんだろ
まあアホなことにはかわりはないが
0971nobodyさん2010/10/27(水) 16:30:20ID:???
>>966
<?php
class SimpleClass
{
public static $var = 'a default value';

public static function displayVar() {
return self::$var;
}
}

echo SimpleClass::displayVar();
0972nobodyさん2010/10/27(水) 16:31:02ID:???
>>966
スタティックなクラスはインスタンスを作らなくていいのがメリットじゃないの?

class Test{
static private $text = 1;
static public function getText() {
return self::$text;
}
}
echo Test::getText();

メンバ変数$textをpublicにすれば
echo Test::$text; も可能。
0973nobodyさん2010/10/27(水) 16:33:04ID:???
>>969-970さん質問に答えましょう
0974nobodyさん2010/10/27(水) 16:35:02ID:???
>>973
まずテメーが答えろあほ
俺はいろいろ回答してる
0975nobodyさん2010/10/27(水) 16:40:23ID:???
>>966
最低限この3ページくらいは完璧にしてきて
http://www.php.net/manual/ja/language.oop5.basic.php
http://www.php.net/manual/ja/language.oop5.paamayim-nekudotayim.php
http://www.php.net/manual/ja/language.oop5.static.php
0976nobodyさん2010/10/27(水) 16:53:38ID:???
>>973
そんなこというなら>>965に「質問しましょう」って指摘しろよww
09779662010/10/27(水) 16:54:30ID:HdTEvBrp
みなさんありがとうございます。勉強します
0978nobodyさん2010/10/27(水) 17:26:07ID:2BwSQxVQ
>>953
レスありがとうございます。コマンドでやるときは問題ないんですが...
一覧を表示することはできるのですが、insertがうまくいかないんですよね。
↓全文です。sqliteは3.3.6です
try {

$dbh = new PDO('sqlite:test.db');
$res = $dbh->query( 'SELECT * FROM tab1');

$sql = 'insert into tab1 (number, name, note) values (?, ?, ?)';
$stmt = $dbh->prepare($sql);
$flag = $stmt->execute(array('104', '成田','日本'));
print_r($flag);

if ($flag){
print('データの追加に成功しました<br>');
}else{
print('データの追加に失敗しました');
}
}
catch( PDOException $e ) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
0979nobodyさん2010/10/27(水) 17:31:22ID:???
成田と日本をnaritaとjapanにして上手く行くかどうか見たら?
0980nobodyさん2010/10/27(水) 17:38:49ID:2BwSQxVQ
>>979
レスありがとうございます。駄目でした。
0981nobodyさん2010/10/27(水) 18:19:27ID:???
成田と日本を仁川と韓国にして上手く行くかどうか見たら?
0982nobodyさん2010/10/27(水) 18:25:25ID:???
きっとnumberじゃなくてnunberじゃない?テーブルの方がnunberになってるとか
0983nobodyさん2010/10/27(水) 18:29:32ID:???
>>980
エラーはでてないの?
あとスレ建て出来る?
0984nobodyさん2010/10/27(水) 18:29:43ID:???
パソコンの電源が入っているのかまずそこから
0985nobodyさん2010/10/27(水) 18:35:04ID:2BwSQxVQ
レスありがとうございます。
>>981さん。駄目でした...
>>982さん。前に指摘してもらったスペルミスを修正しましたwお恥ずかしい限りです。
>>983さん。エラーは>>941にある通りです。スレッドは立てさせていただきました。
>>984さん。お借りしているサーバーでやってるのですが、今は動いてます。
0986nobodyさん2010/10/27(水) 18:36:38ID:???
誘導リンクも貼ろうな
http://hibari.2ch.net/test/read.cgi/php/1288168893/
ついに100か・・・
0987nobodyさん2010/10/27(水) 18:40:22ID:2BwSQxVQ
>>986
忘れてましたw誘導ありです。
0988nobodyさん2010/10/27(水) 18:54:38ID:???
きっとnumberじゃなくてnumbarじゃない?テーブルの方がnumbarになってるとか
0989nobodyさん2010/10/27(水) 18:56:33ID:???
>>988さん。パソコンの電源は切りました。
0990nobodyさん2010/10/27(水) 18:59:47ID:???
>>978
デフォじゃコンストラクタ以外で例外吐いてくれないぞ

$dbh = new PDO('sqlite:test.db');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
0991nobodyさん2010/10/27(水) 19:22:41ID:2BwSQxVQ
>>990さん。レスありがとうございます。
Connection failed: SQLSTATE[HY000]: General error: 1 SQL logic error or missing database
と出ました。
これはフォルダに書き込み権限与えてない為表示されるエラーなんでしょうか?
ちなみにフォルダの属性は777です
0992nobodyさん2010/10/27(水) 19:26:29ID:???
いい加減にネタレスでスレを無駄にするな
0993nobodyさん2010/10/27(水) 19:48:56ID:???
>>991
どこのフォルダの属性なの?777ってのは
0994nobodyさん2010/10/27(水) 19:54:59ID:2BwSQxVQ
>>993さん
test/sqltest.php
↑ここです
0995nobodyさん2010/10/27(水) 20:01:05ID:???
羽田じゃダメなの?
0996nobodyさん2010/10/27(水) 20:13:20ID:???
>>994
sqltest.phpってのはこのスレで今初めて出てきたわけだけど、test.dbもsqltest.phpと同じ場所にあるんだよね?
>$res = $dbh->query( 'SELECT * FROM tab1');
↑のなしで実行してみてよ
PDOは全部fetchしないうちに次のクエリ発行したらダメだったと思う。

ttp://php.net/manual/ja/pdo.query.php
>PDO::query() を次にコールする前に 結果セット内の全てのデータを取得しない場合、そのコールは失敗します。
>PDOStatement::closeCursor() をコールし、 次に PDO::query() をコールする前にPDOStatement オブジェクトに関連付けられたリソースを解放してください。
0997nobodyさん2010/10/27(水) 20:24:08ID:2BwSQxVQ
>>996さん 丁寧にありがとうございます。

>sqltest.phpってのはこのスレで今初めて出てきたわけだけど、test.dbもsqltest.phpと同じ場所にあるんだよね?
そうです。

>>$res = $dbh->query( 'SELECT * FROM tab1');
>↑のなしで実行してみてよ
>PDOは全部fetchしないうちに次のクエリ発行したらダメだったと思う。
外したら出来ました。fetchしてから使わないと駄目だったんですね...
後は自力でなんとかできそうです。

長々とすいませんでした。レスしてくれた方ありがとうです。

0998nobodyさん2010/10/27(水) 20:49:18ID:???
>>992が無駄なレスな件について
0999nobodyさん2010/10/27(水) 22:39:18ID:dVXlaE2k
>>998
>>992のレスのおかげで無駄なレスが減ったとすれば>>992は無駄なレスではないだろう
1000nobodyさん2010/10/27(水) 22:46:48ID:???
>>992によって>>998-1000が生まれたのなら一概に無駄レス削減に貢献したとも言えないな
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。