第一题、计算器

预测考题,不一定对她没说详细怎么考,刚说考计算器

预测题目

考试会给一个叫math.php的文件,其中会有如下代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
     <style type="text/css">
        body{
            margin:0px;
            text-align: center;
        }
        #reg{
            width:370px;
            border:1px solid blue;
            line-height:40px;
            margin:0 auto;
            padding-left:100px;
            padding-top:15px;
            padding-bottom:15px;
            text-align:left;
            font-size:14px;
        }
      /* 以下使用的是属性选择器,具体来说是属性值选择器 */
        input[type="submit"]{ padding: 10px 15px; margin: 5px; background: #4CAF50; color: white; border: none; border-radius: 4px; }
    </style>
</head>
<body>
</body>
</html>

解题步骤

操作如下:在<body></body>中间插入

 <form method="post">
        <div id="reg">//计算器页面
            <div>
                数值1:<input type="number" name="num1" placeholder="输入第一个数字" step="any">
            </div>
            <div>
                数值2:<input type="number" name="num2" placeholder="输入第二个数字" step="any">
            </div>
            <div>
                <input type="submit" name="operation" value="+">
                <input type="submit" name="operation" value="-">
                <input type="submit" name="operation" value="*">
                <input type="submit" name="operation" value="/">
            </div>
            <div>//以下是计算器的计算逻辑
                <!-- 注释:?? 仅检查 null,而 ?:(三元运算符)会检查 false、0、' ' 等假值。?? 不会因未定义变量触发 Notice 错误,更安全。 -->
                结果:<input type="text" value="<?php
                    $num1 = isset($_POST['num1']) ? $_POST['num1'] : 0;
                    $num2 = isset($_POST['num2']) ? $_POST['num2'] : 0;
                    $operation = isset($_POST['operation']) ? $_POST['operation'] : '';
                    
                    if (is_numeric($num1) && is_numeric($num2)) {
                        switch ($operation) {
                            case '+':
                                echo $num1 + $num2;
                                break;
                            case '-':
                                echo $num1 - $num2;
                                break;
                            case '*':
                                echo $num1 * $num2;
                                break;
                            case '/':
                                echo $num2 != 0 ? $num1 / $num2 : '除数不能为0';
                                break;
                        }
                    } 
                ?>">
            </div>
        </div>
    </form>

第二题把记录写到文件里,再读出来

注册,注册完后把注册内容写到一个文本文件中,从文本文件中读取出来

考把注册信息往文本文件中写

预测题目

考试会给一个叫registerdata.php的文件,代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
   <?php
 //获取学号
  if($_POST['stuno'])
   {
     $stuno=$_POST['stuno'];
   }
   else{
     $stuno='没有填写' ;
   }
      
   //获取姓名
   if($_POST['stuname'])
   {
       $stuname=$_POST['stuname'];
   }
   else{
       $stuname='没有填写' ;
   }
   
   //获取密码
   if($_POST['pwd'])
   {
       $password=$_POST['pwd'];
   }
   else{
       $password='没有填写' ;
   }
   
   //获取班级
   $classname=$_POST['classname'];
   
  //获取性别
   $sex=$_POST['sex'];
   
  //获取爱好
  if(array_key_exists('hobby',$_POST))
  {
      $hobby=join(',',$_POST['hobby']);
  }else{
      $hobby='没有任何爱好 ';
  }
  
    //获取手机号
  if($_POST['mobile'])
   {
     $mobile=$_POST['mobile'];
   }
   else{
     $mobile='没有填写' ;
   }

     //获取邮箱
   if($_POST['email'])
   {
     $email=$_POST['email'];
   }
   else{
     $email='没有填写' ;
   }

   switch($_FILES['photo']['error'])
  {
      case 0: //成功上传
          $ftypes=['image/gif','image/pjpeg','image/jpeg','image/png'];
          $type=$_FILES['photo']['type'];
      if(in_array($type,$ftypes))  //上传的文件是指定的类型
       {
         $fname=$_FILES['photo']['name'];  //上传的原始文件名
         $tmp=explode('.', $fname);//将文件名以"."分隔成两部分  
         $newfname=$stuno.'.'.$tmp[1];//新的文件名为学号              
         $destination='upload/'.$newfname;
        move_uploaded_file($_FILES['photo']['tmp_name'], $destination);
          }else {$txt='上传文件类型不符合要求';}
          break;
      case 1: //文件大小超过了PHP默认的限制2MB
          $txt='上传文件出错,文件大小超过了限制!';
          break;
      case 4: //没有选择上传文件
          $txt='没有上传照片!';
          break;
  }  
 ?>    

 <h1>注册成功,您的注册信息如下:</h1>
  学号:<?php echo $stuno ?>
  <br>
  姓名:<?php echo $stuname ?>
  <br>
  密码:<?=$password?>
  <br>
  班级:<?=$classname?>
  <br>
  性别:<?=$sex?>
  <br>
  爱好:<?=$hobby?>
  <br>
  手机:<?=$mobile?>
  <br>
  邮箱:<?=$email?>
  <br>
  相片:<?php
if(isset($txt)){
    echo $txt;    //输出错误提示
}
else{
echo "<img src='$destination'  style='width:150px;height:120px;'>"; 
}
?>
</body>
</html>

解题步骤

1.写入

要在“case 4: //没有选择上传文件”模块后,“<h1>注册成功,您的注册信息如下:</h1>”前添加如下写入代码,且“<h1>注册成功,您的注册信息如下:</h1>模块”可无因为它没有作用

// 获取网站根目录路径
$document_root = $_SERVER['DOCUMENT_ROOT'];

// 打开文件用于追加写入
$file = fopen("$document_root/myweb/info.txt", 'a');

// 构建要写入的字符串
$string = "\r\n"."学号:" . $stuno . "\r\n" .//:用英文
          "姓名:" . $stuname . "\r\n" .
          "密码:" . $password . "\r\n" .
          "班级:" . $classname . "\r\n" .
          "性别:" . $sex . "\r\n" .
          "爱好:" . $hobby . "\r\n" .
          "手机:" . $mobile . "\r\n" .
          "邮箱:" . $email . "\r\n" .
          "照片:" . $destination . "\r\n";

// 写入文件
fwrite($file, $string);

// 关闭文件
fclose($file);
?>

2.读取

在页面最后添加如下读取代码

<?php
$file = fopen("$document_root/myweb/info.txt", 'r');
//$filesize = filesize("$document_root/students/info.txt");
//$content = fread($file, $filesize);
//echo nl2br($content);
// 逐行读取文件内容
while (!feof($file)) {
    $str = fgets($file);
    
    // 检查该行是否包含"照片:"信息
    if (strstr($str, '照片:')) {
        // 提取照片路径(从第7个字符开始,到倒数第1个字符结束)
        $path = substr($str, 7, -1);
        // 显示照片路径和图片
        echo "照片: <img src='$path' style='width:150px;height:120px;'>";
    } else { 
        // 对其他行使用 nl2br 保持换行格式
        echo nl2br($str);
    }
}
?>
</body>
</html>

考试可能给注释的三行,不给就全写,写了就改

第三题学生成绩管理系统

第一小题

数据库连接文件conn.php必须得自己会写

<?php
$db=new mysqli('localhost','root','12345678','studentmis');
if($db->connect_errno){
    exit('数据库连接失败!');
}
?>

第二小题

会写页头,页脚,即会包含页面

预测在Index.php补

<?php 
    include  'HeaderNav.html';  
?> 
<?php 
    include  'Footer.html';    
?>

第三小题

数据库要学会设置表关联、参照完整性、会简单的录两条记录等

账号为root,密码为12345678

1.创建数据库

数据库名为studentmis,在“排序规则”下拉列表中选择“utf8_general_ci”,该规则可以很好地支持中英文。

2.1. 在数据库中创建四张数据//考试可能给你给你就忽略这步

包括表class表、student表、course表以及result表;表结构见教材P136所示。

注意:

  • 建表的“存储引擎”使用“InnoDB”
  • 各表的主键建立主索引

2.2.给你数据库的情况下就导入//考试给你的情况下

点击导入,选择好文件后点击执行

3. 创建外键

student表的ClassNo字段参照class表的ClassNo字段;

打开student表,点击结构,选择关联视图,字段选择classNo,表选择class,字段选择classno,点击执行

result表的StudentID字段参照student表的StudentID字段;

打开result表,点击结构,选择关联视图,字段选择studentid,表选择student,字段选择studentid,点击执行;

result表的CourseID字段参照course表的CourseID字段。

打开result表,点击结构,选择关联视图,字段选择coursetid,表选择course,字段选择coursetid,点击执行;

4. 添加表数据

点击插入在空值中输入数据,点击执行

第四小题

用户注册页面的下拉列表、单选、多选

即在register.php页面的班级(会从数据库里面读班级信息填入下拉列表中)、性别、爱好会做,保守一点放了一个普通文本框添加方案(学号)

<div>学号:<input type="text" name="stuno"><span class="error">*</span></div>//普通文本框
<div>//下拉列表
        班级:<select name="classname">
              <?php
              require_once 'conn.php';
              $db->query('SET NAMES UTF8');
              $sql='select * from class';
              if($result=$db->query($sql)){//查询是否执行成功
                while($row=$result->fetch_assoc()){//是否还能从结果集中获取到数据行
                    echo "<option value='".$row['classno']."'>".$row['classname']."</option>";
                }              
              }
              $result->close();
              $db->close();
              ?>
            </select>
    </div>
    <div>//单选
         性别:<input type="radio" name="sex" value="男" >男
             <input type="radio" name="sex" value="女" checked>女
    </div>
    <div> //多选
         爱好:<input type="checkbox" name="hobby[]" value="阅读">阅读
             <input type="checkbox" name="hobby[]" value="运动">运动
             <input type="checkbox" name="hobby[]" value="电影">电影
             <input type="checkbox" name="hobby[]" value="音乐">音乐
    </div>
    <div style="margin-left: 42px;margin-top: -12px;">
             <input type="checkbox" name="hobby[]" value="旅游">旅游
             <input type="checkbox" name="hobby[]" value="上网">上网
    </div>

第五小题

会添加按钮

预测在student.php中添加按钮

    if($result=$db->query($sql)){

        echo "<form action='upddel.php' method='post'>";//添加的必要东西,但是他只说会添加按钮,不知道这个会不会给你

        echo "<input type='submit' name='btndel' value='删除'

              onclick='return confirm(\"确定要删除选中的学生信息吗?\")'>";//添加删除按钮

        echo "<input type='submit' name='btnupdate' value='编辑'>";//添加编辑按钮

        echo "<table class='tb'>

        <tr><th></th><th>学号</th><th>姓名</th><th>班级</th><th>性别</th><th>爱好</th><th>手机</th>//为了实现删除的表态代码和复选框而添加的东西不考

        <th>邮箱</th><th>照片</th></tr>";

        while($row=$result->fetch_assoc()){

            echo "<tr><td><input type='checkbox' name='sel[]' value='".$row['studentid']."'>".

                 "</td><td>".$row['studentid'].///为了实现删除的表态代码和复选框而添加的东西不考

                 "</td><td>".$row['studentname'].

                 "</td><td>".$row['classname'].

                 "</td><td>".$row['sex'].

                 "</td><td>".$row['hobby'].

                 "</td><td>".$row['mobile'].

                 "</td><td>".$row['email'].

                 "</td><td><img src='".$row['photo']."' width='35px'>".

                "</td></tr>";

        }  

        echo "</table>";

        echo "</form>";//添加的必要东西,但是他只说会添加按钮,不知道这个会不会给你

        $result->close();

     }

第六小题

会做update.php页面,由registerdata.php的部分修改而来

操作如下:

1.新建一个update.php页面将代码粘贴进去

要复制的registerdata.php内容如下:

 <?php
// 内容类型声明:Content-type: text/html 部分告知浏览器当前传输的内容是HTML格式,需要以网页形式进行解析和渲染
// 字符编码设置:charset=utf-8 部分将页面字符编码设置为UTF-8,确保中文字符及其他多语言字符能够正确显示而不会出现乱码,需要注意的是,等号两侧不能有空格,否则可能导致编码设置失效

header("Content-type:text/html;charset:UTF-8");//告诉浏览器当前页面使用 UTF-8 编码解析,避免中文字符显示为乱码

require_once 'conn.php';

$db->query('SET NAMES UTF8');//确保 PHP 与数据库之间的数据传输使用 UTF-8 编码,防止从数据库读取的中文内容出现乱码

function checkinput($data){
  $data=trim($data);
  $data=stripslashes($data);
  $data=htmlspecialchars($data);
  return $data;
}

$stuno=checkinput($_POST['stuno']);
if(empty($stuno)){
  echo "<script>alert('学号没有填写');history.go(-1);</script>";
  exit();
}

$sql="select * from student where studentid=$stuno";
$result=$db->query($sql);
if($result->num_rows>0){
  echo "<script>alert('该学号已存在!');history.go(-1);</script>";
  exit();
}

$stuname=checkinput($_POST['stuname']);
if(empty($stuname)){
  echo "<script>alert('姓名没有填写');history.go(-1);</script>";
  exit();
}

$password=checkinput($_POST['pwd']);
if(empty($password)){
  echo "<script>alert('密码没有填写');history.go(-1);</script>";
  exit();
}
   
   //获取班级
   $classname=checkinput($_POST['classname']);
   
  //获取性别
   $sex=checkinput($_POST['sex']);
   
  //获取爱好
  if(array_key_exists('hobby',$_POST))
  {
      $hobby=join(',',$_POST['hobby']);
  }else{
      $hobby='';
  }


  
//     //获取手机号
$mobile=checkinput($_POST['mobile']);

//      //获取邮箱
$email=checkinput($_POST['email']);

   switch($_FILES['photo']['error'])
  {
      case 0: //成功上传
          $ftypes=['image/gif','image/pjpeg','image/jpeg','image/png'];
          $type=$_FILES['photo']['type'];
          if(in_array($type,$ftypes))  //上传的文件是指定的类型
          {
             $fname=$_FILES['photo']['name'];  //上传的原始文件名
             $tmp=explode('.', $fname);//将文件名以"."分隔成两部分,分别为"php","jpg"  
              $newfname=$stuno.'.'.$tmp[1];//新的文件名为学号              
              $destination='upload/'.$newfname;
              move_uploaded_file($_FILES['photo']['tmp_name'], $destination);
          }else
          {echo "<script>alert('上传文件类型不符合要求!');history.go(-1);</script>";
           exit();
        }
          break;
      case 1: //文件大小超过了PHP默认的限制2MB
          echo "<script>alert('上传文件出错,文件大小超过了限制!');history.go(-1);</script>";
          exit();
          break;
      case 4: //没有选择上传文件
          $destination='';
          break;
  }  
  $sql="insert into student values('$stuno','$stuname','$password','$classname','$sex',
  '$hobby','$mobile','$email','$destination')";

  $result=$db->query($sql);
  if($result){
    echo "<script>alert('注册成功');window.location='students.php';</script>";
  }else
  {
    echo "<script>alert('注册失败!');history.go(-1);</script>";
  }
