Я делаю проект на основе php. И я хочу добавить данные в базу данных. Я сделал это с помощью php, PDO. И я создал код с ООС. Но на главной HTML-странице есть часть if else. В этой части работает другая часть. Но я даже не нажал кнопку вставки. Когда страница загружается, выполняется другая часть. Я посмотрел видео, и этот код работает отлично. Вот код..
Insert.php - геттеры, сеттеры, SQL-запрос и т. д.
class Stock
{
protected $ItemNo;
protected $ItemName;
protected $brand;
protected $qty;
protected $Description;
protected $ItemDate;
protected $SupplierName;
protected $SupplierMail;
private $tableName = 'StockDetails';
private $dbconn;
function setItemNo($ItemNo) { $this->ItemNo = $ItemNo; }
function getItemNo() { return $this->ItemNo; }
function setItemName($ItemName) { $this->ItemName = $ItemName; }
function getItemName() { return $this->ItemName; }
function setBrand($brand) { $this->brand = $brand; }
function getBrand() { return $this->brand; }
function setQty($qty) { $this->qty = $qty; }
function getQty() { return $this->qty; }
function setDescription($Description) { $this->Description = $Description; }
function getDescription() { return $this->Description; }
function setItemDate($ItemDate) { $this->ItemDate = $ItemDate; }
function getItemDate() { return $this->ItemDate; }
function setSupplierName($SupplierName) { $this->SupplierName = $SupplierName; }
function getSupplierName() { return $this->SupplierName; }
function setSupplierMail($SupplierMail) { $this->SupplierMail = $SupplierMail; }
function getSupplierMail() { return $this->SupplierMail; }
public function __construct()
{
require_once ('Database.php');
$db = new Database();
$this->dbconn = $db->connect();
}
public function insert(){
$sql = "INSERT INTO $this->tableName VALUES (:ItemNo, :ItemName, :brand, :qty, :Description, :ItemDate, :SupplierName, :SupplierMail)";
$stmt = $this->dbconn->prepare($sql);
$stmt->bindParam(':ItemNo', $this->ItemNo);
$stmt->bindParam(':ItemName', $this->ItemName);
$stmt->bindParam(':brand', $this->brand);
$stmt->bindParam(':qty', $this->qty);
$stmt->bindParam(':Description', $this->Description);
$stmt->bindParam(':ItemDate', $this->ItemDate);
$stmt->bindParam(':SupplierName', $this->SupplierName);
$stmt->bindParam(':SupplierMail', $this->SupplierMail);
if ($stmt->execute()){
return true;
}else{
return false;
}}}
?>
Action.php — действие формы на AddItem.php
require_once ('Insert.php');
class action{
function __construct(){
switch ($_POST['submit']) {
case 'insert':
$obInsert = new Stock;
$obInsert->setItemNo($_POST['ItemNo']);
$obInsert->setItemName($_POST['ItemName']);
$obInsert->setBrand($_POST['brand']);
$obInsert->setQty($_POST['qty']);
$obInsert->setDescription($_POST['Description']);
$obInsert->setItemDate(date('Y-m-d H:i:s'));
$obInsert->setSupplierName($_POST['SupplierName']);
$obInsert->setSupplierMail($_POST['SupplierMail']);
if ($obInsert->insert()) {
header('location: AddItem.php?insert=1');
} else{
header('location: AddItem.php?insert=0');
}
break;
default:
header('location: AddItem.php');
break;
}
}
}
if (isset($_POST['submit'])){
$object = new action;
}
AddItem.php
Чтобы получить бренд и ItemName из базы данных. Бренд меняется в зависимости от ItemName.
<?php
require_once ('GetBrand.php');
$ItemName = LoadItemName();
?>
$(document).ready(function(){
$("#ItemName").change(function(){
var aid = $("#ItemName").val();
$.ajax({
url: 'GetBrand.php',
method: 'post',
data: 'aid=' + aid
}).done(function(brand){
console.info(brand);
brand = JSON.parse(brand);
$('#brand').empty();
brand.forEach(function(bnamee){
$('#brand').append('<option>' + bnamee.brand + '</option>')
})
})
})
})
Форма
<form name = "form0" method = "post" action = "Action.php">
<div class = "form-group">
<label for = "text">Item No</label>
<input type = "text" name = "ItemNo" id = "ItemNo" placeholder = "Item No" required>
</div>
<form name = "form1" action = "AddItem.php" method = "post">
<div class = "form-group">
<label for = "text">Item Name</label>
<table>
<tr>
<td><select name = "ItemName" id = "ItemName" required>
<option value = "" disabled = "" selected>Select Name</option>
<?php foreach($ItemName as $iname)
echo "<option id='".$iname['ItemNo']."' value='".$iname['ItemNo']."'>".$iname['ItemName']."</option>";
?>
</select></td>
<td><label for = "text">Add Item Name : </label></td>
<td><input type = "text" name = "name" id = "name"> </td>
<td><button>Add</button></td>
</tr>
</table>
</div>
<div class = "form-group">
<label for = "text">Brand Name</label>
<table>
<tr>
<td><select name = "brand" id = "brand" required>
<option value = "">Select Brand</option>
</select></td>
<td<label for = "text">Add Brand : </label></td>
<td><input type = "text" name = "Bname" id = "Bname" class = "form-control" > </td>
<td><button>Add</button></td>
</tr>
</table>
</div>
</form>
<div class = "form-group">
<label for = "text">Quantity</label>
<input type = "text" name = "qty" id = "qty" placeholder = "Quantity" required>
</div>
<div class = "form-group">
<label for = "text">Item Description</label>
<input type = "text" name = "Description" id = "Description" placeholder = "Description" required>
</div>
<div class = "form-group">
<label for = "text">Date</label>
<input type = "date" name = "ItemDate" id = "ItemDate" required>
</div>
<div class = "form-group">
<label for = "text">Supplier Name</label>
<input type = "text" name = "SupplierName" id = "SupplierName" placeholder = "Supplier Name" required>
</div>
<div class = "form-group">
<label for = "text">Supplier Mail</label>
<input type = "text" name = "SupplierMail" id = "SupplierMail" placeholder = "Supplier Mail" required>
</div><br/>
<div class = "form-group">
<button id = "submit" name = "submit" value = "insert">Insert</button>
<?php
if (isset($_GET['insert']) && ($_GET['insert'] == 1)){
echo "Inserted Successfully ";
}else // This else part is running when the page is loading
echo "Ooops..! Something went wrong.";
}
?>
</div>
</form>
Как говорит @ZainFarooq, пожалуйста, смотрите здесь
Хорошо, я отредактирую это
@GaganiSenarathne, что именно ты хочешь здесь сделать? этот код беспорядочный и слишком много. Вы сделали базовую отладку? какие-либо ошибки?
На самом деле я понятия не имею, как это сказать. Я новичок в php. И нет, я не занимался отладкой. Я пытался сказать, что в моем коде есть проблема, и я не знаю, как ее решить. И это заняло у меня 3 дня.. Но это не решило. Дело в том, что есть еще часть (я тоже это прокомментировал), когда AddItem.php запускает эту часть else.
Итак, если вы не знаете, почему этот код не работает должным образом, и вы не можете сказать, что точно должен делать этот код, откуда нам знать?






