1.mysql 数据库的建立

首先在虚拟机终端上利用 ifconfig 获取虚拟机IP。

然后在本地计算机浏览器地址栏输入 http://192.168.200.128/phpmyadmin 如果载入不成功检查Ubuntu是否安装phpmyadmin。

输入mysql的账号和密码进入。并且新建一个名为 sdb 的数据库

及其对应的表:

privilege

users

2.后端PHP代码

db_info.php

/**

* Created by PhpStorm.

* User: pldq

* Date: 16-12-13

* Time: 下午8:31

*/

#echo "From db_info.php";

# databases infomation

static $DB_HOST="localhost";

static $DB_NAME="sdb";

static $DB_USER="root";

static $DB_PASS="******";

global $con;

$con = mysqli_connect($DB_HOST, $DB_USER, $DB_PASS);

if ($con == null) {

die("FAILED|Could not connect:" . mysqli_error() . "

");

}

if (!mysqli_select_db($con, "sdb")) {

die("FAILED|Could't use foo: " . mysqli_error());

}

?>

login.php

'db_info.php');

// echo "Hello World!";

// echo $_REQUEST["username"];

// echo $_REQUEST["psd"];

$username = $_POST["username"];

$psd = $_POST["psd"];

// $phone = $_POST["phone"];

// $email = $_POST["email"];

$sql_username = "Select * from users WHERE username = '" . $username . "'";

$mysqli_result = mysqli_query($con, $sql_username);

$row = mysqli_fetch_array($mysqli_result);

if (mysqli_num_rows($mysqli_result) == 0) {

die("FAILED|The username is not existed!");

}

if ($row['password'] === $psd and strlen($psd) > 6)

{

$str_ret = "SUCCEED|SUCCEED LOGIN IN THE SYSTEM!|";

$sql_get_privilege = "Select * from privilege WHERE username = '" . $username . "'";

$mysqli_privilege_result = mysqli_query($con, $sql_get_privilege);

if (mysqli_num_rows($mysqli_result) == 0) {

$_SESSION['user'] = $username;

die($str_ret);

} else {

$row = mysqli_fetch_array($mysqli_privilege_result);

$_SESSION['user'] = $username;

$_SESSION['rightstr'] = $row['rightstr'];

die($str_ret . $row['rightstr']);

}

} else {

die("FAILED|The password is incorrect!");

}

mysqli_close($con); // close db connect

?>

然后将代码上传到Ubuntu 站点目录下

这样网页后端就编写成功了!

3.MFC 端

1、利用 MFC 生成向导生成一个基于对话框的程序。

使用GDI绘图:

#include

#pragma comment(lib, "gdiplus.lib")

using namespace Gdiplus;

// Bitmap* m_mainImage; // 声明为类成员

BOOL CManagementSystemDlg::OnInitDialog()

{

// 初始化 GDI+

GdiplusStartupInput gdiplusStartupInput;

GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);

// !其余代码没有进行修改、删除

}

void CManagementSystemDlg::OnClose()

{

// 释放GDI+

GdiplusShutdown(m_gdiplusToken);

}

绘制图片:

#define IMAGE_MAIN_FILENAME L"Important\\res_login\\main.jpg"

BOOL CManagementSystemDlg::OnInitDialog()

{

// 加载图片到内存

m_mainImage = Bitmap::FromFile(IMAGE_MAIN_FILENAME);

}

void CManagementSystemDlg::OnPaint()

{

CClientDC Clientdc(this);

Graphics graphics(Clientdc.GetSafeHdc());

// 绘制图片

graphics.DrawImage(m_mainImage, 0, 0, m_mainImage->GetWidth(), m_mainImage->GetHeight());

}

然后编译运行、、、

但是运行后发现窗口并不能实现拖动。为了实现窗口拖动我们还需要让对话框响应 WM_NCHITTEST 消息。让它把点击再窗口客户区的消息响应为在标题栏点击的消息。

LRESULT CManagementSystemDlg::OnNcHitTest(CPoint point)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

CRect rc;

GetClientRect(&rc);

ClientToScreen(&rc);

int x = point.x;

int y = point.y;

if (x >= rc.left && x <= rc.right && y >= rc.top && y <= rc.bottom)

{

return HTCAPTION;

}

else {

return CDialogEx::OnNcHitTest(point);

}

}

退出按钮的事件代码:

void CManagementSystemDlg::OnBnClickedButtonExit()

{

// TODO:在此添加控件通知处理程序代码

this->SendMessage(WM_CLOSE, 0, 0);

}

登陆按钮的事件代码:

HTTP访问:

1. 利用MFC 里面的CSession、CHttpConnection等函数:(实现失败!)

#include

void Ansi2Wchar(std::string strSource, CString& strDest)

{

int length = 0;

length = ::MultiByteToWideChar(CP_ACP, 0, strSource.c_str(), strSource.length(), 0, 0);

WCHAR* Buffer = new WCHAR[length + 1];

memset(Buffer, 0, (length + 1) * sizeof(WCHAR));

::MultiByteToWideChar(CP_ACP, 0, strSource.c_str(), strSource.length(), Buffer, length);

strDest = Buffer;

delete[] Buffer;

}

