行政書士さんがWordPressでサイトを作成です。

one-by-one

綿谷行政書士事務所の綿谷俊彦さんがWordPressを使用してオリジナルホームページを立ち上げました。

“行政書士さんがWordPressでサイトを作成です。” の続きを読む

謹賀新年!SONYのサイトFirst-Flightに学ぶ

firstflight

明けましておめでとうございます!

今日はSONYの素敵なサイト「First-Flight」のお話です。
“謹賀新年!SONYのサイトFirst-Flightに学ぶ” の続きを読む

データベース接続エラー

突然複数のWordPressサイトが表示できなくなり、うわーどうしたんだとパニック状態になりました!!

よーくよく思い出してみると、データベースパスワードを不用意に変更した結果(必要桁数が増えた為)、このデータベース使用のブログ全てがエラーに!

さらにどういう訳か「PhpMyAdmin」もエラーで起動できない状態に-_-)”

動転した心理状態でwp-config.phpのパスワードを変更。

これが失敗の元凶でした。

6つのブログのうち4つ迄は正常に変更完了。そして、

翌日なぜか「PhpMyAdmin」も自然復旧。何故???

ところが2つのブログが相変わらず表示されない状態が続いていました。

やっと休日になり、落ち着いた気持ちでwp-config.phpを見直すと、何と半角文字列の中に全角の「’」が、、、、、、

なんと言うミス、、、、、でした。

無事修理完了です(^_^)

 

ユーザー中心の設計:ホームページ

あけましておめでとうございます。
正月の休みに(ユーザー中心ウェブサイト戦略)を読み終えました。

普段他社のホームページを作成しているにもかかわらず、忙しさにかまけて自社のホームページを見直すのを怠っていました汗!
検索エンジンで上位表示され、さてhpの訪問数が増えました。でも成果が見えません。
そんな時考えなければならないのがユーザ中心ウェブサイト戦略でした。
よくあることですが、ホームページを初めて作る際、たくさんの流行の機能をもりこみすぎて自己満足に陥ってしまう場合がありますね。
でも誰が見るねん、訪問者にどうして欲しいねん、という視点が全く欠けている場合がよくありますね。

 

  • 訪問者はどういう人か?
  • 訪問者は何を期待しているか?
  • 訪問者に何をしてもらいたいか?
  • そのためにはどんな機能が、どんな文字が必要か?

これらの質問の回答には、仮想シナリオが必要となります。
自分がユーザーになったつもりで検証したり、ユーザビリティーテストを行ったりすることです。
キーワードは、改善、改善、改善です。
では本年もよろしくお願いいたします。

PC遠隔操作事件の横浜市ホームページに弱点

今朝の毎日新聞の記事に、PC遠隔操作事件の横浜市ホームページに弱点があることが報じられていました。
というのはCSRF(クロスサイトリクエストフォージェリー)と言われるものです。
これは掲示板などに投稿する際に、他のサイトから投稿できないようにするための脆弱性対策なのですが、この初歩的な対策がホームページの掲示板に施されていなかった模様です。
基本的にはセッション関数とランダム関数を使って対策を施します。
初歩的な対策を施していなかった公的なホームページにもびっくりしますね。
また2chの掲示板を見て誘導されたURLをクリックすると自動的に投稿欄に書き込みが行われてしまうというのは、Javaスクリプトなどのonclickイベント等を使えば簡単にできそうです。
警察の捜査員がのwebプログラミングの初歩的な点に気がつかなかったとすれば問題ですよね。
今の世の中webプログラミングの知識も少しは知っておかないとやっていけないということでしょうか?
実は8月29日に僕は他のブログでCSRFじゃないかと言う記事を載せていました。(^-^)/
http://forrestgump.blog49.fc2.com/blog-entry-2.html

xamppのMYSQLに接続できない(ー_ー)!!

xamppバージョン1.77から1.8へバージョンアップしようと試みるも、この6日間悪戦苦闘しどうしでした。

ネットでいろいろ探るも、mysqlに接続できない状態が続き、インストール・アンインストールの繰り返しで、

アンインストールも、コントロールパネルからでは駄目で、xamppのアンインストーラーで行い、結局1.77へ戻して、

動かす羽目になりました 泣泣!

XPでは上手くいっているのに、VISTAでは駄目なのはなぜ???

お問合せ管理システムを作ろう(ドットインストール)

HTML / CSS

PHP

MySQL

jQuery Javascript

—————————–

ローカル開発環境 PHP 5.2

ブラウザ(Chrome)

テキストエディタ

