
チェックボックスをCGI(C言語)で使用する方法を教えて下さい。
例えば、HTMLで
<input type="checkbox" name="Check1" value="Sel11" />
チェック1 選択1<br />
<input type="checkbox" name="Check1" value="Sel12" />
チェック1 選択2<br />
<input type="checkbox" name="Check1" value="Sel13" />
チェック1 選択3
<hr />
<input type="checkbox" name="Check2" value="Sel21" checked />
チェック2 選択1<br />
<input type="checkbox" name="Check2" value="Sel22" />
チェック2 選択2<br />
<input type="checkbox" name="Check2" value="Sel23" checked />
チェック2 選択3
というプログラムはCGI(C言語)ではどの様に記述すれば良いでしょうか?
No.5ベストアンサー
- 回答日時:
■各データーを受け取ってからどのようにしたいかの処理
そういえば使い方を聞かれはしたけどどのように使いたいのかは聞いてないわ
まあいいやそれでも説明はできるしね
先っきの書き込みで
chek_name[3],*chek_value[3];
の中身はこんな感じになってるはず
chek_name[0]==sel
chek_name[1]==sel
chek_name[2]==NULL
chek_value[0]==Sel21
chek_value[1]==Sel23
chek_value[2]==NULL
そしてさっきの分解法は
チェックを全部ONにしようが一つだけONにしようがONにした数だけ配列に値がはいるようにしてるの
そして次
while(chek_value[i]!=NULL){
check(&chek_value[i],&b,&c);//NO3で作ったHTMLの表示を変える関数
if(strcmp(chek_value[i],"Sel21")==0){ //やっぱりチェックボックスのvalueは数字がいいよ処理がめんどいswichもつかえないし
//sel21がON担ったときどう処理したいかここに記述する
//って言うか処理させたい事の関数を作ってまとめて処理するといいかも
//失敗失敗
}
if(strcmp(chek_value[i],"Sel22")==0){
//sel22がONになったときどう処理したいかここに記述する
}
if(strcmp(chek_value[i],"Sel23")==0){
//sel23がONになったときどう処理したいかここに記述する
}
i++;
}
大体こんな感じだね
まとめると
・チェックがonのとき(offでも処理できるならどうぞ)情報を送信してもらう
・送られてくる情報を分解して各配列に入れる(順番がバラバラでも内容にNUULが入っててもOKな用に)
・onの情報が送られてきたときようの表示変換関数と動作処理関数を作っておく
・HTMLのcheakのvalueは数字のほうが処理しやすい
//・説明する時に作ったソースは私が作ったソースをアレンジして作ったけれどアレンジしたのはコンパイルして動作を確認していないからちゃんと動くか分からない上にバグがあるか分からない
//・たぶんあってるけれど、多少書き間違えてるかもしれないから質問者さんが自分でどこがミスってるか考えてね ミスがあっても本の少しだろうからね アレンジしていない私のソースはバグなし、書き間違えなし
・C言語でCGI作ってる人少ないみたいだから同じC言語使い同士仲良くやろうね。また質問やききたい事があったらよろしくね
疲れました。
手が冷たいです。
今日は寝ます。
No.4
- 回答日時:
■チェックボックスの入力情報取得
おそらくチェックボックス以外のテキストボックスもつかうと思いますのでそれを含めた処理です
チェックボックスはチェックボックス専用の配列に格納します
チェックボックス以外のものはチェックボックス以外のですね
例としてHTMLにこれだけの情報を送ってもらうようにしてみます
//チェックボックス以外は適当にかいてるので使い方おかしいと言う突っ込みは受け付けません
<input type=\"text\" name=\"text\" value=\"ren\" />";
<input type=\"radio\" name=\"cc\" value=\"light\" checked />";
<input type=\"radio\" name=\"cc\" value=\"left" />";
<input type=\"checkbox\" name=\"sel\" value=\"Sel21\" />";//チェック入れて送信
<input type=\"checkbox\" name=\"sel\" value=\"Sel22\" />";//チェックいれずに送信
<input type=\"checkbox\" name=\"sel\" value=\"Sel23\" />";//チェック入れて送信
送られてくる情報はこんなかんじでしょうか
text=ren&cc=light&sel=Sel21&sel=Sel23
これを分解して各配列に入れます
int Deta1(void){
char *chekigai_name[2],*chekigai_value[2]; //チェック以外の配列用 配列の数はちぇくボックス以外の情報分
char *chek_name[3],*chek_value[3]; //テックの配列用 配列の数はON/OFF含めたチェックの全体すう
char *a="text=ren&cc=light&sel=Sel21&sel=Sel23"; //送られてくる情報が入るように工夫してね
int b;
int c=0;
int i=0,cn=0,dn=0;
char *tm=NULL;
char *han;
if(a[0]==NULL){
return(-1);
}
if(a!=NULL){
b=strlen(a)
}
chekigai_name[0]=a;
while((a[++i]!=NULL)&&(i<b)){
/* 項目の分解 */
if(a[i]=='='){
a[i]=NULL;
if(c!=1){
chekigai_value[cn]=a+i+1;
cn++;
}
else{
chek_valu[dn]=a+i+1;
dn++;
c=0;
}
}
/* データ項目で分解 */
else if(a[i]=='&'){
a[i]=NULL;
han=a+i+1;
if(strncmp(han,"sel=",4)==0){
chek_name[dn]=han;
c=1;
}
else{
chekigai_name[cn]=han;
}
}
}
}
//部屋の気温が冷たいから手が冷たいし疲れてきた
続く
No.3
- 回答日時:
■checkedのON/OFFの関数の用意
こんな関数を用意します
っというかよく見たらvalueにはいってるの(文字列でも良い)数字がいいですよ
処理しやすいため
第一引数にはvalueの値を
第二引数にはかえる前の文字列を
第三引数には変えたい文字列をいれます
void check(char **a,char **b,char **c){
if(strcmp(a,"Sel21")==0){
*b="<input type="checkbox" name="Check2" value="Sel21" checked />";
*c="<input type="checkbox" name="Check2" value="Sel21" />";
}
if(strcmp(a,"Sel22")==0){
*b="<input type="checkbox" name="Check2" value="Sel22" />";
*c="<input type="checkbox" name="Check2" value="Sel22" checked />";
}
if(strcmp(a,"Sel23")==0){
*b="<input type="checkbox" name="Check2" value="Sel23" checked />";
*c="<input type="checkbox" name="Check2" value="Sel23" />";
}
}
続く
No.2
- 回答日時:
■checkedのON/OFFのさせかた
こんな関数を使います
int hen(char *buf, char *mae, char *ato){
char *nw;
size_t zen,go;
zen = strlen(mae);
go = strlen(ato);
if(zen == 0 || (nw = strstr(buf, mae)) == NULL){
return 0;
}
memmove(nw + go, nw + zen, strlen(buf) - (nw + zen - buf ) + 1);
memcpy(nw, ato, go);
return 1;
}
関数の使い方ですが
第一引数は変化させたい文字列
第二引数は第一引数の中でとくに変えたい箇所
第三引数は変える予定の文字列
具体例をあげると
hen("りんごが木から落ちた","りんご","みかん");
とすると
みかんが木から落ちた
となります
質問にかかれてる
<input type="checkbox" name="Check2" value="Sel22" />
チェック2 選択2<br />
にchecked をつける場合
char *buf="<input type=\"checkbox\" name=\"Check2\" value=\"Sel22\" />
チェック2 選択2<br />"
char *zen="<input type=\"checkbox\" name=\"Check2\" value=\"Sel22\" />"
char *go="<input type=\"checkbox\" name=\"Check2\" value=\"Sel22\" checked/>"
と初期設定しておいて
hen(buf,zen,go);
とすれば文字列をかえられます
続く
No.1
- 回答日時:
「使用する」とはどんな意味で使ってますか?
・HTMLとして、例示されたようなコードを出力したい
↓
printfなりなんなり、お好きな関数を使って標準出力に出力してください。
それすらわからないなら、CGIより先にC言語をマスターしてください
・HTMLのcheckboxの使い方がわからない
↓
CGIより先にHTMLをマスターしてください。
あとは、そのHTMLの通りに出力するようにプログラムを作るだけです。
・checkboxからデータを受けとる方法がわからない
↓
過去の質問を見ると、受けとれているようなので、これは無いと思いますが。
・その他
↓
具体的に補足してください
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
namazu 検索窓の設置について
-
CGIソース中のHTMLタグですが。...
-
複数の検索のページをつくりたい
-
チェックボックスの返す値
-
文字の表示色を変えたい
-
Error: No Recipient というエ...
-
心理テストページをCGIで作りた...
-
別formのhidden項目を自form値...
-
CGIに渡しているパラメータを表...
-
チェックボックスで
-
ネットサーフレスキューのCSVエ...
-
1つのformに2つのsubmitボタン
-
cgi.pmを使ったcgiに変更したの...
-
cgi の入力チェック
-
CGIで得た内容をHTMlページに代入
-
SUN BBSの改造方法
-
wordの数式について 定積分を書...
-
アンケート
-
プルダウンからテキストボックスへ
-
ディレクトリのファイル数取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
チェックボックスの返す値
-
別formのhidden項目を自form値...
-
フォームの入力内容の後ろに文...
-
Error: No Recipient というエ...
-
このメールフォームが機能しな...
-
CGIからサイズ指定のwindowopen...
-
配列の中身がイコールならばと...
-
チェックボックスで選択した内...
-
掲示板作成で質問
-
ボタンの処理
-
CGIプログラムでのボタン表...
-
チェックボックスでのvalue値の...
-
必須項目の作り方。
-
掲示板の文字色指定について
-
YOMIサーチのソース教えてくだ...
-
CGIでチェックボックスを使...
-
アンケートフォームがうまく動...
-
CGIの表示を変える
-
CGIで得た内容をHTMlページに代入
-
MTOS内のページに設置したメー...
おすすめ情報