いつかきっと役に立つ

Archive for the ‘PHP関連’ Category

お問い合わせフォーム設置したのはよいが、なんだかわからないメールがたまにきたりする(-“-;)。。。迷惑きわまりないんでなんか対策せねばっっ。

ハツカミが使ってるレンサバではコンパネで「英文のメールは受け取らない」とかの設定できるんスが、、、できないトコもありましてね。さぁ、どぅするか。で、調べてみたらmb_detect_encoding関数で判別できるっちゅって書いてありましてね。へぇ~。mb_detect_encoding関数ってあの、アレでしょ。utf-8とかSJISとかってするヤツ。そうか。ではやってみましょ。

参考にしたのはココ→自由区/スパム対策/日本語かどうか調べる – DoboWiki

PerlとPHPのやり方が紹介されてますが、ハツカミはPHPのほうスね。

以下、ハツカミがやってみたのは太字部分を追加するっちゅカンタンな方法。

<?php
//フォームの値を受け取る
if ($_SERVER["REQUEST_METHOD"]  == "POST") {
$name = $_POST["name"];
$mailadd = $_POST["mailadd"];
$body = $_POST["body"];
}
//メアドが入力されているか調べる。入ってればメール送ってヨシ。

if (!$mailadd == 0) {
//お問い合わせ内容が日本語かどうか調べる

if  ( mb_detect_encoding ( $body ) == ‘ASCII’ ) {
exit ( ‘Error! Please input it in Japanese.’ );
}

//~メール送る処理をここらに書いてある
else {
echo ‘Error!Please input your e-mail address. ‘;
exit;
}
?>

ポイントはやっぱ‘ASCII’の部分でしょうな。日本語入ってないっちゅって。なるほどっ。なんか最近、とんでも初歩的なことでつまづいてるような気がする(-_-;)。。。もっかいべんきょしなおしだナ。。。さ、ドーナツ食うかっ。

タグ:

なんちゅんスかね、入力確認画面で「次へ」っちゅのと、「戻る」ちゅのと、よくあるじゃないスか。ふむっ。あの~、ほんとはね、ブラウザの戻るボタンで入力値を保持するっちゅのやりたかったんスがね。セッションでやるとかどこ見ても書いてあるんスが、、、ログインチェックでセッション使ってるせいかどうか、うまくいきませんで(-“-;)。。。しょうがなくなんスけどね、入力画面で入れた値を確認画面につないで、そこでボタン2個用意して「入力に戻る」ちゅのと「送信する」っちゅのに分けることに。はい。

で、参考にしたのはココ→FORM内に複数のsubmitを設置したとき – PHPプロ!Q&A掲示板

フォームでは「name」と「value」が送信されるっちゅのはなにもボタンに限ったことではなく、それを利用しようっちゅことですな。

以下、サンプル。

入力フォームにより引き継いだnameを「01」、「02」、「03」としてcheck.phpで確認用に表示し、振り分けはexec.phpで行うことにしましょ。

【check.php】

<form action=”exec.php” method=”post“>
<!–入力ページからとってきた値を確認用に表示する。–>
<?php
if ($_SERVER[“REQUEST_METHOD”] == “POST”) {
//フォームからデータを受け取る
$01 = $_POST[“01”];
$02 = $_POST[“02”];
$03 = $_POST[“03″];
//データを表示
echo $01.”<br />”;
echo $02.”<br />”;
echo $03;
}
else {
echo ‘Error!’;
exit;
}
?>
<input type=”submit” name=”back” value=”戻る” />
<input type=”submit” name=”submit” value=”送信” />

<!–以下、隠しフォーム。exec.phpに引き継ぐ内容。入力ページで直に振り分ける場合は不要。–>
<input type=”hidden” name=”01″ value=”<?php echo $01 ; ?>”>
<input type=”hidden” name=”02″ value=”<?php echo $02 ; ?>”>
<input type=”hidden” name=”03″ value=”<?php echo $03 ; ?>”>
</form>

【exec.php】

<?php
if (isset($_POST[‘back‘])) {
//戻るのときの処理。この場合、入力ページに値を引き継ぐ。
}
if (isset($_POST[‘submit‘])) {
//送信のときの処理。
}
?>

こんなカンジでしょうかね。

タグ:

ごく単純な関数、ど忘れしてしまった。。。

フォームから受け取った、あるいはデータベースから抜き出した複数行の文字列を、確認画面で表示するとき。

<?php
$str = “複数行の文字列\n複数行の文字列\n複数行の文字列;//textareaなどでとってきた値
echo nl2br($str);
?>

複数行の文字列
複数行の文字列
複数行の文字列

よしっっ。覚えた◎

参考:

タグ:

え~、会員DBからデータを取り出してきましてね、任意の会員にメールを一斉に送るっちゅのをPHPで書きましてね。…これがなかなかうまくいかんのですよ(-“-;)auだけ文字化けする♂文字コードはいろんなの試したんスがね、そしたら今度はsoftbankが化けしたり、pcが化けたり、、、ギブ寸前。。。subjectはISO-2022-JPに、本文はSJISにすると良いなんてことをある方から教わりましたんですが、、、softbank3GはUTF-8とか、まためんどうなことになりましてね。これはDBまたいじんなきゃいけないって事態にまでなったんスが。。。なにか根本的に間違ってるんではないかと。考えましてね。

で、見つけた。

マイムには文字長制限がある

$to = "$_REQUEST['$email']";
$from = "info@aaa.bbb";
$subject = "テスト送信";
$message = "テストメールです" .
$headers ='From: '. $from . "\r\n"
.'MIME-Version: 1.0' . "\r\n"
.'Content-Type: text/plain; charset=iso-2022-jp' . "\r\n"
.'Content-Transfer-Encoding:7bit' . "\r\n"
.'X-Mailer: PHP/' . phpversion();

$subject =conv_auto_mime($subject);
$message=mb_convert_encoding($message, ‘JIS’,’EUC-JP’);

if(mail($to, $subject, $message, $headers)==TRUE)
print(“メールを送信しました”);
else print(“メール送信に失敗しました”);

function conv_auto_mime($str){
$pos = 0;
$str=mb_convert_encoding($str,”JIS”,”EUC-JP”);
while ($pos < mb_strlen($str, “JIS”)){
$output = mb_strimwidth($str,$pos,36,””,”JIS”);
$pos += mb_strlen($output, “JIS”);
$TempStr .=(($TempStr)?” “:””).”=?ISO-2022-JP?B?”.base64_encode($output).”?=”;
}
return $TempStr;
}
?>
要するにこういうこと?みたいスがね、なぜか途中で止まるみたいな。。。$headersの次の行あたりが悪いっちゅことだったんで、ヘッダの書き方がおかしいのか♂

で、また見つけた。

PHPからメールを送信する

ここの最後のとこのをべっと貼ってみる。

$headers = "MIME-Version: 1.0\r\n"
. "Content-Transfer-Encoding: 7bit\r\n"
. "Content-Type: text/plain; charset=ISO-2022-JP\r\n"
. "Message-Id: <" . md5(uniqid(microtime())) . "@example1.jp>\r\n"
. "From: Hamaco \r\n";

うん。なんだかうまくいったようですな。何がちがうのかはさっぱり。。。あとは別機種とかで動作確認できれば。へ~~~~っ。うまくいくといいな~~~。。

タグ: ,

WordPressは画像をアップロすると勝手にサムネイルを生成してくれるっちゅステキな機能があるにも関わらずっっ、生成されたサムネイルを簡単に使えるやり方がどこにも書いてないっっ(-“-;)ハツカミが探せないだけだろうか♂

で、しょうがないんで、いったん生成したサムネイルをカスタムフィールドに書き直してバラで表示してみようかなっと。簡単でしたな。
表示したい部分で

<?php echo get_post_meta($post->ID,'thumbnail',TRUE); ?>

ってするだけでした。「thumbnail」の部分はカスタムフィールドのキーね。

た・だ・しっっ!、出力される形式はphpなのでechoして書き出す必要ありみたいな?♂あとは条件分岐でキーがなかったときの処理とかなんとかあったらいいのかな。でも、キーなくってもないなら表示されないだけっぽかったッス◎動作サンプル→http://www.locationkazuno.net/recommended/

HTMLに埋め込む場合はiframe使うっちゅ方法があるようですが、XHTML1.1ではiframe要素は廃止されてるんでブッブーなわけで♂W3Cのバリデータ通すと真っ赤っかになっちゃうっと。真っ赤はちと言いすぎかなw。で、代替方法はすでに見つけ出されてるようですな。参考にしたのはここ→WWW WATCH。すっごく詳しく解説されてます。object要素を使いましょってことみたいッスね。で、このobject要素っちゅのはインライン要素として定義されてるんで、body直下に書けないと。必ずブロック要素の中で使いましょってことでしたな。あとブロック要素を中に入れたり(例の場合は<p>~</p>でしたなっっ)、img要素の代わりにもできると。こ、こりゃスゴイ。。。かなり便利と思いきや、動作はブラウザ依存っちゅなんとももどかしい評価が。。。なんだかな~。。。

で、やっぱphpで書いたほうがはやいのかなっと。やってみたソース以下。

【表示部分スクリプト(display.php )】

<?php require_once "●●●/ad.php"; ?>←ここがobject要素のかわり

【生成部分スクリプト(ad.php )】

<a href="$url" target="_top" title="$sitetitle"><img src="$imgpass" alt="$disc"></a>

こんなかんじですかね。変数部分を書き出す形のスクリプトで◎動作サンプル→ハツカミ.jp(フッタ部分のバナ)。ふむっ。やっぱ、php使える環境ならこのほうが簡単かな。。。一応、成功しましたしねっ。

タグ:

なにかと便利なテンプレートエンジンですがね。デザインとロジックを分離できるっちゅんで、やってみようかなと。以前PEARにはチャレンジしましたがね。インクルードパスの設定がうまくいかないかなんか、ことごとく呼び出せず挫折しまして。成功したのはcalendarくらいだったかな。smartyはそんなことにならなければいいなっと。はい。

でわっっ、インストールから。参考にしたのはここ→ねこすけのSmarty

  • smarty template engineに行ってsmarty本体を落としてくる。ハツカミが落としたときのカレントバージョンは2.6.18(March 7th, 2007)でしたな。
  • 解凍したら拡張子ないファイルがいっぱい詰まっててびっくりしますが、実際に使うのはlibsフォルダの中だけなんですと。
  • サーバの適当なとこにアゲる。ハツカミはドメインルート直下にlibs/としてファイルを置いてみる。
  • smartyが使うフォルダを作る。templatestemplates_ccacheの3つを公開フォルダの配下に作ってパーミッションを700に変更する。はい。

一応これでインストールは完了のようですな。あとはガリガリ書いていくだけっちゅことでした。テンプレートファイル(~.tpl)はtemplatesフォルダに置けって書いてありましたな。やってみましょ。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Smartyテスト</title>
</head>
<body>
<p>smartyちゃんと動くかテストします。</p>
<p>取得した値:{$value} </p>
</body>
</html>

これでtest.tplってしてtemplatesフォルダに保存します。で、ロジック書く。

<?php
require_once("libs/Smarty.class.php");
$smarty =new Smarty();
$smarty->template_dir = "templates";
$smarty->compile_dir = "templates_c";
$smarty->cache_dir = "cache";
$smarty->assign("value","ハツカミ123");
$smarty->display("test.tpl");
?>

として、公開フォルダ(今回はドメインのドキュメントルート)に置きます。ブラウザでアクセスして、

smartyちゃんと動くかテストします。

取得した値:ハツカミ123

って表示されれば成功◎うまくいきましたな^-^。。。ファイルを置く位置(階層)を変えたときはrequire_onceとtemplatesとtemplates_cのパスを書き換えます。これね、なんぼやってもできなくって泣きそうになりました♂なんかできたみたいなんでメモしとかないと忘れるっっ。

phpの位置→ドキュメントルート/○○○/●●●/xxx.phpのとき、

require_once→../../libs/Smarty.class.php

template_dir→../../templates

compile_dir→../../templates_c

cache_dir→../../cache

なんだかな~。。。相対パスの書き方っちゅか、考え方がよくわかってないのかな~。。。ファイルを呼び出したりインクルードするときは、カレントディレクトリからのパスになるようにしないとダメとかどっかに書いてましたな。何段階にも呼び出したりすると、わけわからんくなるっちゅことで、そのへんはまたいずれ♂


ろぐカレンダ

2017年8月
« 7月    
 12345
6789101112
13141516171819
20212223242526
2728293031  

進行中のミッション

【鹿角の文化財級建築物を調査せよ!】

Flickr Photos:canon

Blog Stats

  • 123,493 hits