Я работаю над проектом по выпуску счетов-фактур. У меня есть база данных, содержащая таблицу с услугами и клиентами. Я пытаюсь извлечь значение из select called selectService и добавить его в массив. Проблема в том, что при каждом новом выборе переменные переписываются. Мне нужно это, чтобы добавить несколько счетов-фактур.
<div class="client-select">
<form method='post' action=''>
<select name='selectClient'>
<?php
$query = "select company_name from clients";
if ($result = $mysqli->query($query)) {
while ($row = $result->fetch_assoc()) {
?>
<option value="<?php printf ("%s", $row["company_name"]); ?>">
<?php printf ("%s", $row["company_name"]); ?>
</option>
<?php
}
$result->free();
}
?>
</select>
<button type='submit' name='button1'>Załaduj fakturę</button>
</form>
</div>
<?php function createForm($name='',$nip='', $address='', $error='') { ?>
<h2>Dane klienta:</h2>
<div class='client-data'>
<label>Nazwa firmy:</label><input type="text" name="company_name" value="<?php echo $name; ?>" placeholder='NAZWA FIRMY'/>
...
</div>
<?php }
function createCompany() {
include('company-data.php'); ?>
<h2>Dane wystawiającego:</h2>
<div class='company-data'>
<label>Nazwa firmy:</label><input type="text" name="my_company_name" value="<?php echo $comapny_name; ?>" placeholder='NAZWA FIRMY'/>
...
</div>
<?php }
function createPayment() {
include('company-data.php'); ?>
<h2>Dane do płatności:</h2>
<div class='payment-data'>
<label>Data wydania:</label><input type="date" name="issue_date" value="<?php echo $issue_date; ?>" placeholder='DATA WYDANIA'/>
...
</div>
<div class='bank-data'>
<label>Nr konta:</label><input type="text" name="account_number" value="<?php echo $account_number; ?>" placeholder='NR KONTA' size='30'/>
...
</div>
<?php }
function serviceSelect() {
include('db_connect.php'); ?>
<div class="service-select">
<form method='post' action=''>
<select name='selectService'>
<?php
$query = "select service_name from service";
if ($result = $mysqli->query($query)) {
while ($row = $result->fetch_assoc()) {
?>
<option value="<?php printf ("%s", $row["service_name"]); ?>">
<?php printf ("%s", $row["service_name"]); ?>
</option>
<?php
}
$result->free();
}
?>
</select>
<button type='submit' name='button2'>Dodaj usługę</button>
</form>
</div>
<?php }
function serviceForm($service_name='',$quantity='', $unit='', $net_price='', $net_value='', $vat_rate='', $amount_vat='', $gross_value='', $error='') { ?>
<div class='service-data'>
<label>Nazwa usługi:</label><input type="text" name="service_name" value="<?php echo $service_name; ?>" placeholder='NAZWA USŁUGI'/>
...
</div>
<?php } ?>
if(isset($_POST['button1'])) {
$client = $_POST['selectClient'];
if($stmt = $mysqli->prepare("SELECT company_name,nip,address FROM clients WHERE company_name='$client'")){
$stmt->execute();
$stmt->bind_result($name,$nip,$address);
$stmt->fetch();
createForm($name,$nip,$address,NULL);
$stmt->close();
} else {
echo "Błąd zapytania";
}
createCompany();
createPayment();
serviceSelect();
};
if(isset($_POST['button2'])) {
createCompany();
createPayment();
serviceSelect();
$service = $_POST['selectService'];
if($stmt = $mysqli->prepare("SELECT service_name,quantity,unit,net_price,net_value,vat_rate,amount_vat,gross_value FROM service WHERE service_name='$service'")){
$stmt->execute();
$stmt->bind_result($service_name,$quantity,$unit,$net_price,$net_value,$vat_rate,$amount_vat,$gross_value);
$stmt->fetch();
serviceForm($service_name,$quantity,$unit,$net_price,$net_value,$vat_rate,$amount_vat,$gross_value,NULL);
$stmt->close();
array_push($_SESSION['array'], $service);
} else {
echo "Błąd zapytania";
}
};
$mysqli->close();
Если вы нажмете кнопку 2, функция для создания клиентской формы исчезнет. Я, вероятно, должен использовать другой способ создания форм, но я понятия не имею. Я также рассчитываю на решение проблемы добавления нескольких счетов в счет-фактуру.
Если вы говорите об этой строке:
while ($row = $result->fetch_assoc()) {
Вы можете использовать данные несколько раз, сохранив его в массиве как новую строку массива:
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
//...
}
И позже используйте его в цикле:
foreach($rows as $row) {
//...
}
$_SESSION['array'][] = $service;