ーーーーーーーーーーーーーー

ユーザー管理(簡略化しています)

セキュリティ(簡略化しています)

//データベースを設計 作成する

create database contacts;
grant all privileges on contacts.* to dbuser@localhost identified by ‘*******’ ;

use contacts;

create table entries (
id int not null auto_increment primary key,
name varchar(255),
email varchar(255),
memo text
) default charset=utf8;

//お問合せフォームを作る index.php

<?php

error_reporting(E_ALL & ~E_NOTICE);

if($_SERVER[‘REQUEST_METHOD’]==”POST”){

$name = $_POST[‘name’];
$email = $_POST[‘email’];
$memo = $_POST[‘memo’];

$error = array();

//エラー処理

if (!filter_var($email,FILTER_VALIDATE_EMAIL)) {
$error[‘email’] = ‘メールアドレスが正しくありません’;
}

if ($email == ”) {
$error[‘email’] = ‘メールアドレスが入力されていません’;
}
if ($memo == ”) {
$error[‘memo’] = ‘内容が入っていません’;
}

//エラーがなかった場合

if (empty($error)) {
//DBにデータを入れる
mysql_connect(“localhost”, “dbuser@localhost”, “********”) or die(“can’t connect to DB: “.mysql_error());
mysql_select_db(“contacts”) or die(“can’t select to DB: “.mysql_error());

$q = sprintf(“insert into entries (name, email, memo, created, modified) values (‘%s’, ‘%s’, ‘%s’, now(), now())”,
mysql_real_escape_string($name), mysql_real_escape_string($email),mysql_real_escape_string($memo));
mysql_query($q) or die(“can’t run query: “.mysql_error());

//ありがとうページに飛ぶ
header(“Location: http://127.0.0.1/contacts/thanks.html”);
}

}
?>
<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”UTF-8″>
<title>お問合せフォーム</title>
</head>
<body>
<h1>お問合せフォーム</h1>
<p>こちらからどうぞ!</p>
<form method=”post” action=””>
<p>お名前</p>
<input type=”text” name=”name” value=”<?php echo htmlspecialchars($name); ?>”>
<p>メールアドレス</p>
<input type=”text” name=”email” value=”<?php echo htmlspecialchars($email); ?>”>
<?php if ($error[‘email’]) echo $error[‘email’]; ?>
<p>内容</p>
<textarea name=”memo” cols=”40″ rows=”5″><?php echo htmlspecialchars($memo); ?></textarea>
<?php if ($error[‘memo’]) echo $error[‘memo’]; ?>

<p><input type=”submit” value=”送信”></p>
</form>
</body>
</html>

//サンクスページの作成 thanks.html

<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”UTF-8″>
<title>お問合せありがとうございました</title>
</head>
<body>
<h1>お問合ありがとうございました</h1>
<p>感謝感激!</p>
</body>
</html>

//管理画面の作成 /admin/index.php

<?php

error_reporting(E_ALL & ~E_NOTICE);

//DB接続
mysql_connect(“localhost”, “dbuser@localhost”, “********”) or die(“can’t connect to DB: “.mysql_error());
mysql_select_db(“contacts”) or die(“can’t select to DB: “.mysql_error());

//データを取得

$rs = mysql_query(“select * from entries”);

$entries = array();

while ($row = mysql_fetch_assoc($rs)){
$entries[] = $row;
}
?>
<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”UTF-8″>
<title>データ一覧</title>
<script src=”http://code.jquery.com/jquery-1.6.4.min.js”></script>
</head>
<style>
.deleteEntry {
cursor: pointer;
color: blue;
}
</style>
<body>
<h1>データ一覧</h1>
<ul>
<?php foreach ($entries as $entry) : ?>
<li id=”entry_<?php echo $entry[‘id’]; ?>”><a href=”edit.php?id=<?php echo $entry[‘id’]; ?>”><?php echo htmlspecialchars($entry[‘name’]); ?></a>
<span class=”deleteEntry” data-id=”<?php echo $entry[‘id’]; ?>”>X</span></li>
<?php endforeach; ?>
</ul>
</body>
<script>
$(function() {
$(‘.deleteEntry’).click(function() {
var data = $(this).data();
//data.id
if (confirm(“本当に削除しますか?”)){
//ajax
$.post(“delete.php”, {
//オプション
id: data.id
}, function() {
//successした後の処理
$(‘#entry_’+data.id).fadeOut(800);
});
}
});
});

</script>
</html>

//データ編集画面 admin/edit.php

<?php

error_reporting(E_ALL & ~E_NOTICE);

$id = $_GET[‘id’];

mysql_connect(“localhost”, “dbuser@localhost”, “********”) or die(“can’t connect to DB: “.mysql_error());
mysql_select_db(“contacts”) or die(“can’t select to DB: “.mysql_error());
if($_SERVER[‘REQUEST_METHOD’]==”POST”){

$name = $_POST[‘name’];
$email = $_POST[‘email’];
$memo = $_POST[‘memo’];

$error = array();

//エラー処理

if (!filter_var($email,FILTER_VALIDATE_EMAIL)) {
$error[‘email’] = ‘メールアドレスが正しくありません’;
}

if ($email == ”) {
$error[‘email’] = ‘メールアドレスが入力されていません’;
}
if ($memo == ”) {
$error[‘memo’] = ‘内容が入っていません’;
}

//エラーがなかった場合

if (empty($error)) {
//update
$q = sprintf(“update entries set name=’%s’, email=’%s’, memo=’%s’, modified=now() where id=%d”,
mysql_real_escape_string($name), mysql_real_escape_string($email), mysql_real_escape_string($name), mysql_real_escape_string($id));
$rs = mysql_query($q);

//データ一覧ページに飛ぶ
header(“Location: http://127.0.0.1/contacts/admin/”);
}
} else {
//そのまま表示された時

$q = “select * from entries where id = “.mysql_real_escape_string($id);
$rs = mysql_query($q);
$row = mysql_fetch_assoc($rs);

$name = $row[‘name’];
$email = $row[‘email’];
$memo = $row[‘memo’];
}
?>
<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”UTF-8″>
<title>データの編集</title>
</head>
<body>
<h1>データの編集</h1>
<p>こちらからどうぞ!</p>
<form method=”post” action=””>
<p>お名前</p>
<input type=”text” name=”name” value=”<?php echo htmlspecialchars($name); ?>”>
<p>メールアドレス</p>
<input type=”text” name=”email” value=”<?php echo htmlspecialchars($email); ?>”>
<?php if ($error[‘email’]) echo $error[‘email’]; ?>
<p>内容</p>
<textarea name=”memo” cols=”40″ rows=”5″><?php echo htmlspecialchars($memo); ?></textarea>
<?php if ($error[‘memo’]) echo $error[‘memo’]; ?>

<p><input type=”submit” value=”更新”></p>
</form>
</body>
</html>

//削除画面 admin/delete.php

<?php

$id = $_POST[‘id’];
//DB接続
mysql_connect(“localhost”, “dbuser@localhost”, “****”) or die(“can’t connect to DB: “.mysql_error());
mysql_select_db(“contacts”) or die(“can’t select to DB: “.mysql_error());

//データを削除
$rs = mysql_query(“delete from entries where id = “.mysql_real_escape_string($id));

?dot_install

PHPの基礎(応用編)

<?php
//データベース
//MySQL

//DBサーバーに接続
mysql_connect(“localhost”,”db_user”,”****”) or die(“can not connect to DB”.mysql_error());

//DBを選択する
mysql_select_db(“blog_app”) or die(“can not select DB”.mysql_error());

//データ挿入のためのSQLを発行
$id = 10;
$name = “bob”;
$email = “bob@gmail.com”;
$password = “1234”;

$sql = sprintf(“insert into users (id, name, email, password) values (%d, ‘%s’, ‘%s’, ‘%s’)” ,$id, $name, $email, $password);
$rs = mysql_query($sql);

if(!$rs){
echo “sql could not run!”;
exit;
}
echo “success!”;

//データをエスケープしよう

function r($str) {

return mysql_real_escape_string($str);

}

$sql = sprintf(“insert into users (id,name,email,password) values (%d, “%s”,”%s”,”%s”)” $id, r($name), r($email), r($password));

//データベースのデータを表示しよう

<?php
//データベース
//MySQL

//DBサーバーに接続
mysql_connect(“localhost”,”bob”,”xxxx”) or die(“can not connect to DB:”.mysql_error());

//DBを選択する
mysql_select_db(“blog_app”) or die(“can not select DB:”.mysql_error());

$sql = “select * from users”;
$rs = mysql_query($sql);
if(!$rs){
echo “sql could not run!”;
exit;
}

if (mysql_num_rows($rs)){
while ($row = mysql_fetch_assoc($rs)){
var_dump($row);
}
}else{
echo “nothing returned”;
exit;
}

//データベースのデータを更新しよう

<?php
//データベース
//MySQL

//DBサーバーに接続
mysql_connect(“localhost”,”bob”,”xxxx”) or die(“can not connect to DB:”.mysql_error());

//DBを選択する
mysql_select_db(“blog_app”) or die(“can not select DB:”.mysql_error());

$sql = “update users set password = ‘9876’ where id = 10”;
$rs = mysql_query($sql);
if(!$rs){
echo “sql could not run!”;
exit;
}

printf (“%d件更新されました!”, mysql_affected_rows());

<?php
//Cookie(ブラウザにデータを保存)

setcookie(‘username’, ‘bob’,time()60*60*24*14);

setcookie(‘username’, ”,time()-60); //cookieを削除

echo $_COOKIE[‘username’];   //cookieの表示

<?php
//セッション(サーバー側にデータを保存する)
session_start();

$_SESSION[‘userName’] = “bob”;

unset($_SESSION[‘userName’]); //セッションの削除

echo $_SESSION[‘userName’];

<?php
//オブジェクト指向
/*

クラス:設計図
-メンバー変数
-メソッド(関数)
-コンストラクタ

インスタンス:クラスを実体化したもの

*/

class User{
public $name;
public $email;    //private

public function __construct($name, $email){
$this->name = $name;
$this->email = $email;
}

public function sayHi(){
echo “hi ! my name is “.$this->name;
}
}
$tom = new User(“tom”, “dummy@dummy.com”);
$bob = new User(“bob”, “dummy@dummybob.com”);

echo $tom->name;
echo $tom->sayHi();
echo $bob->sayHi()

<?php
//クラスの継承
class User{
public $name;
protected $email;

public function __construct($name, $email){
$this->name = $name;
$this->email = $email;
}

public function sayHi(){
echo “hi ! my name is “.$this->name;
}
}

class SuperUser extends User{

public function SuperSayHi(){
echo “HIIIIIII ! my name is “.$this->name;
echo “HIIIIIII ! my email is”.$this->email;
}
}

$tom = new User(“tom”, “dummy@dummy.com”);
$bob = new SuperUser(“bob”, “dummy@dummybob.com”);

$bob->superSayHi();

//ファイルの分割

//user.class.php

<?php
class User{
public $name;
protected $email;

public function __construct($name, $email){
$this->name = $name;
$this->email = $email;
}

public function sayHi(){
echo “hi ! my name is “.$this->name;
}
}

class SuperUser extends User{

public function SuperSayHi(){
echo “HIIIIIII ! my name is “.$this->name;
echo “HIIIIIII ! my email is”.$this->email;
}
}

 

<?php
/*
ファイルの分割

require(‘ ‘); //エラーで強制停止
require_once(‘ ‘);

include(); //エラーで警告。その後続行
include_once();

*/

require_once(‘user.class.php’);

$tom = new User(“tom”, “dummy@dummy.com”);
$bob = new SuperUser(“bob”, “dummy@dummybob.com”);

$bob->superSayHi();

mysql 覚書 (ドットインストール mysqlの基礎)

cd c:\xampp\mysql\bin
mysql -u root -p
enter password:

set password for root@localhost=password(‘******’);

*コマンドの最後には「;」

exit

c:\xampp\mysql\bin>mysql -u root -p

create database blog_app;

show databases;

drop database blog_app;

use mysql;
use test;

exit

c:\xampp\mysql\bin>mysql -u root-p

create database blog_app;

grant all on blog_app.* to user@localhost identified by ‘******’;

create table users(

id int not null auto_increment primary key, ?// 入力を必須 自動連番 主キー

name varchar(255),

email varchar(255) unique, // 変動長 ユニークキー

password char(32), // 固定長

score double, // 浮動小数点型

sex enum(‘male’,’female’) default ‘male’, // 列挙タイプ文字列型

memo text, // 長文テキスト型

created datetime, // 日付時刻型

key score (score)  // キー

);

最後の「,」区切りは無し

// tableへのdataの挿入

insert into users (email,password,score,memo,created) values (‘bob@gmail.com’,’xxx’,5.5,’memoememo’,’2012-07-03 11:00:00′);

desc users; // テーブル構造の表示

select * from users; ?// テーブル内容の表示

create table users(

id int not null primary key auto_increment,
name varchar(255),
email varchar(255) unique,
team enum(‘blue’,’red’,’yellow’),
score double,
created datetime,
key score(score)
);

drop table users;

create table users(
id int not null primary key auto_increment,
name varchar(255),
email varchar(255),
team enum(‘blue’,’red’,’yellow’),
score double,
created datetime
);

// テーブルへデータの挿入

insert into users(name,email,team,score,created) values
(‘bob’,’bob@gmail.com’,’blue’,5.5,’2012-07-03 11:00:00′),
(‘ben’,’ben@gmail.com’,’yellow’,8.2,’2012-06-22 12:00:00′),
(‘an’,’an@gmail.com’,’red’,2.3,’2012-06-15 13:00:00′),
(‘jon’,’jon@gmail.jp’,’blue’,4.5,’2012-06-01 10:00:00′),
(‘beth’,”,’yellow’,7.4,’2012-05-05 08:00:00′),
(‘tim’,’tim@gmail.jp’,’blue’,4.2,’2012-06-01 23:00:00′);

// データの抽出

select * from users;

select * from users \G ?// 縦並び

select name,email from users;

// 条件付き抽出

select * from users where score >= 5.0;

select * from users where score <> 5.0;

select * from users where team != ‘red’;

select * from users where email like ‘%@gmail.com;

select * from users where email like ‘%@gmail.__;

select * from users where score between 5.0 and 8.0;

select * from users where team in (‘red’,’yellow’); ?// redかyellowどちらかが含まれる

select * from users where score >=4.0 and team = ‘blue’;   // and条件

select * from users where score >=4.0 or team = ‘blue’;     // or条件

並び替え

select * from users order by score; ?// 昇順

select * from users order by score desc;  // 降順

select * from users order by score limit 3; ? // 件数制限

オフセット値

select * from users limit 2,2;  2(0スタート)から始まる2件

select * from users order by score limit 3;

データの集計

select count(*) from users;

ユニークなデータの抽出

select distinct team from users;

select max(score) from users;

?select min(score) from users;

select sum(score) from users;

select avg(score) from users;

select team,avg(score) from users group by team;

select rand();

select * from users order by rand() limit 1; // ランダムに抽選で一人だけ選ぶ

文字列関数

select email,length(email) from users;

select concat(name,'(‘,team,’)’) as label from users;

select name,substring(team,1,1) from users;

select now();

select name,month(created) from users;

select datediff(now(),created) from users; ?// 日付の差分

レコードの更新削除

update users set email = ‘beth@gmail.com’ where id =5 ;

delete from users where score < 3 ;

テーブル構造の変更

alter table users add fullname varchar(255) after name ;

alter table users change fullname fullname varchar(100) ;

alter table users drop fullname ;

alter table users add index email (email) ;  // 検索高速化キーの追加

alter table users drop index email ;

alter table users rename blog_users ;

複数のテーブル

drop table users;

create table users(
id int not null primary key auto_increment,
name varchar(255),
email varchar(255),
team enum(‘blue’,’yellow’,’red’),
score double,
created datetime
);

insert into users (name,email,team,score,created) values
(‘bob’,’bob@gmail.com’,’blue’,5.33,’2012-07-07 11:00:00′),
(‘ben’,’ben@gmail.com’,’yellow’,4.35,’2012-07-05 12:00:00′),
(‘tim’,’tim@gmail.com’,’red’,3.67,’2012-07-03 14:00:00′);

create table posts(
id int not null primary key auto_increment,
user_id int not null,
title varchar(255),
body text,
created datetime
);

insert into posts (user_id,title,body,created) values
(1,’title-1 by bob’, ‘body-1′,’2012-7-7 14:00:00’),
(1,’title-2 by bob’, ‘body-2′,’2012-7-8 11:00:00’),
(2,’title-3 by ben’, ‘body-3′,’2012-7-3 16:00:00’),
(3,’title-4 by tim’, ‘body-4′,’2012-7-4 10:00:00’),
(3,’title-5 by tim’, ‘body-5′,’2012-7-5 13:00:00’);

select users.name,posts.title from users,posts where users.id = posts.user_id;

select users.name,posts.title,posts.created from users,posts where users.id = posts.user_id order by posts.created desc;

外部ファイルのコマンドを実行する

drop table if exists users;
create table users(
name varchar(255),
email varchar(255)
);
insert into users (name,email) values (‘bob’,’bob@gmail.com’);

mysql -u dbusers -p blog_app < ../../htdocs/command.sql

バックアップ

mysqldump -u dbuser -p blog_app >../../htdocs/blog_app.dump.sql

cd c:\xamp\htdocs

dir // ファイルの確認

復元

mysql -u dbuser -p blog_app < ../../htdocs/blog_app.dump.sql

databaseをdropした場合はcreate database blog_appを先に実行

感謝感謝! ドットインストール