C语言写的网站入门篇

第一步:运行sql脚本:https://download.csdn.net/download/qq_40098572/10946799

第二步:搭建开发环境

第三步:搭建mysql环境

#include <stdlib.h>
#include <stdio.h>
#include <winsock.h>
#include <mysql.h>
#include "cgic.h"
#include "ctemplate.h"
#include <Windows.h>
void executeNonQuery(char * sql);
MYSQL_RES * executeQuery(char *sql);
void showError(char *msg);
void printHtmlContentType();

int cgiMain()
{
//	MessageBox(NULL, "ok", "ok", MB_OK);
	char mod[32] = { 0 };
	char action[32] = { 0 };
	//所有的对cgi的请求都至少要带这两个参数。我的约定
	//MVC.cgi?mod=teacher&action=list 列出所有的老师数据
	//MVC.cgi?mod=teacher&action=addnew 进入新增老师的界面
	//MVC.cgi?mod=teacher&action=addnewSubmit 新增老师的保存操作
	//StudengMgr.cgi?mod=student&action=list 列出所有的学生数据
	//MVC.cgi?mod=user&action=login 用户登陆
	if (cgiFormString("mod", mod, sizeof(mod)) != cgiFormSuccess)
	{
		showError("没有提供mod参数");
		return 0;
	}
	if (cgiFormString("action", action, sizeof(action)) != cgiFormSuccess)
	{
		showError("没有提供action参数");
		return 0;
	}
	if (strcmp(mod, "teacher") == 0)
	{
		if (strcmp(action, "list") == 0)
		{
			MYSQL_RES *result = executeQuery("select Id,Name,PhoneNum from T_Teachers");
			TMPL_varlist *varlist = 0;
			TMPL_loop *loopTeachers = 0;
			MYSQL_ROW row;
			while (row = mysql_fetch_row(result))
			{
				char *id = row[0];
				char *name = row[1];
				char *phoneNum = row[2];
				loopTeachers = TMPL_add_varlist(loopTeachers,
					TMPL_add_var(0, "Id", id, "Name", name, "PhoneNum", phoneNum, 0));
			}
			//不要写错成:TMPL_add_loop(varlist,"teachers",loopTeachers);
			varlist = TMPL_add_loop(varlist, "teachers", loopTeachers);
			printHtmlContentType();
			TMPL_write("TeacherList.htm", 0, 0, varlist, cgiOut, cgiOut);

			mysql_free_result(result);
		}
		else if (strcmp(action, "addnew") == 0)
		{
			printHtmlContentType();
			TMPL_write("TeacherAddNew.htm", 0, 0, 0, cgiOut, cgiOut);
		}
		else if (strcmp(action, "addnewSubmit") == 0)
		{
			char name[256] = { 0 };
			char phoneNum[256] = { 0 };
			if (cgiFormString("Name", name, sizeof(name)) != cgiFormSuccess)
			{
				showError("姓名不能为空");
				return;
			}
			if (cgiFormString("PhoneNum", phoneNum, sizeof(phoneNum)) != cgiFormSuccess)
			{
				showError("手机号码不能为空");
				return;
			}
			{
				char sql[1024] = { 0 };
				sprintf(sql, "insert into T_Teachers(Name,PhoneNum) values('%s','%s')",
					name, phoneNum);
				executeNonQuery(sql);
				cgiHeaderLocation("MVC.cgi?mod=teacher&action=list");
			}
		}
		else if (strcmp(action, "edit") == 0)
		{
			int id;
			if (cgiFormInteger("id", &id, 0) != cgiFormSuccess)
			{
				showError("请提供要修改的id");
				return;
			}
			{
				//加载旧的数据
				MYSQL_RES * result;
				char sql[1024] = { 0 };
				MYSQL_ROW row;
				sprintf(sql, "select Id,Name,PhoneNum from T_Teachers where Id=%d", id);
				result = executeQuery(sql);
				if (row = mysql_fetch_row(result))//有一条
				{
					char* name = row[1];
					char *phoneNum = row[2];
					TMPL_varlist *varlist = 0;
					varlist = TMPL_add_var(varlist, "Id", row[0], "Name", name, "PhoneNum", phoneNum, 0);
					printHtmlContentType();
					TMPL_write("TeacherEdit.htm", 0, 0, varlist, cgiOut, cgiOut);
				}
				else//一条结果都没有
				{
					showError("找不到这个id对应的教师信息");
					return;
				}
			}
		}
		else if (strcmp(action, "editSubmit") == 0)
		{
			int id;
			char name[256] = { 0 };
			char phoneNum[256] = { 0 };
			if (cgiFormInteger("Id", &id, 0) != cgiFormSuccess)
			{
				showError("Id不能为空");
				return 0;
			}
			if (cgiFormString("Name", name, sizeof(name)) != cgiFormSuccess)
			{
				showError("Name不能为空");
				return 0;
			}
			if (cgiFormString("PhoneNum", phoneNum, sizeof(phoneNum)) != cgiFormSuccess)
			{
				showError("PhoneNum不能为空");
				return 0;
			}
			{
				char sql[1024] = { 0 };
				sprintf(sql, "update T_Teachers set Name='%s' ,PhoneNum='%s' where Id=%d",
					name, phoneNum, id);
				executeNonQuery(sql);
				//重定向返回教师列表页面
				cgiHeaderLocation("MVC.cgi?mod=teacher&action=list");
			}
		}
		else if (strcmp(action, "delete") == 0)
		{
			int id;
			if (cgiFormInteger("id", &id, 0) != cgiFormSuccess)
			{
				showError("Id不能为空");
				return 0;
			}
			{
				char sql[128] = { 0 };
				sprintf(sql, "delete from T_Teachers where Id=%d", id);
				executeNonQuery(sql);
				cgiHeaderLocation("MVC.cgi?mod=teacher&action=list");
			}
		}
		else
		{
			showError("未知的action参数");
			return 0;
		}
	}
	else//倡议:有if就要写else
	{
		showError("未知的mod参数");
		return 0;
	}
	return 0;
}

