持续更新:从零开始的php学习生活
其实也不是真的从零开始,在此之前我还是一边研究博学(博客美化)一边学的CSS、HTML、JavaScript的,相关内容可以戳这里。
看本文之前你最好稍微熟悉一下HTML、JavaScript什么的。
从一个小白做起,目标是搭一个网站!(flag在此。
2017.9.28
(其实是一周前开始搞的,现在才开始写
学习php,首先我们要有本地的php环境。
作为一个偷懒选手我是直接用XAMPP,这个的下载安装教程网上有很多,我当时是在这里看的。
记得开IIS,还要改改端口什么的(我把Apache的端口改成了82,下面代码会出现)。
然后请开始在网上(随便)找个php教程看看。各种语法好像其实和JavaScript,c++什么的差不多。
(其实以上两步你随便什么顺序都可以)
开工吧。
先熟悉一下SQL的使用。
我遇到的第一个问题是php教程跟我说的mysql_connect好像用不了。。。哦,折腾了很久以后发现我的版本比较高,应该用mysqli_connect。
先把注册系统搞进来。
下面这个是注册界面:
<!DOCTYPE HTML> <html> <body> <form action="recive.php" method="post"> 姓名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> 邮箱:<input type="text" name="email"><br> <input type="submit"> </form> </body> </html>
然后是接收:
<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_NAME','enceladus') ;
$conn=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
mysqli_query($conn,"set names 'utf8'");
if(mysqli_connect_errno()){
echo mysqli_connect_error();
}
$user_name=mysqli_real_escape_string($conn,trim($_POST['username']));
$user_email=mysqli_real_escape_string($conn,trim($_POST['email']));
$user_password=mysqli_real_escape_string($conn,trim($_POST['password']));
$user_email=$_POST['email'];
$query = "SELECT * FROM Users WHERE email='$user_email' ";
$data = mysqli_query($conn,$query);
if (mysqli_num_rows($data)!=0){
echo "<h2>Email exist!</h2>";
}else{
$sql = "INSERT INTO Users(username,password,email) VALUES ('"
.$user_name."','".$user_password."','".$user_email."')";
if ($conn->query($sql) === TRUE) {
echo "Register Successfully!<br>";
}else{
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
mysqli_close($conn);
?>
还在开发过程中所以暂时没管密码加密什么的(其实是出了问题偷懒不搞
然后做login的时候不知道出了什么岔子,session.save_path一直是一个奇怪的地址(跟php.ini的不同),于是只能强行在页面前加个session_save_path('D:\swm_sxt\XAMPP\tmp');,先这样了,以后再处理。
然后搞着搞着。login做好了:
<?php
session_save_path('D:\swm_sxt\XAMPP\tmp');
session_start();
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_NAME','enceladus') ;
if(!isset($_SESSION['user_id'])){
if(isset($_POST['submit'])){
$conn=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
$user_email=mysqli_real_escape_string($conn,trim($_POST['useremail']));
$user_password=mysqli_real_escape_string($conn,trim($_POST['password']));
if(!empty($user_email)&&!empty($user_password)){
$query="SELECT user_id, username FROM Users WHERE email='$user_email' AND password='$user_password'";
$data=mysqli_query($conn,$query);
echo $user_password;
if(mysqli_num_rows($data)==1){
$row=mysqli_fetch_array($data);
$_SESSION['user_id']=$row['user_id'];
$_SESSION['username']=$row['username'];
$home_url='index.php';
header('Location:'.$home_url);
}else{
echo 'Sorry, you must enter a valid username and password to log in.';
}
}else{
echo 'Sorry, you must enter a valid username and password to log in.';
}
}
}else{
$home_url='index.php';
header('Location:'.$home_url);
}
?>
<html>
<head>
<title>Log In</title>
</head>
<body>
<?php
if(!isset($_SESSION['user_id'])){
?>
<form method = "post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<fieldset>
<legend>Log In</legend>
<label for="useremail">Useremail:</label>
<input type="text" id="useremail" name="useremail"
value="<?php if(!empty($user_useremail)) echo $user_useremail; ?>" />
<br/>
<label for="password">Password:</label>
<input type="password" id="password" name="password"/>
</fieldset>
<input type="submit" value="Log In" name="submit"/>
</form>
<?php
}
?>
</body>
</html>
暂时就搞到这里了。赶紧去上晚自习了。
2017.11.30
好久没更了过来更下(虽然好像没人看
之前搞了一个多月的botzone,进度拖慢了不少,终究还是有条不紊地进行中。现在已经完成了题库啦,公告啦,排行榜啦之类基本的东西。嘛,丑得不行。

各方面没遇到什么技术问题,反正就是搬砖嘛……值得一提的是我采用了Semantic的ui框架,初学者强行搞ui还是有一定难度的,拿个现成的比较好。
但是现在就很纠结了,到底要像其他网站一样搞个顶部菜单呢还是把博客园的手制菜单移过来呢……
(这是hover时的效果。
干活干活
持续更新:从零开始的php学习生活的更多相关文章
- 【持续更新】D3 的学习资料
经常有朋友问哪里有关于 D3 的比较好的学习资料,现整理成此文.以后找到更多更好的,会不断更新本文. 我是在2013年开始接触 D3 的,当时就觉得这个工具很好玩.至今,学习资料整理了不少.如果有朋友 ...
- 值得学习的C/C++开源项目 持续更新
值得学习的C语言开源项目 持续更新 文章目录 值得学习的C语言开源项目 持续更新 - 1. Webbench - 2. Tinyhttpd - 3. cJSON - 4. CMockery - 5. ...
- 关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】
最近一直用ASP.NET MVC 4.0 +LINQ TO SQL来开发设计公司内部多个业务系统网站,在这其中发现了一些问题,也花了不少时间来查找相关资料或请教高人,最终都还算解决了,现在我将这些问题 ...
- (持续更新) C# 面试技术点、常见SQL技术点 和 解决高并发的相关技术
这篇博客 持续更新. 方便小伙伴们学习与面试前的复习
- ASP.NET MVC 5 系列 学习笔记 目录 (持续更新...)
前言: 记得当初培训的时候,学习的还是ASP.NET,现在回想一下,图片水印.统计人数.过滤器....HttpHandler是多么的经典! 不过后来接触到了MVC,便立马爱上了它.Model-View ...
- 【 js 基础 】【 源码学习 】源码设计 (持续更新)
学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析第二部分:undersc ...
- java 学习必备的软件,持续更新中
小编会持续更新在学习Java过程中需要的软件以及各种文件: 话不多说,看行动! 一:JDK (1)JDK1.8(*64): 链接:https://pan.baidu.com/s/1vM0jNXn2CT ...
- 状压dp(状态压缩&&dp结合)学习笔记(持续更新)
嗯,作为一只蒟蒻,今天再次学习了状压dp(学习借鉴的博客) 但是,依旧懵逼·································· 这篇学习笔记是我个人对于状压dp的理解,如果有什么不对的 ...
- python3.4学习笔记(六) 常用快捷键使用技巧,持续更新
python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...
随机推荐
- 【java】获取当前环境属性及编码乱码示例
package 字符编码; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impo ...
- DataBase MongoDB高级知识-易扩展
MongoDB高级知识-易扩展 应用程序数据集的大小正在以不可思议的速度增长.随着可用宽带的增长和存储器价格的下跌,即使是一个小规模的应用程序,需要存储的数据也可能大的惊人,甚至超出了很多数据库的处理 ...
- iOS中self与_的区别
同时我们发现在我们访问我们声明的变量时,会有self. 和 以"_"开头的访问方式,那么这两种方式到底有什么样的区别呢? 我们来一起看一下: @property (retain, ...
- MongoDB入门系列(二):Insert、Update、Delete、Drop
概述 本章节介绍Insert.Update.Delete.Drop操作基本语法. 环境: Version:3.4 insert insert()基本语法如下: db.collection.insert ...
- 创建一个可用的简单的SpringMVC项目,图文并茂
转载麻烦注明下来源:http://www.cnblogs.com/silentdoer/articles/7134332.html,谢谢. 最近在自学SpringMVC,百度了很多资料都是比较老的,而 ...
- listbox控件使用
1. 属性列表: SelectionMode 组件中条目的选择类型,即多选(Multiple).单选(Single) Rows 列表框中显示总共多少行 Sel ...
- Python 项目实践三(Web应用程序)第一篇
一 Djangao入门 当今的网站实际上都是富应用程序(rich application),就像成熟的桌面应用程序一样.Python提供了一组开发Web应用程序的卓越工具.在本章中,你将学习如何使用D ...
- java 多线程,T1 T2 T3 顺序执行
一.程序设计 1.抽象公共类PublicThread,具有先前线程属性previousThread.父类为Thread 2.在PublicThread的run()方法中判断previousThread ...
- calling c++ from golang with swig--windows dll (三)
calling c++ from golang with swig--windows dll 三 使用动态链接库(DLL)主要有两种方式:一种通过链接导入库,在代码中直接调用DLL中的函数:另一种借助 ...
- K:枚举的线程安全性及其序列化问题
枚举是如何保证线程安全的且其在序列化和反序列化的操作中是单例的? 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和class一样,只是一个关 ...