void Wchar2Ansi(CString strSource, std::string& strDest)

{

int length = 0;

length = ::WideCharToMultiByte(CP_ACP, 0, strSource.GetBuffer(), strSource.GetLength(), 0, 0, 0, 0);

strSource.ReleaseBuffer();

CHAR* Buffer = new CHAR[length + 1];

memset(Buffer, 0, sizeof(CHAR)* (length + 1));

::WideCharToMultiByte(CP_ACP, 0, strSource.GetBuffer(), strSource.GetLength(), Buffer, length, 0, 0);

strSource.ReleaseBuffer();

strDest = Buffer;

delete[] Buffer;

}

void CManagementSystemDlg::OnBnClickedButtonLogin()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(TRUE);

CString strUrl = L"http://192.168.200.128/myAdminSystem/login.php";

DWORD dwServiceType = AFX_INET_SERVICE_HTTP;

CString strServer = L"";

CString strObject = L"";

INTERNET_PORT nPort = 80;

if (!AfxParseURL(strUrl, dwServiceType, strServer, strObject, nPort))

{

return;

}

CInternetSession mysession(L"session", 0);

mysession.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 1000 * 20);

mysession.SetOption(INTERNET_OPTION_CONNECT_BACKOFF, 1000);

mysession.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1);

CHttpConnection* mycon = mysession.GetHttpConnection(strServer, INTERNET_FLAG_KEEP_CONNECTION, nPort);

CHttpFile* myfile = mycon->OpenRequest(CHttpConnection::HTTP_VERB_POST, strObject, 0, 1, 0, L"HTTP/1.1", INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE);

CString strPostData = L"username=" + strUSER + L"&psd=" + strPsd;

std::string strPost = "";

Wchar2Ansi(strPostData, strPost);

CString strHeaders = L"Content-Type: application/x-www-form-urlencoded\r\nAccept: */*\r\n";

BOOL result = myfile->SendRequest(strHeaders, (LPVOID)strPost.c_str(), strPost.size());

strHeaders.ReleaseBuffer();

strPostData.ReleaseBuffer();

CHAR Buffer[1024 + 1] = { 0 };

memset(Buffer, 0, (1024 + 1) * sizeof(CHAR));

std::string strRawResponse = "";

UINT nReaded = 0;

while ((nReaded = myfile->Read((void*)Buffer, 1024)) > 0)

{

Buffer[nReaded] = '\0';

strRawResponse += Buffer;

memset(Buffer, 0, (1024 + 1) * sizeof(CHAR));

}

CString strResponse = L"";

Ansi2Wchar(strRawResponse, strResponse);

if (strResponse.GetLength() <= 0)

{

MessageBox(L"获取数据失败!", L"Info", MB_OK | MB_ICONWARNING);

return;

}

}

这个 Bug 很奇怪,当我打开 Fiddler 进行抓包时 SendRequest 可以成功使用,当我关闭 Fiddler 的抓包功能时它会弹出 “无法与服务器建立连接的信息框”

2. 利用WinHttp 的 com 组件智能指针编程(实现简单、现使用)

#import "C:\\windows\\system32\\winhttp.dll"

#define STRING_LOGIN_HOST_ADDRESS L"http://192.168.200.128/myAdminSystem/login.php"

void CManagementSystemDlg::OnBnClickedButtonLogin()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(TRUE);

CString strPostData = L"username=" + strUSER + L"&psd=" + strPsd;

// using com programming winhttp

WinHttp::IWinHttpRequestPtr ptrHttp = nullptr;

ptrHttp.CreateInstance(__uuidof(WinHttp::WinHttpRequest));

if (0 != ptrHttp->Open(L"POST", STRING_LOGIN_HOST_ADDRESS))

{

MessageBox(L"服务器连接失败!", L"Info", MB_OK | MB_ICONSTOP);

return;

}

ptrHttp->SetRequestHeader(L"User-Agent", L" Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 50.0.2661.102 Safari / 537.36");

ptrHttp->SetRequestHeader(L"Content-Type", L"application/x-www-form-urlencoded");

ptrHttp->Send(strPostData.GetBuffer());

strPostData.ReleaseBuffer();

CString strResult = ptrHttp->GetResponseText();

CString strCookie = ptrHttp->GetResponseHeader(L"Set-Cookie"); // get http post cookie

strCookie.Replace(L"; path=/", L"");

}

对HTTP返回消息的处理:

if (strResult.GetLength() <= 0)

{

MessageBox(L"获取数据失败!", L"Info", MB_OK | MB_ICONWARNING);

return;

}

if (-1 == strResult.Find(L"FAILED"))

