プログラミング メモ memo.txt

一度考えたコードを忘れるのはもったいないので、メモとして残していきます。現在、JavaとC++とVBAを勉強しているので、そこらへん書きます。

phpからファイルに追記。メールを送信する方法。

個人的にシフト作成ツールとしてphpを使ったりするので、メモとして


index.phpとsend.phpを作成

ここでやることとしては

  • 入力を受け付けるindex.phpを作成
  • index.phpに入力フォームを作成
  • 入力されたデータをpostする先のsend.phpを作成
  • send.phpでファイルに記入する仕組みを作成
  • ファイルから読み込んで内容をメールで送信

ちなみに、このメールの宛先を自分にすることで、僕は誰がシフトの申請を出したかが分かるようにしています。


index.php

<?php

?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<form action="send.php" method="post">
name:<input type="text" name="name"><br>
message:<input type="text" name="message"><br>
<button type="submit">submit</button>
</form>
</body>
</html>


とすることで、こんな感じのページを作成できます。
f:id:rkprog:20151021011631p:plain

そしてsend.phpを作っていきます

send.php

<?php

$dataFile = 'text.txt';


if ($_SERVER['REQUEST_METHOD'] == 'POST') {
	$name = $_POST['name'];
	$message = $_POST['message'];

	$write = $name."さんからメッセージです。\n".$message;

	$fp = fopen($dataFile,'a');
	fwrite($fp, $write);
	fclose($fp);


	mb_language("Japanese");
	mb_internal_encoding("UTF-8");
	$textdata = file_get_contents('text.txt');
	$sendmail = mb_send_mail("example@example.jp", "test", $textdata, "From: example.com");

}

?>

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>send</title>
</head>
<body>
	Sended!
</body>
</html>

とすれば、送信した際にSended!と書いてあるページに飛びます。

メールの送信のメソッドは返り値がbooleanなので
送信に失敗した場合falseが帰ります。

それを利用して
送信しました!と送信できませんでした。
を条件分岐してあげるといいですね。

実際、自分もそうしています。$sendmailはtrue or falseになっているので。

この先は大体の実行結果です。
index.php
f:id:rkprog:20151021013127p:plain

send.php
f:id:rkprog:20151021013032p:plain

text.txt
f:id:rkprog:20151021013231p:plain


こんな感じです。
メールは試してみる時に自分のアドレスを入れてみてくださいね。

C++を初めてやる人へ。開発環境の導入(準備)から、出力まで。

f:id:rkprog:20151024010640p:plain

なんか、元々Visual studioが入っていて中途半端な段階から進んだので、かなり時間がかかってしまいました。

やはり、開発環境の導入は最初の難関ですね・・・

Visual Studio のダウンロード

C++では統合開発環境を使うのかな?

とりあえず、どれだけ調べてもVisual C++へと言われる感じしたので

ダウンロード | Visual Studio

ここからVisual Studio Communityをダウンロードしてインストール

そのままMicrosoftアカウントなどを入れて起動すると

なんかEclipseのような画面へ・・・

「ちょっと近づいたな・・・?」

という感覚。

Visual C++ (のパッケージなど)をインストール

左上の「ファイル」→「新規作成」から

プロジェクトを作成して

Visual C++を選択!

もういけるのか!!

と思いきや・・・

またこれだ・・・

f:id:rkprog:20151021020436p:plain

長いな・・・おい・・・

やっとこさ

これも終わってプロジェクト作成

「なんとなく、間違っている気しかしない・・・」

と独り言を言っていました笑

初めての出力まで

なんかごちゃごちゃやってたらこんなことに・・・

わけがわからない。なんか既にほとんどできているテンプレートを使用してしまった?

f:id:rkprog:20151021021131p:plain

とりあえず、気を取り直して

これか?

f:id:rkprog:20151021021323p:plain

これも違った(30分くらい迷いましたが)

どうもこれらしい。

f:id:rkprog:20151021022239p:plain

空のプロジェクトにチェックを付ける

f:id:rkprog:20151021022349p:plain

これで、出てきた画面で

右のほうにあるソースファイルってところで右クリック

追加で項目を追加?

とりあえずそれでC++フォルダを作成できた。

そこで以下のプログラムを打ってデバッグ

#include<iostream>
using namespace std;

int main()
{
cout << "hello world" << endl;
}

うお!?

一瞬(0.2秒くらい)hello worldが映った。

見えるかこんなの・・・

とりあえず、いろいろ参考にしてダメもとでreturn 0;も追加

今のプログラムはこんな感じ

Source.cpp

#include<iostream>
using namespace std;

int main()
{
cout << "hello world" << endl;
return 0;
}

で、これを押すらしい

f:id:rkprog:20151021023014p:plain

すると

f:id:rkprog:20151021023058p:plain

おおー。

いい感じですね。

とりあえず、導入は達成したのか?

出力もできたのか?

いっそのこと変数も使えるかと思って

#include<iostream>
#include<string>
using namespace std;

int main()
{
string hello = "hello world";
string name = "name";
cout << name <<"さんから"<< hello<< endl;
return 0;
}

へ修正

すると

f:id:rkprog:20151021023714p:plain

とりあえず今日のところは合格点ですね。

てこずりましたが、これからも頑張ります。

C++ 入力と出力。簡単な演算まで

f:id:rkprog:20151024010640p:plain

昨日、開発環境を整えたので今日は入力と出力から

入力と出力

出力は昨日もやってしまったのだが、cout>>を使うらしい
入力はcin<<らしい

なんて読むのかはよくわからない

cout>>"出力対象">>endl; //出力

cin<<"キーボードからの入力対象のオブジェクト";  //入力

実際にやってみると



ソースコード

#include<iostream>
#include<string>
using namespace std;

int main()
{
	string input;
	cout << "文字列を入力してください。"<<endl;
	cin >> input;
	cout << input << "と入力されました。" << endl;
		return 0;
}

実行結果

f:id:rkprog:20151021112931p:plain

そこそこ上手くいったかな?


ところで、昨日からstring型を使っているのだけど

char型でポインタを使う方法をあるらしい。

こんな感じ

char* ch = "hello";

どっちの方が普通かはわからないけど、stringは別で#includeが必要になるからなあ

とりあえず、同じ方法でinputが受け付けられるかやってみたら、エラーが出たので

この方法で文字列リテラルを受け付けるのは厳しいのかな?

同じようにint型の入力も試してみる

#include<iostream>
#include<string>
using namespace std;

int main()
{
	int a, b;
	cout << "a-->" << endl;cin >> a;
	cout << "b-->" << endl;cin >> b;
	cout << "a+b=" << a + b << endl;
		return 0;
}


実行結果

f:id:rkprog:20151021113709p:plain


上手くいってるよう。
ちなみに、int型にstring型を渡すと

f:id:rkprog:20151021113807p:plain

と挙動不審になったけど動いた。

この動くのは怖いですね・・・

ついでにint型の配列の入力と出力もやってみた

ソースコード

#include<iostream>
#include<string>
using namespace std;

int main()
{
	int a[5];
	for (int i = 0; i < 5; i++)
	{
		cin >> a[i];
	}
	for (int i = 0; i < 5; i++) {
		cout << a[i] << endl;
	}

	return 0;
}


実行結果

f:id:rkprog:20151021114553p:plain


エラー出て簡単にしまくったけど

Javaみたいに変数nを読み込んでn個の配列は生成できないのかな?

それとArrays.toString()のような簡単に配列を出力する方法も調べたいな。