项目实战篇-餐馆管理系统—MFC,PHP,MySql:3.MFC端Person类及个人信息修改
来源:互联网 发布:业务流程数据化的例子 编辑:程序博客网 时间:2024/05/18 01:45
上一次我们成功实现了登陆功能,这次先从MFC端的基类 Person类开始写起、、、
1.首先是PHP端的修改个人信息:
<?php require_once("db_info.php"); $username = $_SESSION['user']; $oldPsd = $_POST['oldPsd']; $newPsd = $_POST['newPsd']; $email = $_POST['email']; $phone = $_POST['phone']; $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['username'] === $username){ if($oldPsd === $row['password']){ if (!empty($newPsd)) { $sql_password="UPDATE users SET `password` = '$newPsd' WHERE username = '$username'"; mysqli_query($con, $sql_password); echo "SUCCEED|Change password succeed!\n"; } else { echo "FAILED|The new password is not empty!\n"; } } else{ if (!empty($oldPsd)) { echo "FAILED|The password is incorrect!\n"; } } if(!empty($phone)){ $sql_phone="UPDATE users SET `phone` = '$phone' WHERE username = '$username'"; mysqli_query($con, $sql_phone); echo "SUCCEED|Change phone number is succeed!\n"; } if(!empty($email)){ $sql_email="UPDATE users SET `email` = '$email' WHERE username = '$username'"; mysqli_query($con, $sql_email); echo "SUCCEED|Change email is succeed!\n"; } }else{ echo "FAILED|Could't find the user!\n"; }?>
$_SESSION[‘user’]的创建是在登陆PHP login.php 中的:
2.MFC端
通过 PHP 代码我们可以知道,我们需要通过 POST 的方式传递四个参数 oldPsd,newPsd, email, phone、、、
但是我们要先创建个基类 Person 类,然后再讲未来的功能通过继承Person类而实现、、、
Person.h
#pragma onceclass Person{public: Person(CString strUser, CString session); CString getUser(void); CString changeInformation(CString oldPsd, CString newPsd, CString phone, CString email); // 改动个人信息protected: CString getSession(void); // 获取 Cookieprivate: CString session; // 存取网站 Cookie PHPSESSID CString strUser; // 存取用户名};
Person.cpp
#include "stdafx.h"#include "Person.h"#import "C:\\windows\\system32\\winhttp.dll"#define STRING_CHANGE_INFO_HOST_ADDRESS L"http://192.168.200.128/myAdminSystem/changeInfo.php"Person::Person(CString strUser, CString session){ this->session = session; this->strUser = strUser;}CString Person::getUser(void){ return this->strUser;}CString Person::changeInformation(CString oldPsd, CString newPsd, CString phone, CString email){ CString strPostData = L"oldPsd=" + oldPsd + L"&newPsd=" + newPsd + L"&phone=" + phone + L"&email=" + email; WinHttp::IWinHttpRequestPtr ptrHttp = nullptr; ptrHttp.CreateInstance(__uuidof(WinHttp::WinHttpRequest)); if (0 != ptrHttp->Open(L"POST", STRING_CHANGE_INFO_HOST_ADDRESS)) { CString Buffer = L"FAILED|服务器连接失败!"; return Buffer; } 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->SetRequestHeader(L"Cookie", this->session.GetBuffer()); this->session.ReleaseBuffer(); ptrHttp->Send(strPostData.GetBuffer()); strPostData.ReleaseBuffer(); return ptrHttp->GetResponseText();}CString Person::getSession(void){ return this->session;}
再添加一个继承 CDialogEx 的窗口类用于我们更改信息,生成之后让我们生成的窗口类继承 Person 类
由于 Person 类含有带有参数的构造函数,所以窗口类的构造函数需要注意!
class ChangeInfomation : public CDialogEx, public Person{ DECLARE_DYNAMIC(ChangeInfomation)public: ChangeInfomation(CString strUser, CString strSession, CWnd* pParent = NULL); // 标准构造函数 virtual ~ChangeInfomation();// 对话框数据 enum { IDD = IDD_CHANGEINFOMATION };protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP()public: afx_msg void OnBnClickedBtnCancle(); afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnBnClickedBtnConfirm(); CString strOldPsd; CString strNewPsd; CString strRepetPsd; CString strPhone; CString strEmail;};
构造函数的定义:
ChangeInfomation::ChangeInfomation(CString strUser, CString strSession, CWnd* pParent) : Person(strUser, strSession), CDialogEx(ChangeInfomation::IDD, pParent), strOldPsd(_T("")), strNewPsd(_T("")), strRepetPsd(_T("")), strPhone(_T("")), strEmail(_T("")){}
确认按钮被按下时的处理事件:
void ChangeInfomation::OnBnClickedBtnConfirm(){ // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); if (strNewPsd != strRepetPsd) { MessageBox(L"两次密码输入不一致!", L"Info", MB_OK | MB_ICONSTOP); return; } else if (strOldPsd.GetLength() > 0) { if (strNewPsd.GetLength() < 6) { MessageBox(L"新密码长度不能小于 6!", L"Info", MB_OK | MB_ICONSTOP); return; } if (strNewPsd.GetLength() > 20) { MessageBox(L"新密码长度不能大于 20!", L"Info", MB_OK | MB_ICONSTOP); return; } } if (0 == strNewPsd.GetLength() && 0 == strOldPsd.GetLength() && 0 == strPhone.GetLength() && 0 == strEmail.GetLength() ) { MessageBox(L"起码修改一个吧!", L"Info", MB_OK | MB_ICONSTOP); return; } CString strRet = this->changeInformation(strOldPsd, strNewPsd, strPhone, strEmail); MessageBox(strRet, L"Info", MB_OK | MB_ICONINFORMATION);}
IDD_CHANGEINFOMATION 的样式:
按下确认按钮后:
再让我们看看数据库中的情况:
数据全部都成功实现修改、、、
从0开始到现在已经三天了,本人学生党,MFC和PHP基本上都是从零开始,其中也遇到了不少的坑⊙﹏⊙
1.比如PHP端由于row里面的数据输错导致取不到正常的username,还错认为是Session出了问题,好在最后成功解决。^_^
2.MFC 端的 afxinet 奇怪的 Fiddler Bug,也真是醉了
3.还有就是一些需要加密的地方都没有去弄,直接进行数据库访问也没考虑会造成什么漏洞问题、、、自己会在不断的学习中补上
不管怎么说,还是很有趣的O(∩_∩)O、、、
最后也希望大神们能分享我一些经验^_^
0 0
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:3.MFC端Person类及个人信息修改
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:7.管理员专属及用户管理模块(The End)
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:4.权限管理模块
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:5.菜单管理模块
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:6.订单管理模块
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:1.项目工具准备篇
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:2.登陆功能的实现
- VC++/MFC入门项目开发实战之任务管理系统
- MFC 之 教室管理系统实战
- MFC学生健康管理系统(修改版)
- 餐饮管理系统 VC MFC
- 数据库管理系统MFC实现
- MFC项目实战(1)文件管理器--准备篇
- MFC项目实战(1)文件管理器--界面设计篇
- MFC excel修改类
- 日志管理类 mfc
- Excel管理类 MFC
- SSH项目实战---图书销售及后台管理系统
- 【51nod1403】 有趣的堆栈
- R语言画图-Error in get(getOption("device"))
- leetcode : Add Two Numbers
- 文章标题
- 数值分解
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:3.MFC端Person类及个人信息修改
- Android自定义简易照相机
- JS 10进制转其他进制
- mysql设置字符,不能启动的解决办法和注意事项
- 摸爬滚打DirectX11_day06——材质与顶点法线
- Matlab存储图片
- GDB常用调试命令以及多进程多线程调试
- using namespace std介绍
- 执行shell脚本报错'\357\273\277'