?>

2.删除一些东西

因为不存在学号没填的和重复的情况,所以将如下代码删掉

if(empty($stuno)){
  echo "<script>alert('学号没有填写');history.go(-1);</script>";
  exit();
}

$sql="select * from student where studentid=$stuno";
$result=$db->query($sql);
if($result->num_rows>0){
  echo "<script>alert('该学号已存在!');history.go(-1);</script>";
  exit();
}

因为不存在密码,所以将如下代码删掉

$password=checkinput($_POST['pwd']);
if(empty($password)){
  echo "<script>alert('密码没有填写');history.go(-1);</script>";
  exit();
}

其他不用动

3.对照片字段和最后跳转页面做修改

$destination='';//添加,确定是否动了照片字段

   switch($_FILES['photo']['error'])

  {

      case 0: //成功上传

          $ftypes=['image/gif','image/pjpeg','image/jpeg','image/png'];

          $type=$_FILES['photo']['type'];

          if(in_array($type,$ftypes))  //上传的文件是指定的类型

          {

             $fname=$_FILES['photo']['name'];  //上传的原始文件名

             $tmp=explode('.', $fname);//将文件名以"."分隔成两部分,分别为"php","jpg"  

              $newfname=$stuno.'.'.$tmp[1];//新的文件名为学号              

              $destination='upload/'.$newfname;

              move_uploaded_file($_FILES['photo']['tmp_name'], $destination);

          }else

          {echo "<script>alert('上传文件类型不符合要求!');history.go(-1);</script>";

           exit();

        }

          break;

      case 1: //文件大小超过了PHP默认的限制2MB

          echo "<script>alert('上传文件出错,文件大小超过了限制!');history.go(-1);</script>";

          exit();

          break;

      case 4: //没有选择上传文件

          $destination=' ';

          break;

  }

//classno='classname'修改为这个

$result=$db->query($sql);//跳转页面

  if($result){

    echo "<script>alert('修改成功');window.location='students.php';</script>";//将原“注册成功”替换为修改成功或更新成功,下面修改失败的修改方法同理

  }else

  {

    echo "<script>alert('修改失败!');window.location='students.php';</script>";//不管成功失败都去学生页面看看

  }

?>

注意事项

1.考试文件夹可能如下

2.做哪一题将那一题复制到C:\AppServ\www下,做完后再剪切回去做替换

3.数据库文件导入方法上文已写,接下来说导出方法

点击导出,选择导出方式“快速”,然后点击执行,同理直接替换掉考试文件夹中的数据库