Я пытаюсь создать CRUD-приложение для своего бизнеса, у меня мало знаний PHP. Я следовал руководству, которое оказалось успешным, пока не добрался до части обновления.
<?php
$servername = "localhost";
$username = "root";
$password = "";
$database= "replog_test";
//create connection
$connection = new mysqli($servername, $username, $password, $database);
$id = "";
$service_dept = "";
$po = "";
$customer = "";
$pcs = "";
$equipment = "";
$date_rec = "";
$problem = "";
$warr = "";
$date_ship = "";
$errorMessage = "";
$successMessage = "";
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
//GET method: Show the data of the client
if (!isset($_GET["id"])) {
header("location: /novasvm/index.php");
exit;
}
$id = $_GET["id"];
// read the row of the selected client from the database table
$sql = "SELECT * FROM replog WHERE id=$id";
$result = $connection->query($sql);
$row = $result->fetch_assoc();
if (!$row) {
header("location: /novasvm/index.php");
exit;
}
$service_dept = $row["service_dept"];
$po = $row["po"];
$customer = $row["customer"];
$pcs = $row["pcs"];
$equipment = $row["equipment"];
$date_rec = $row["date_rec"];
$problem = $row["problem"];
$warr = $row["warr"];
$date_ship = $row["date_ship"];
}
else {
// POST method: Update the data of the client
$service_dept = $_POST["service_dept"];
$po = $_POST["po"];
$customer = $_POST["customer"];
$pcs = $_POST["pcs"];
$equipment = $_POST["equipment"];
$date_rec = $_POST["date_rec"];
$problem = $_POST["problem"];
$warr = $_POST["warr"];
$date_ship = $_POST["date_ship"];
do {
if ( empty($service_dept) || empty($po) || empty($customer) || empty($pcs) || empty($equipment) || empty($date_rec) || empty($problem) || empty($warr)) {
$errorMessage = "All fields except DATE SHIPPED are required";
break;
}
$sql = "UPDATE replog " .
"SET service_dept = '$service_dept', po = '$po', customer = '$customer', pcs = '$pcs', equipment = '$equipment', date_rec = '$date_rec', problem = '$problem', warr = '$warr', date_ship = '$date_ship' " .
"WHERE id = '$id'";
$result = $connection->query($sql);
if (!$result) {
$errorMessage = "Invalid Query: " . $connection->error;
break;
}
$successMessage = "Client Updated Correctly";
header("location: /novasvm/general/replog.php");
exit;
} while(false);
}
?>
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<link rel = "stylesheet" href = "../style.css" type = "text/css">
<link rel = "stylesheet" href = "../reset.css" type = "text/css">
<link rel = "preconnect" href = "https://fonts.googleapis.com">
<link rel = "preconnect" href = "https://fonts.gstatic.com" crossorigin>
<link href = "https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel = "stylesheet">
<title>Repair Log</title>
</head>
<body>
<div>
<h2>New Data</h2>
<?php
if ( !empty($errorMessage)) {
echo "
<div>
<strong>$errorMessage</strong>
</div>
";
}
?>
<form method = "post">
<input type = "hidden" name = "id" value = "<?php echo $id; ?>">
<div>
<label>Service Department</label>
<div>
<input type = "text" name = "service_dept" value = "<?php echo $service_dept; ?>">
</div>
</div>
<div>
<label>PO Number</label>
<div>
<input type = "text" name = "po" value = "<?php echo $po; ?>">
</div>
</div>
<div>
<label>Customer</label>
<div>
<input type = "text" name = "customer" value = "<?php echo $customer; ?>">
</div>
</div>
<div>
<label>Pieces</label>
<div>
<select name = "pcs" id = "">
<option value = "" selected = "selected"></option>
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
<option value = "4">4</option>
<option value = "5">5</option>
<option value = "6">6</option>
<option value = "7">7</option>
<option value = "8">8</option>
<option value = "9">9</option>
</select>
</div>
</div>
<div>
<label>Equipment</label>
<div>
<input type = "text" name = "equipment" value = "<?php echo $equipment; ?>">
</div>
</div>
<div>
<label>Date Received</label>
<div>
<input type = "date" name = "date_rec" value = "<?php echo $date_rec; ?>">
</div>
</div>
<div>
<label>Problem / Serial No.</label>
<div>
<input type = "text" name = "problem" value = "<?php echo $problem; ?>">
</div>
</div>
<div>
<label>Warranty</label>
<div>
<select name = "warr" id = "">
<option value = "" selected = "selected"></option>
<option value = "yes">Yes</option>
<option value = "no">No</option>
</select>
</div>
</div>
<div>
<label>Date Shipped</label>
<div>
<input type = "date" name = "date_ship" value = "<?php echo $date_ship; ?>">
</div>
</div>
<?php
if (!empty($successMessage)) {
echo "
<div>
<strong>$successMessage</strong>
</div>
";
}
?>
<div>
<button type = "submit">Submit</button>
</div>
<div>
<a href = "/novasvm/general/replog.php" role = "button">Cancel</a>
</div>
</form>
</div>
</body>
</html>
Как только я отправляю данные, они никогда не обновляются ни на сервере xampp, ни на веб-странице. Оно остается точно таким же.
Ожидаемое обновление информации базы данных работает неправильно.
Срабатывают ли какие-либо сообщения об ошибках? Включены ли на сервере полные отчеты об ошибках и ведение журнала? Во время отладки я настоятельно рекомендую избегать всех перенаправлений, поскольку они могут скрыть сообщения об ошибках. Если что-то не получается, die($errorMessage);. Если что-то получится, die('success');. Как только это будет решено, вы можете удалить die и снова добавить перенаправления.
Вы широко открыты для SQL-инъекций. Поскольку вы используете mysqli, воспользуйтесь преимуществами подготовленных операторов и bind_param. Это позволит решить любые неприятные проблемы с цитированием, которые могут возникнуть.
Спасибо @ChrisHaas, это очень полезная информация. Я буду использовать это в дальнейшем.
Я понимаю @aybnner, потом я исправлю ситуацию, сейчас я просто ищу функциональность. Это приложение также не будет доступно тем, кому не дано прямое разрешение через белый список IP-адресов и защиту входа.
@Jakkber, ты, конечно, вольен поступать так, как хочешь, однако «Я потом что-то исправлю» слишком часто никогда не случается. Это одна из тех проблем, которые я бы действительно рекомендовал изучить сегодня, а не исправлять завтра. Посмотрите ссылки, которые разместил Айнбер, они на самом деле не такие уж и сложные, и, честно говоря, ваш код будет даже лучше читаться, потому что вы не объединяете, не экранируете или что-то в этом роде. Кроме того, фраза «Это приложение также будет недоступно» также известна как «знаменитые последние слова».
@ChrisHaas хаха, достаточно честно! Я доберусь до этого :)