{

int index = 0;

CString strCaption = strResult.Mid(index, strResult.Find(L"|", index) - index);

index = strResult.Find(L"|", index) + 1;

CString strInformation = strResult.Mid(index, strResult.Find(L"|", index) - index);

index = strResult.Find(L"|", index) + 1;

CString session = strResult.Mid(index, strResult.GetLength() - index);

MessageBox(strInformation, strCaption, MB_OK | MB_ICONINFORMATION);

// TODO

} else {

int index = 0;

CString strCaption = strResult.Mid(index, strResult.Find(L"|", index) - index);

index = strResult.Find(L"|", index) + 1;

CString strInformation = strResult.Mid(index, strResult.GetLength() - index);

MessageBox(strInformation, strCaption, MB_OK | MB_ICONSTOP);

return;

}

这样一个登陆功能就成功实现了!

php实现餐厅管理系统,项目实战篇-餐馆管理系统—MFC,PHP,MySql:2.登陆功能的实现...相关推荐

  1. C# Xamarin For Android移动开发项目实战篇

    一.课程介绍 在前面阿笨的<C# Xamarin移动开发基础进修篇>课程中,大家已经熟悉和了解了Xamarin移动App开发的基础知识和原理.本次分享课<C# Xamarin移动开发 ...

  2. PHP宿舍管理系统项目实战

    PHP宿舍管理系统项目实战 写在前面 PHP项目开发标准流程 知识点 项目实现及详细设计 详细设计 前端使用的技术 后端使用的技术 数据库设计 源码解析 系统首页public 管理页面Admin do ...

  3. 跟着王进老师学开发Python篇第三季:Tkinter GUI项目实战篇-王进-专题视频课程

    跟着王进老师学开发Python篇第三季:Tkinter GUI项目实战篇-465人已学习 课程介绍         本季课程为Tkinter GUI项目实战:学生信息管理系统, 内容包含:项目总体介绍 ...

  4. xml信息管理系统_WPF信息管理系统项目实战教程二:使用XAML实现页面布局

    首页面布局设计 XAML(Extensible Application Markup Language),可扩展应用程序标记语言的使用使得C#桌面应用程序开发前后端实现真正分离.前端人员可使用该标记语 ...

  5. PythonWeb仿51edu项目实战篇视频教程教学视频

    课程简介:    Python Web 仿51edu项目实战篇 视频教程 教学视频 -----------------课程目录----------------- 课程介绍及开发环境 django基础知 ...

  6. Python和Java结合的项目实战_[项目实战] Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 [...

    资源介绍 课程简介:xa0xa0 Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 教学视频 ----------------------课程目录 Python项目实战篇 ...

  7. Asp.Net Core 项目实战之权限管理系统(0) 无中生有

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  8. Java Web项目源代码|CRM客户关系管理系统项目实战(Struts2+Spring+Hibernate)解析+源代码+教程

    客户关系管理 (CRM) CRM一般指客户关系管理 客户关系管理是指企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方式,向客户提供创新 ...

  9. 洗礼灵魂,修炼python(82)--全栈项目实战篇(10)—— 信用卡+商城项目(模拟京东淘宝)...

    本次项目相当于对python基础做总结,常用语法,数组类型,函数,文本操作等等 本项目在博客园里其他开发者也做过,我是稍作修改来的,大体没变的 项目需求: 信用卡+商城: A.信用卡(类似白条/花呗) ...

最新文章

  1. 【转】Oracle SPARC SuperCluster全能王:不改大道至简本色
  2. linux:安装mysql
  3. 电力系统分析课设短路电流计算simulink仿真
  4. 2017 全球超大规模数据中心已超过 390 个,中国仅占 8%
  5. SQL Server 2005: Constraints
  6. Keep将赴港上市?回应:不予置评
  7. wps java转换成doc_WPS能转PDF吗?WPS转换不能错过的一款软件!
  8. 僵尸 AI 来了,人类该怎么办?
  9. gitlab一键安装 笔记
  10. Java从入门到跑路
  11. PSFTP上传文件到服务器
  12. 杜比专为旧版本Android,杜比音效app(dolby audio) v2.1.0 安卓版
  13. electron 自定义标题栏_CAXA电子图板2015版自定义标题栏
  14. 计算机五年计划个人,教师个人五年发展规划
  15. vim insert VISUAL模式
  16. 五万字总结,深度学习基础。
  17. 【项目管理/PMP/PMBOK第六版/新考纲】纯干货!Sprint冲刺/冲刺计划会/每日站立会/冲刺评审会/冲刺回顾会,系列文章建议收藏
  18. 【Ubuntu】服务器使用
  19. 职业生涯规划jd网上商城
  20. python写图,Python实现图片添加文字

热门文章

  1. java毕业设计网上童装销售系统mybatis+源码+调试部署+系统+数据库+lw
  2. 电脑经常黑屏死机是什么原因?
  3. Worthington 胰蛋白酶详细分解
  4. 发布要素服务数据源没有被注册到服务器,则此数据被复制到服务器
  5. 王权富贵:基于深度学习的目标检测汇总
  6. HTML+CSS+JS期末大作业:时尚服装购物网站设计——时尚服装购物商城(16页) 关于时尚购物HTML网页设计-----服装
  7. html 首字变大,CSS设置首字放大效果(代码实例)
  8. 元宇宙之所以受追捧,就在于它自带一整套的商业闭环
  9. 人生哲理名言100句
  10. 终于有一款多功能的串口网络中控播放器