<?php
if (isset($_GET['insert']) && ($_GET['insert'] == 1)){
echo "Inserted Successfully ";
}else // This else part is running when the page is loading
echo "Ooops..! Something went wrong.";
}
?>
вы удивлены, что это работает?
Здесь вы сказали, что если есть параметр $_GET, называемый вставкой, и он равен 1, то эхо "вставлено..." в любой другой ситуации, которая может существовать, эхо "упс..."
Php не может естественным образом определить, является ли это начальной загрузкой страницы, перенаправлением, нажатием кнопки или вашими мыслями. Если вы хотите, чтобы это запускалось только в том случае, если была нажата кнопка, вам нужно добавить некоторые дополнительные проверки всего этого, например
if (isset($_POST['submit'])) {
///add in your checks to
}
или, возможно, более подходящим для вас будет
if (isset($_GET['insert']) {
if ($_GET['insert'] == 1)){
echo "Inserted Successfully ";
} else {// you're missing a brace here
echo "Ooops..! Something went wrong.";
}
}
дело в том, что ваш код всегда будет работать, независимо от того, в данный момент, потому что это if/else, то есть сделай это или сделай это, но вы хотите сказать, что iф а - делайте б или с, иначе ничего не делать. Я думаю, вам нужно попытаться понять, как именно работают условные выражения.
Пожалуйста, добавьте минимальный код