void printHtmlContentType()
{
	cgiHeaderContentType("text/html;charset=gbk");
}
void showError(char *msg)
{
	TMPL_varlist *varlist = 0;
	varlist = TMPL_add_var(varlist, "msg", msg, 0);
	printHtmlContentType();
	TMPL_write("Error.htm", 0, 0, varlist, cgiOut, cgiOut);
}
void executeNonQuery(char * sql)
{
	MYSQL* pConn = mysql_init(0);
	if (!mysql_real_connect(pConn, "localhost", "root", "root", "studengmgr", 0, 0, 0))
	{
		goto error;
	}
	if (mysql_query(pConn, "set names gbk"))
	{
		goto error;
	}
	if (mysql_query(pConn, sql))
	{
		goto error;
	}
	goto exit;
error:
	cgiHeaderContentType("text/html;charset=gbk");
	fprintf(cgiOut, "执行出错 %s", mysql_error(pConn));
	//printf("执行出错 %s",mysql_error(pConn));
exit:
	mysql_close(pConn);
}
MYSQL_RES * executeQuery(char *sql)
{
	MYSQL* pConn = mysql_init(0);
	if (!mysql_real_connect(pConn, "localhost", "root", "root", "studengmgr", 0, 0, 0))
	{
		goto error;
	}
	if (mysql_query(pConn, "set names gbk"))
	{
		goto error;
	}
	if (mysql_query(pConn, sql))
	{
		goto error;
	}
	{
		MYSQL_RES *result = mysql_store_result(pConn);
		mysql_close(pConn);
		return result;
	}
error:
	cgiHeaderContentType("text/html;charset=gbk");
	fprintf(cgiOut, "执行出错 %s", mysql_error(pConn));
	//printf("执行出错 %s",mysql_error(pConn));
exit:
	mysql_close(pConn);
}

 

  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值