Работа над небольшим школьным проектом с использованием sql
и php
.В приложении у меня есть кнопка Edit
, которая позволяет пользователю обновлять поля doctorFname,doctorLname, idDepartment, and specialty
.Когда пользователь вводит новые данные и нажимает save
, он должен опубликовать в mysql
.Это последний шаг в моем проекте, и я не могу понять, почему он не обновляется.Я могу delete
, а также добавить new
пользователей.Я выложу код Доу ниже.Любая помощь будет принята с благодарностью, так как я всего в одном шаге от завершения.Еще раз спасибо!
Обновление: я включил error reporting
, и это ошибка, которую я получаю.Cannot modify header information - headers already sent by (output started at /Users/moe/Desktop/CRUD/index.php:1) in /Users/moe/Desktop/CRUD/formprocessor.php on line 87
Обновление 2: хорошо, после просмотра моего оператора UPDATE
после того, как пользователь нажал кнопку update
, я забыл добавить '
в оператор sql
.Запустив тот же запрос в sql workbench
и заставив его работать, я попытался проверить, правильно ли я понял.Но затем я получаю сообщение об ошибке ниже Incorrect integer value: '' for column 'idDepartment' at row 1
Обновление 3: я пытался использовать следующее регулярное выражение, чтобы получить integer
значение idDepartment
, поскольку mysql
ожидает int
, новместо этого получает string
.Это не помогло, и я все еще сталкиваюсь с проблемой.$idDepart = preg_replace("/[^0-9,.]/", "", $idDepart);
Doctor Table
Table: Doctor
Columns:
doctorID int(11) AI PK
doctorFName varchar(45)
doctorLname varchar(45)
idDepartment int(11)
specialty varchar(45)
index.php
<code><!doctype html>
<html lang="en">
<head>
<title>Title</title>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
</head>
<body>
<?php require_once 'formprocessor.php';?>
<!-- Based on query type it will use bootstrap alert class -->
<?php
if (isset($_SESSION['message'])): ?>
<div class = "alert alert-<?=$_SESSION['msg_type'] ?>">
<?php
// Based on the message type it will echo it and then unset the session
echo $_SESSION['message'];
unset($_SESSION['message']);
?>
</div>
<!-- End of if statment -->
<?php endif ?>
<div class = "container">
<?php
// Connect to databse
$mysqli = new mysqli('127.0.0.1', 'root', "", 'v2HospitalDB')
or die(mysqli_error($mysqli));
// Will select everthing from Doctor and display on the page
$result = $mysqli->query("SELECT * FROM Doctor") or die($mysqli->error);
?>
<!-- This is the format for the table with the folowing columns -->
<div class="row justify-content-center">
<table class="table">
<thead>
<tr>
<th> Doctor ID </th>
<th> First Name </th>
<th> Last Name</th>
<th> Department ID</th>
<th> Speciality </th>
<th colspan="2"> Action </th>
</tr>
</thead>
<?php
// everything is fetched from db and stored in row
while($row = $result->fetch_assoc()):?>
<!-- Each row will have its repsected column from the database -->
<tr>
<td> <?php echo $row['doctorID']; ?></td>
<td> <?php echo $row['doctorFName']; ?></td>
<td> <?php echo $row['doctorLname']; ?></td>
<td> <?php echo $row['idDepartment']; ?></td>
<td> <?php echo $row['specialty']; ?></td>
<td>
<a href="index.php?edit=<?php echo $row['doctorID']; ?>"
class="btn btn-info">Edit</a>
<a href="formprocessor.php?delete=<?php echo $row['doctorID'];?>"
class="btn btn-danger">Delete</a>
</td>
</tr>
<?php endwhile;
?>
</table>
</div>
<?php
// This function prints the array in a nice format
function pre_r($array) {
echo '<pre>';
print_r($array);
echo '
';}?>
Обновление Сохранить
formprocessor.php
<?php
// starting a session so we can go back to main page
session_start();
// Connect to mysql database
$mysqli = new mysqli('127.0.0.1','root',"",'v2HospitalDB') or die(mysqli_error($mysqli));
// Reset values to empty
$firstname = "";
$lastname = "";
$departID = "";
$special = "";
$update = false;
$id = 0;
// Check if the save button has been pressed
if(isset($_POST['save'])){
// store columns from database
$firstname = $_POST['fname'];
$lastname = $_POST['lname'];
$departID = $_POST['departmentID'];
$special = $_POST['speciality'];
// Insert records into database
$mysqli -> query("INSERT INTO Doctor(doctorFName , doctorLname , idDepartment, specialty)
VALUES('$firstname', '$lastname', '$departID' , '$special')") or
die($mysqli->error);
// will show at top of screen once the record has been saved
$_SESSION['message'] = "You have saved a record into the database";
$_SESSION['msg_type'] = "success";
// redirect back to the index.php after inserting records
header("location: index.php");
}
// This will delete the record from the table based on the id
if(isset($_GET['delete'])){
$id = $_GET['delete'];
$mysqli->query("DELETE FROM Doctor WHERE idDepartment AND doctorID = '$id'") or die($mysqli->error);
// When you delete a record, will show at top of screen
$_SESSION['message'] = "You have saved a deleted a record from the database";
$_SESSION['msg_type'] = "danger";
session_destroy();
// redirect back to the index page
header("location:index.php");
}
// If the edit button is clicked
if(isset($_GET['edit'])){
$update = true;
$id = $_GET['edit'];
// change back to where doctorId and idDepartment
$result = $mysqli->query("SELECT * FROM Doctor WHERE doctorID = '$id'") or die($mysqli->error);
// will fetch all colums in table from the result array
// If the record has been found in the database
if(count($result) == 1){
$row = $result->fetch_array();
$firstname = $row['doctorFName'];
$lastname = $row['doctorLname'];
$idDepart = $row['idDepartment'];
$special = $row['specialty'];
// echo (var_dump($result));
}
// will show at top of page when user updates the table
$_SESSION['message'] = "Record has been selected";
$_SESSION['msg_type'] = "info";
session_destroy();
header('location: index.php');
}
// If user clicks update then will insert values into columns
if(isset($_POST['update'])){
$id = $_POST['id'];
$firstname = $_POST['doctorFName'];
$lastname = $_POST['doctorLname'];
$idDepart = $_POST['idDepartment'];
$special = $_POST['specialty'];
$mysqli->query("INSERT INTO Doctor(doctorFName, doctorLname, idDepartment, specialty) VALUES
('$firstname', '$lastname', '$idDepart', '$special' ");
// will show at top of page when user updates the table
$_SESSION['message'] = "Record has been updated";
$_SESSION['msg_type'] = "warning";
session_destroy();
header('location: index.php');
}