Вы не устанавливаете $id в своей фактической ветке else для оператора UPDATE.... Попробуйте это так:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$database= "replog_test";
//create connection
$connection = new mysqli($servername, $username, $password, $database);
$id = "";
$service_dept = "";
$po = "";
$customer = "";
$pcs = "";
$equipment = "";
$date_rec = "";
$problem = "";
$warr = "";
$date_ship = "";
$errorMessage = "";
$successMessage = "";
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
//GET method: Show the data of the client
if (!isset($_GET["id"])) {
header("location: /novasvm/index.php");
exit;
}
$id = $_GET["id"];
// read the row of the selected client from the database table
$sql = "SELECT * FROM replog WHERE id=$id";
$result = $connection->query($sql);
$row = $result->fetch_assoc();
if (!$row) {
header("location: /novasvm/index.php");
exit;
}
$service_dept = $row["service_dept"];
$po = $row["po"];
$customer = $row["customer"];
$pcs = $row["pcs"];
$equipment = $row["equipment"];
$date_rec = $row["date_rec"];
$problem = $row["problem"];
$warr = $row["warr"];
$date_ship = $row["date_ship"];
}
else {
// POST method: Update the data of the client
$service_dept = $_POST["service_dept"];
$po = $_POST["po"];
$customer = $_POST["customer"];
$pcs = $_POST["pcs"];
$equipment = $_POST["equipment"];
$date_rec = $_POST["date_rec"];
$problem = $_POST["problem"];
$warr = $_POST["warr"];
$date_ship = $_POST["date_ship"];
$id = $_POST["id"]; // <----------
do {
if ( empty($service_dept) || empty($po) || empty($customer) || empty($pcs) || empty($equipment) || empty($date_rec) || empty($problem) || empty($warr)) {
$errorMessage = "All fields except DATE SHIPPED are required";
break;
}
$sql = "UPDATE replog " .
"SET service_dept = '$service_dept', po = '$po', customer = '$customer', pcs = '$pcs', equipment = '$equipment', date_rec = '$date_rec', problem = '$problem', warr = '$warr', date_ship = '$date_ship' " .
"WHERE id = '$id'";
$result = $connection->query($sql);
if (!$result) {
$errorMessage = "Invalid Query: " . $connection->error;
break;
}
$successMessage = "Client Updated Correctly";
header("location: /novasvm/general/replog.php");
exit;
} while(false);
}
?>
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<link rel = "stylesheet" href = "../style.css" type = "text/css">
<link rel = "stylesheet" href = "../reset.css" type = "text/css">
<link rel = "preconnect" href = "https://fonts.googleapis.com">
<link rel = "preconnect" href = "https://fonts.gstatic.com" crossorigin>
<link href = "https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel = "stylesheet">
<title>Repair Log</title>
</head>
<body>
<div>
<h2>New Data</h2>
<?php
if ( !empty($errorMessage)) {
echo "
<div>
<strong>$errorMessage</strong>
</div>
";
}
?>
<form method = "post">
<input type = "hidden" name = "id" value = "<?php echo $id; ?>">
<div>
<label>Service Department</label>
<div>
<input type = "text" name = "service_dept" value = "<?php echo $service_dept; ?>">
</div>
</div>
<div>
<label>PO Number</label>
<div>
<input type = "text" name = "po" value = "<?php echo $po; ?>">
</div>
</div>
<div>
<label>Customer</label>
<div>
<input type = "text" name = "customer" value = "<?php echo $customer; ?>">
</div>
</div>
<div>
<label>Pieces</label>
<div>
<select name = "pcs" id = "">
<option value = "" selected = "selected"></option>
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
<option value = "4">4</option>
<option value = "5">5</option>
<option value = "6">6</option>
<option value = "7">7</option>
<option value = "8">8</option>
<option value = "9">9</option>
</select>
</div>
</div>
<div>
<label>Equipment</label>
<div>
<input type = "text" name = "equipment" value = "<?php echo $equipment; ?>">
</div>
</div>
<div>
<label>Date Received</label>
<div>
<input type = "date" name = "date_rec" value = "<?php echo $date_rec; ?>">
</div>
</div>
<div>
<label>Problem / Serial No.</label>
<div>
<input type = "text" name = "problem" value = "<?php echo $problem; ?>">
</div>
</div>
<div>
<label>Warranty</label>
<div>
<select name = "warr" id = "">
<option value = "" selected = "selected"></option>
<option value = "yes">Yes</option>
<option value = "no">No</option>
</select>
</div>
</div>
<div>
<label>Date Shipped</label>
<div>
<input type = "date" name = "date_ship" value = "<?php echo $date_ship; ?>">
</div>
</div>
<?php
if (!empty($successMessage)) {
echo "
<div>
<strong>$successMessage</strong>
</div>
";
}
?>
<div>
<button type = "submit">Submit</button>
</div>
<div>
<a href = "/novasvm/general/replog.php" role = "button">Cancel</a>
</div>
</form>
</div>
</body>
</html>
Спасибо Спасибо спасибо! Я был на грани перезапуска. Как я уже упоминал выше, я очень новичок в этом и делаю это как своего рода побочный проект, который, надеюсь, поможет моей компании.
Тоже такая глупая ошибка! Я понимаю, что будет полезно изучить основы PHP и SQL, но сейчас мне придется сделать это следующим образом. Мои знания других языков приносят большое преимущество, но до сих пор это было огромной проблемой.
Его следует выполнить один раз, так как он проверяет условие после первого запуска, не так ли?