代码之家  ›  专栏  ›  技术社区  ›  Andre F

无法使用表单在数据库中插入值

  •  0
  • Andre F  · 技术社区  · 6 年前

    我有一个表单,用户可以在其中注册其他帐户。在我更改列的数据类型之前,它工作得很好 date 至数据类型 日期 (我使用的是varchar,所以我将其改为date)。更改数据类型后,注册停止工作。我没有收到任何错误,但当我尝试查看记录时,我看不到新帐户。

    这是我的表格:

    <div class="main">
      <div class="one">
        <div class="register">
          <center><h3>Add Account</h3></center>
          <form name="reg" action="code_exec.php" onsubmit="return validateForm()" method="post">
    		<div>
              <label>ID</label>
              <input type="text" name="id" required>
            </div>
    		<div>
              <label>First Name</label>
              <input type="text" name="firstname" required>
            </div>
    		<div>
              <label>Last Name</label>
              <input type="text" name="lastname" required>
            </div>
            <div>
              <label>Email</label>
              <input type="text" name="email" placeholder="user@teamspan.com" required>
            </div>
            <div>
              <label>Username</label>
              <input type="text" name="username" required>
            </div>
            <div>
              <label>Password</label>
              <input type="password" name="password" required>
            </div>
    		<div>
              <label>Street Address</label>
              <input type="text" name="street" required>
            </div>
    		<div>
              <label>Town/Suburb</label>
              <input type="text" name="town" required>
            </div>
    		<div>
              <label>City</label>
              <input type="text" name="city" required>
            </div>
    		<div>
              <label>Contact</label>
              <input type="text" name="contact" required>
            </div>
    		<div>
              <label>Gender</label>
    			<select name="gender" required>
    				<option disabled selected hidden>Select Gender</option>
    				<option value="Male">Male</option>
    				<option value="Female">Female</option>
    			</select>
            </div>
    		<div>
              <label>User Levels</label>
    			<select name="user_levels" required>
    				<option disabled selected hidden>Select Access Level</option>
    				<option value="0">Employee</option>
    				<option value="1">Administrator</option>
    				<option value="2">Manager</option>
    				<option value="1">HR</option>
    			</select>
            </div>
    		<div>
              <label>Date</label>
              <input type="text" readonly="readonly" name="date" value="<?php echo date("m/j/Y");?>" required>
            </div>
    		<div>
              <label>Sick Leave</label>
              <input type="text" name="sickleave" required>
            </div>
    		<div>
              <label>Vacation Leave</label>
              <input type="text" name="vacationleave" required>
            </div>
    		<div>
              <label>Picture (Link)</label>
              <input type="text" name="picture" value="img/emp/" required>
            </div>
            <div>
              <label></label>
    		  <input type="submit" name="submit" value="Add Account" class="button" style="color: white;" />
    		  <a href="hr_panel.php"><input type="button" value="Back" class="button" style="color: white;" />
            </div>
          </form>
        </div>
      </div>

    这是code\u exec。php

    <?php
    
    	session_start();
    	 
    	include('connection.php');
    
    	$id=$_POST['id']; 
    	$username=$_POST['username'];
    	$firstname=$_POST['firstname'];
    	$lastname=$_POST['lastname'];
    	$email=$_POST['email'];
    	$street=$_POST['street'];
    	$town=$_POST['town'];
    	$city=$_POST['city'];
    	$contact=$_POST['contact'];
    	$gender=$_POST['gender'];
    	$password=$_POST['password'];
    	$user_levels=$_POST['user_levels'];
    	$date=$_POST['date'];
    	$picture=$_POST['picture'];
    	$sickleave=$_POST['sickleave'];
    	$vacationleave=$_POST['vacationleave'];
    	 
    	mysqli_query($bd, "INSERT INTO employee(id, firstname, lastname, username, email, street, town, city, contact, gender, password, user_levels, date, picture, sickleave, vacationleave) 
    				VALUES ('$id', '$firstname', '$lastname', '$username', '$email', '$street', '$town', '$city', '$contact', '$gender', '$password', '$user_levels', '$date', '$picture', '$sickleave', '$vacationleave')");
    	 
    	echo "<script>alert('Successfully Added!'); window.location='register.php'</script>";
    	 
    	mysqli_close($con);
    	
    ?>

    数据库架构:

    DB Schema

    2 回复  |  直到 6 年前
        1
  •  1
  •   Joseph_J    6 年前

    正如其他人所说,您的日期格式可能不正确。您需要考虑针对sql注入保护查询。

    为了修复日期问题,请尝试更换:

    $date=$_POST['date'];
    

    使用:

    $date=date('Y-m-d', strtotime($_POST['date']));
    

    sql的日期格式描述为YYYY-MM-DD,表示四位数的年、两位数的月、两位数的日。

        2
  •  0
  •   Gangai Johann    6 年前

    您需要转换输入的接收日期 date :

    $dt = \DateTime::createFromFormat('m/j/Y', $_POST['date']);
    

    看见 this StackOverflow answer for more informations

    此外,正如@Syscall所说,您还应该注意对SQL注入开放的查询。为了防止出现这种情况,应使用PDO语句,例如:

    $stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
    
    $stmt->execute(array('name' => $name));
    

    示例取自 How can I prevent SQL injection in PHP?