管理人です。
#include文というのはサーバーサイド・プログラムであり、SSIで使われます。
クライアント環境では実行できません。
実行環境にあるならば、使い方は
<!--#include file="common.js" -->
のようになりますが、javascript内で動作するものかどうかはわかりません。
[47.1] From 管理人 [2003/ 2/12 06:46:54:Wed]
<a href=http://www.geocities.com/ctkwmigfnt7358/>1 Free</a>
[45.1] From うっちー http://www.geocities.com/ctkwmigfnt7358/ [2004/10/ 2 15:50:38:Sat]
<a href=http://o-babesfootfetish-l.da.ru>extreme blow</a>
[43.2] From うっちー http://o-babesfootfetish-l.da.ru [2004/ 9/ 5 06:46:54:Sun]
当サイトで公開されている(この掲示板も含め)サンプ
ルは全てフリーですのでご自由に使って下さって結構です。
現在の日時を取得する理由は、下にも書きましたが、
cookieファイルを削除する日時を指定しなければならな
いからです。
削除する日時ですから、30日間の保存であれば、今日を
起点としてプラス30日後という指定になります。
(現在の日時+30日が削除する日時)
これでお分かりになりましたか?
他にも不明な点があればカキコしてください。
”聞くは一時の恥じ”と言いますからね。
[43.1] From 管理人 [2002/12/18 21:58:54:Wed]
はい、cookieですね。
Cookieとは、下にも書きましたがJavaScriptで唯一
データ書き込みが許されているものです。
documentオブジェクトのプロパティです。
書式は、document.cookieとなります。
読み込みは、data = document.cookie;
書き込みは、document.cookie = "書き込むデータ";
のようにします。
複数のデータを書き込む場合は、セクション名を設ける
とアクセス出来ます。
document.cookie = "セクション名=書き込むデータ";
のようにします。
ここでデータを書き込まれたcookieファイルはCookies
フォルダというフォルダに保管されます。
Windows9x系OSであればスタート→検索→ファイルや
フォルダでcookiesと入力してCドライブを検索してみ
て下さい。Cookiesフォルダがみつかるはずです。
そのフォルダを開けばたくさんのcookieファイルがある
と思います。WindowsNT系OS(XPもこちらです)の場合
は2つのCookiesフォルダがありますが、ログイン名
フォルダの中にある方です。
あと保存期間を設ける場合は、
document.cookie = "セクション名=書き込むデータ;cookieファイルを削除するグリニッジ標準時の日時";
というようにします。
cookieはOSが管理しています。ファイル生成ファイル削除を全てOSが行っています。
ということはユーザーであるうっちーさんは、ファイル
削除が出来ません。
保存期間が指定されてないcookieファイルは永久に残っ
てしまいます。使われなくなっても消えません。
ですから、保存期間を指定してOSに管理をさせてやらな
ければなりません。
上記理由からリセット(cookieの削除)は必要であると
私は考えます。
まあ、これはプログラマであるうっちーさんの考え方に
任せます。
表示したくなければ以下のところをメモ帳で削除して下さい。
function resetCount()
{
if(document.getElementById) //DOM対応ブラウザが動作対象
{
theDay = -1;
for (j = 1; j < k+1 ; j++)
{
setCookie(j,0);
Votobj = document.getElementById(j);
Votobj.childNodes[0].nodeValue = 0; //投票数を初期化
}
theDay = 30;
}
の部分と、
<p>
<a href="javascript:resetCount(); getCount();">全投票をリセット(Cookieを削除)する。</a>
</p>
の部分を削除すれば動作しません。
サンプルでのtheDay = 30;をtheDay = 100;にすれば
100日後にcookieファイルは削除されます。
お好みの数字を入れてください。ただし、最後に投票し
た日から数えて30日間というプログラムなので、毎日投
票が1票でもされれば、2月末には削除されないことに
なります。
例えば、2月末に投票があれば3月末まで削除されない
わけです。
[42.1] From 管理人 [2002/12/18 21:50:40:Wed]
うっちーさんのコーディングでは、○の部分を埋めることで動作させることは出来ないように思います。
(未完成なので何とも言えませんが)
理由は、投票数を表示させる場合ID名の設定が必要に
なりますが、DIVタグにはalign属性しか記述されてないからです。
あとHTMLにところどころ抜けがあったり、重複していたりしているところもあります。
(これは表示上の不具合は出ませんが)
一応私流のサンプルを以下に掲載しておきます。
(即興で作ったので人様に自慢できるようなサンプルではありませんが)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML lang="ja">
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=shift_jis">
<TITLE>投票</TITLE>
<script type="text/JavaScript">
<!--
theDay = 30; // Cookie の保存期間を「30日間」とする
k = 10;
//--------------------------------------------------------------------------
// Cookieを参照する関数(Cookieから指定されたデータを抜きだす)
// 成功した時はnull以外、失敗した時はfalseを返す
//--------------------------------------------------------------------------
function getCookie(theName)
{
theName += "="; // = を追加
theCookie = document.cookie+";"; // 検索時最終項目で-1になるのを防ぐ
start = theCookie.indexOf(theName); // 指定されたセクション名を検索する
if (start != -1)
{
end = theCookie.indexOf(";",start); // データを抜きだす
return unescape(theCookie.substring(start+theName.length,end));
}
return false;
}
//--------------------------------------------------------------------------
// Cookieを設定する関数(Cookieにデータを保存する)
// 成功した時はtrue、失敗した時はfalseを返す
//--------------------------------------------------------------------------
function setCookie(theName,theValue)
{
if ((theName != null) && (theValue != null))
{
expDay = new Date(); // 現在の日時を取得
expDay.setTime(expDay.getTime()+(theDay*1000*60*60*24)); // Cookie期限の設定
expDay = expDay.toGMTString();
document.cookie = theName + "="+escape(theValue)+";expires="+expDay; // データ保存
return true;
}
return false;
}
function abc(divID)
{
if(document.getElementById) //DOM対応ブラウザが動作対象
{
Votobj = document.getElementById(divID);
i = Votobj.childNodes[0].nodeValue; //現在の投票数を取得
i++; //1をプラス
Votobj.childNodes[0].nodeValue = i; //プラスした投票数を表示
setCookie(divID,i); //投票数を保存
}
}
function getCount()
{
if(document.getElementById) //DOM対応ブラウザが動作対象
{
for (j = 0; j < k ; j++)
{
Votobj = document.getElementById(j);
n = getCookie(j); // 過去の投票数取得
if(n) // 過去の投票数があれば
{
Votobj.childNodes[0].nodeValue = n; //投票数を表示
}
}
}
}
function resetCount()
{
if(document.getElementById) //DOM対応ブラウザが動作対象
{
theDay = -1;
for (j = 1; j < k+1 ; j++)
{
setCookie(j,0);
Votobj = document.getElementById(j);
Votobj.childNodes[0].nodeValue = 0; //投票数を初期化
}
theDay = 30;
}
}
// -->
</script>
</HEAD>
<BODY onLoad="getCount();">
<center><h1><font color="#990066" face="HG創英角ポップ体">投票</font></h1>
<br>
<table border="1" width="600" cellpadding="5" cellspacing="3" bgcolor="#ffffcc">
<tr hight="240">
<td width="50"><font color="#000099"><b> </b></td>
<td width="250"><font color="#000099"><b>花の名前</b></font></td>
<td width="400"><font color="#000099"><b>花言葉</b></font></td>
<td width="80"><font color="#000099"><b>投票数</b></font></td></tr>
<tr bgcolor="#ffffff">
<td><input type="button" value="投票" onclick="abc(1)"></td>
<td>ばら(赤)</td>
<td>愛情</td>
<td><div align="right" id="1">0</div></td></tr>
<tr bgcolor="#ffffff">
<td><input type="button" value="投票" onclick="abc(2)"></td>
<td>ひまわり</td>
<td>あなたを見つめる</td>
<td><div align="right" id="2">0</div></td></tr>
<tr bgcolor="#ffffff">
<td><input type="button" value="投票" onclick="abc(3)"></td>
<td>チューリップ(赤)</td>
<td>愛の告白</td>
<td><div align="right" id="3">0</div></td></tr>
<tr bgcolor="#ffffff">
<td><input type="button" value="投票" onclick="abc(4)"></td>
<td>カトレア</td>
<td>あなたは美しい、優美な貴婦人</td>
<td><div align="right" id="4">0</div></td></tr>
<tr bgcolor="#ffffff">
<td><input type="button" value="投票" onclick="abc(5)"></td>
<td>ばら(白)</td>
<td>私はあなたにふさわしい</td>
<td><div align="right" id="5">0</div></td></tr>
<tr bgcolor="#ffffff">
<td><input type="button" value="投票" onclick="abc(6)"></td>
<td>カサブランカ</td>
<td>雄大な愛</td>
<td><div align="right" id="6">0</div></td></tr>
<tr bgcolor="#ffffff">
<td><input type="button" value="投票" onclick="abc(7)"></td>
<td>チューリップ(紫)</td>
<td>永遠の愛情</td>
<td><div align="right" id="7">0</div></td></tr>
<tr bgcolor="#ffffff">
<td><input type="button" value="投票" onclick="abc(8)"></td>
<td>こちょうらん</td>
<td>あなたを愛します</td>
<td><div align="right" id="8">0</div></td></tr>
<tr bgcolor="#ffffff">
<td><input type="button" value="投票" onclick="abc(9)"></td>
<td>カスミソウ</td>
<td>清き心</td>
<td><div align="right" id="9">0</div></td></tr>
<tr bgcolor="#ffffff">
<td><input type="button" value="投票" onclick="abc(10)"></td>
<td>カラー</td>
<td>乙女のしとやかさ</td>
<td><div align="right" id="10">0</div></td></tr>
</table>
<p>
<a href="javascript:resetCount(); getCount();">全投票をリセット(Cookieを削除)する。</a>
</p></center>
</BODY>
</HTML>
うっちーさんのコーディングを少し手直しして、cookieを使い次回投票への反映と投票のリセットを追加しました。
ご参考にして下さい。
(上記サンプルで習ってないところがあって分からない
場合は、ご説明いたしますので、またカキコしてください。)
[41.1] From 管理人 [2002/12/18 00:01:21:Wed]
学生さんでしたか。卒研大変なようですね。
私は、プロではありません。JavaScriptも独学で学びました。
うっちーさんは、先生がおられて良いですね。
ひとつ気になっているのですが・・・
それは”自分が授業で習った範囲で”というところです。
プログラミングというのは、これが正解だというものではないと思いますよ。
10人のプログラマーに同じことをプログラミングしてもらった場合、
十人十色で同じコーディングは無いとまで言われています。
ですから、私はうっちーさんと同じように学んでいないし、
スキルも違いますから、うっちーさんが望んでいる回答
は出せないと思います。
それと、先生が仰られている”仕方ないからそのときだけ1増えるように設定しなさい”
というのは難しいと言いましょうか、cookieを使わない限り出来ないと思います。
(先生が他のやり方を知っていたら、逆に教えてもらいたいです。)
cookieはJavaScriptで唯一書き込みが許されているものです。別に他の言語ではありませんよ。
[40.1] From 管理人 [2002/12/17 23:43:58:Tue]
管理人です。
まことに残念ですが、JavaScriptでは投票はプログラム出来ません。
(投票というのは、多数の方がうっちーさんのHPに訪れて投票する
というように仮定した場合です。)
理由は、JavaScriptは基本的にクライアント側において動作させるもの
だからです。
投票を実現するには、投票結果を保持して次回に反映しなければなりません。
例えば、今日ある項目に100の投票があったとします。明日また投票する時
に100から始めなければならないわけです。
この100をサーバーに保存できないのです。
これを実現するには、CGI等のサーバーサイドプログラムでなければ出来ない
ということです。
うっちーさんが、以上のことを承知していて(クライアントのパソコンのみで
投票する事を前提)表示処理のみを知りたいのであれば、以下を参考にして下さい。
クライアントパソコンでの投票結果の保存は、cookieを使えば出来ます。
cookieは以下のページを参考にして下さい。
http://www.tees.ne.jp/~pokochan/tips/cookie.html
getCookie(theName)及びsetCookie(theName,theValue)はそのまま使えると思います。
表示(書き出し)は
document.write("投票数とか書き出す内容");
で表示したい場所に記述して下さい。
[39.1] From 管理人 [2002/12/16 22:23:00:Mon]
管理人です。
私はネットショッピングはやりませんので、カート・買い物かご
と言われてもピンときません。
が、よしさんの言われることは理解出来ているつもりです。(^^)
要するに開いたウィンドウから元のウィンドウを制御したいわけですね。
CGIプログラムというのは一般的に、送信されたvalueの値から計算
なり処理をして、その結果をHTMLで書き出します。
書き出されるのは、送信したウィンドウになります。
この場合は、子ウィンドウになりますね。
(私は、Perlを少しかじった程度ですから、CGIプログラムは専門外
になりますので、違っていたら済みません)
サーバーサイドプログラムは、ご存知かも知れませんがCGIの他にも
PHPというのがあります。私は、最近PHPでページを作った経験が
ありますが、ご質問の事はPHPであれば、実現出来るような気が
します。本格的に取り組んでないため、断言はできませんが・・・
もちろん、JavaScriptを駆使しての話です。
JavaScriptではwindow.openで新しく開いたウィンドウから元のウィンドウ
を参照するのにopenerプロパティを使います。
opener.location.href = "URL";で元のウィンドウのページを変更出来ます。
今思いついたのですが、このような方法はどうでしょうか?
子ウィンドウの表示ファイルtestcart1.htmに以下を記述します。
opener.location.href = " ";
で元のウィンドウに何も表示しないようにして、そこに
opener.document.open();
opener.document.write("書き出す内容");
opener.document.close();
(書き出す内容は細かく記述して下さい。
this.form._num.options[this.form._num.selectedIndex].valueの値を利用
して買い物かごの表示をすれば良いでしょう。)
でページの内容を書き出すという方法です。
あとは、これを送信ボタンのonSubmitで実行します。
全くの思いつきで検証してないので動作するかはわかりませんが、
一度試してみて下さい。
以上、ご参考になれば幸いです。
[38.1] From 管理人 [2002/12/16 22:17:52:Mon]
[[もっと前の内容]] [先頭へ] [Top Pageへ] [Contentsへ]