Кнопка Изменить, чтобы открыть новое окно, чтобы разрешить редактирование и обновление Sql Server с помощью PHP-кода - PullRequest
0 голосов
/ 12 июня 2018

Все еще изучаю PHP, так что это может быть таким же, как у других, но с проблемами.Я хочу нажать кнопку «Редактировать» на предыдущем экране и открыть окно «Обновить запись» (ниже), когда откроется это окно, в нем будут выбраны предыдущие критерии, но пользователь сможет изменять записи.У меня есть несколько выпадающих списков на экране обновления, так как отделы и вещи извлекаются из других таблиц SQL Server.Это не позволяет мне поместить их все в выпадающий список, чтобы выбрать новые критерии, если это необходимо для записи обновления.

Я просто неуверен в коде, который мне может понадобиться использовать, так как страница начальной записи настроена с выпадающими списками с сервера sql в коде php, и это работает.Не уверен, почему это не будет тянуть информацию с экрана просмотра, когда выбрано редактирование, чтобы узнать, какая транзакция и критерии уже выбраны.

<?php
require('dbcon.php');
include("header.php");
$transaction_id = $_REQUEST['transaction_id'];

$sql = "SELECT * FROM [Transaction]where 
transaction_id='" . $transaction_id . "'";
$query = sqlsrv_query($conn, $sql);
$query_display = sqlsrv_query($conn, $sql);
$row = sqlsrv_fetch_array($query);
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Update Transaction</title>
        <link rel="stylesheet" href="css/style.css" />
    </head>
    <body>
        <div class="form">
            <h1>Update Transaction</h1>
            <?php
            $status = "";
            if (isset($_POST['new']) && $_POST['new'] == 1) {
                $transaction_id = $_REQUEST['transaction_id'];
                $fund = $_REQUEST['fund'];
                $department = $_REQUEST['department'];
                $code_name = $_REQUEST['code_name'];
                $budget_year = $_REQUEST['budget_year'];
                $entry_date = $_REQUEST['entry_date'];
                $project_name = $_REQUEST['project_name'];
                $item_desc = $_REQUEST['item_desc'];
                $amount = $_REQUEST['amount'];
                $detail = $_REQUEST['detail'];
                $PO = $_REQUEST['PO'];
                $modified = $_REQUEST['modified'];

                $update = "update [Transaction] set 
    fund='" . $fund . "',
    department='" . $department . "',
    code_name='" . $code_name . "',
    budget_year='" . $budget_year . "',
    entry_date='" . $entry_date . "',
    project_name='" . $project_name . "',
    item_desc='" . $item_desc . "',
    amount='" . $amount . "',
    detail='" . $detail . "',
    PO='" . $PO . "'        

    where transaction_id='" . $transaction_id . "'";
                sqlsrv_query($conn, $sql);
                $status = "Record Updated Successfully. </br></br>
    <a href='transactions.php'>View Updated Record</a>";
                echo '<p style="color:#FF0000;">' . $status . '</p>';
            } else {
                ?>
                <div>
                    <form name="form" method="post" action=""> 
                        <input type="hidden" name="new" value="1" />
                        <input name="transaction_id" type="hidden" value="<?php echo $row['transaction_id']; ?>" />

                        <p>Fund:
                            <?php
                            echo "<select name= 'fund' class='form-control selectpicker' onChange='getState(this.value)' Required>";

                            $sql = "SELECT * FROM  Funding";
                            $query = sqlsrv_query($conn, $sql);
                            $query_display = sqlsrv_query($conn, $sql);

                            while ($row = sqlsrv_fetch_array($query_display, SQLSRV_FETCH_ASSOC)) {
                                if ($row['fund'] == "Operational") {
                                    $selected = ' selected="selected"';
                                } else {
                                    $selected = "";
                                }
                                echo '<option value=" ' . $row['fund'] . '"' . (($row['fund'] == "Operational") ? ' selected="selected"' : "") . '>' . $row['fund'] . '</option>';
                                echo '<option value= " ' . $row['fund'] . ' ">' . $row['fund'] . '</option>';

                                continue;
                            }
                            ?>
                        </p>

                        <p>Department: 

                            <?php
                            echo "<select name= 'department' class='form-control selectpicker' onChange='getState(this.value)' Required>";

                            $sql = "SELECT * FROM Department";
                            $query = sqlsrv_query($conn, $sql);
                            $query_display = sqlsrv_query($conn, $sql);

                            while ($row = sqlsrv_fetch_array($query_display, SQLSRV_FETCH_ASSOC)) {
                                echo "<option selected='selected' value='" . $row['department'] . "'>" . $row['department'] . '</option>';
                                continue;
                            }

                            echo "<option value='" . $row['department'] . "'>" . $row['department'] . '</option>';
                            ?>

                        </p>


                        <p>Object Code:
                            <?php
                            echo "<select name= 'code_name' class='form-control selectpicker' onChange='getState(this.value)' Required>";
                            echo '<option value="$code_name">' . '--Select Object Code' . '</option>';
                            $sql = "SELECT code_name FROM Object_Code";
                            $query = sqlsrv_query($conn, $sql);
                            $query_display = sqlsrv_query($conn, $sql);
                            while ($row = sqlsrv_fetch_array($query_display, SQLSRV_FETCH_ASSOC)) {
                                echo "<option selected='selected' value='" . $row['code_name'] . "'>" . $row['code_name'] . '</option>';
                                continue;
                            }

                            echo "<option value='" . $row['code_name'] . "'>" . $row['code_name'] . '</option>';
                            ?>
                        </p>

                        <p>Budget Year:
                            <select name= 'budget_year' class='form-control selectpicker' onChange='getState(this.value)' Required>
                                <option selected="selected" value="2018-2019">2018-2019</option>
                                <option value="2017-2018">2017-2018</option>
                                <option value="2019-2020">2019-2020</option>
                                <option value="2020-2021">2020-2021</option>
                                <option value="2021-2022">2021-2022</option>
                                <option value="2022-2023">2022-2023</option>
                                <option value="2023-2024">2023-2024</option>
                                <option value="2024-2025">2024-2025</option>
                                <option value="2025-2026">2025-2026</option>
                                <option value="2026-2027">2026-2027</option>
                                <option value="2027-2028">2027-2028</option>
                                <option value="2028-2029">2028-2029</option>
                                <option value="2029-2030">2029-2030</option>
                            </select>
                        </p>

                        <p>Transaction Entry Date:
                            <input type="date" name="entry_date" />
                        </p>


                        <p>Project:
                            <?php
                            echo "<select name= 'project_name' class='form-control selectpicker' onChange='getState(this.value)' Required>";

                            $sql = "SELECT project_name FROM Project";
                            $query = sqlsrv_query($conn, $sql);
                            $query_display = sqlsrv_query($conn, $sql);
                            while ($row = sqlsrv_fetch_array($query_display, SQLSRV_FETCH_ASSOC)) {
                                echo '<option value=" ' . $row['project_name'] . ' ">' . $row['project_name'] . '</option>';
                                continue;
                            }
                            ?>
                        </p>


                        <p>Description:
                            <input type="text" name="item_desc">
                        </p>


                        <p>Amount:
                            <input type="number" name="amount" min="0" max="9999999" step="0.01" size ="7" />
                        </p>


                        <p>Detail:
                        <td><textarea name="detail"></textarea>
                            </p>

                            <p>PO:
                                <input type="text" name="PO" />
                            </p>


                            <p>
                                <input name="submit" type="submit" value="Update" />
                            </p>
                    </form>
                <?php } ?>
            </div>
        </div>
    </body>
</html>

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Я бы попробовал что-то в этом духе, я не привел полный пример, потому что у меня действительно нет времени, но вы должны получить достаточно идей для завершения остальной части кода.

<?php
require('dbcon.php');
include("header.php");
$transaction_id = $_GET['transaction_id'];

$stm = $pdo->prepare("SELECT * FROM [Transaction] WHERE transaction_id = ?");
$stm->execute(array($transaction_id));
$transaction = $stmt->fetch(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Update Transaction</title>
        <link rel="stylesheet" href="css/style.css" />
    </head>
    <body>
        <div class="form">
            <h1>Update Transaction</h1>
            <?php
            $status = "";
            if (isset($_POST['update']) && $_POST['update'] == 1) {
                $transaction_id = $_POST['transaction_id'];
                $fund = $_POST['fund'];
                $department = $_POST['department'];
                $code_name = $_POST['code_name'];
                $budget_year = $_POST['budget_year'];
                $entry_date = $_POST['entry_date'];
                $project_name = $_POST['project_name'];
                $item_desc = $_POST['item_desc'];
                $amount = $_POST['amount'];
                $detail = $_POST['detail'];
                $PO = $_POST['PO'];
                $modified = $_POST['modified'];

                $stm = $pdo->prepare("UPDATE [Transaction] SET fund = ? , department = ? , code_name = ? , budget_year = ? , entry_date = ? , project_name = ? , item_desc = ? , amount = ? , detail = ? , PO = ?");
                $res = $stm->execute(array($fund,$department,$code_name,$budget_year,$entry_date,$project_name,$item_desc,$amount,$detail,$PO));
                if($res){
                    $status = "Record Updated Successfully. </br></br>
    <a href='transactions.php'>View Updated Record</a>";
                }else{
                    $status = "Record Update Failed.";
                }
                echo '<p style="color:#FF0000;">' . $status . '</p>';
            } else {
            ?>
            <div>
                <form name="form" method="post" action=""> 
                    <input type="hidden" name="update" value="1" />
                    <input name="transaction_id" type="hidden" value="<?php echo $transaction['transaction_id']; ?>" />

                    <p>Fund:
                        <select name= 'fund' class='form-control selectpicker' onChange='getState(this.value)' Required>
                            <?php
                $stm = $pdo->prepare("SELECT * FROM Funding");
                $stm->execute();
                $funding = $stmt->fetchAll();

                foreach($funding as $row)) {
                    $fund = $row['fund'];
                    if ($transaction['fund'] == $fund) {
                        $selected = 'selected="selected"';
                    } else {
                        $selected = "";
                    }
                    echo "<option value=\"$fund\" $selected>$fund</option>";
                }
                            ?>
                        </select>
                    </p>

                    <p>Department: 
                        <select name= 'department' class='form-control selectpicker' onChange='getState(this.value)' Required>
                            <?php
                $stm = $pdo->prepare("SELECT * FROM Department");
                $stm->execute();
                $department = $stmt->fetchAll();
                foreach($department as $row) {
                    $department = $row['department'];
                    if ($transaction['department'] == $department) {
                        $selected = 'selected="selected"';
                    } else {
                        $selected = "";
                    }
                    echo "<option value=\"$department\" $selected>$department</option>";
                }
                            ?>
                        </select>
                    </p>

Итак, прежде всего используйте подготовленные операторы , в вашем старом коде у вас есть это:

$transaction_id = $_REQUEST['transaction_id'];

$sql = "SELECT * FROM [Transaction]where 
transaction_id='" . $transaction_id . "'";

Что если значение $transaction_id было 1; DROP TABLE Transactions;?Строка запроса SQL, которую вы затем отправляете на свой сервер, будет выглядеть следующим образом:

SELECT * FROM [Transaction] WHERE transaction_id = 1; DROP TABLE Transactions;

И тогда вы потеряете все свои данные, я взял этот базовый пример из bobby-tables.com

Я бы порекомендовал использовать от PDO до prepare и execute ваших запросов в PHP, я дал вам краткое представление о синтаксисе в моем примере кода выше.

Теперь, переходя от этого, в вашем старом коде было несколько вещей, которые не имели особого смысла, я постараюсь назвать как можно больше;

  1. Вы сохраняете свой запрос на обновление в переменной с именем $update, затем выполняете запрос, используя переменную с именем $sql

    $update = "update [Transaction] set 
    fund='" . $fund . "',
    department='" . $department . "',
    code_name='" . $code_name . "',
    budget_year='" . $budget_year . "',
    entry_date='" . $entry_date . "',
    project_name='" . $project_name . "',
    item_desc='" . $item_desc . "',
    amount='" . $amount . "',
    detail='" . $detail . "',
    PO='" . $PO . "'        
    
    where transaction_id='" . $transaction_id . "'";
                sqlsrv_query($conn, $sql);
    
  2. Первоначально транзакция получена изDB в начале сценария и сохранить строку в переменной с именем $row, а затем в сценарии выполнить много запросов для получения информации, скажем, «Финансирование», и все результаты сохраняются в переменной с именем $row, перезаписываяинформация о транзакции.Просто будьте более точны при именовании ваших переменных, это облегчит чтение кода и предотвратит ошибки, подобные этой.

  3. В циклах select вы дважды используете echo?а также тестирование, чтобы увидеть, если $row['fund'] == 'Operational' дважды?

В заключение я кратко объясню свой код, чтобы вы могли закончить остальное.

Сначала мыполучить идентификатор транзакции из запроса $_GET, мы используем его, чтобы получить правильную строку из базы данных и сохранить результат в имени ассоциативного массива $transaction, чтобы позже в коде всякий раз, когда нам нужна информация о существующей транзакциимы используем эту переменную.

Оператор обновления, который я только что изменил на подготовленный оператор, и добавил еще одно для отображения, если запрос не удался.

Я добавил закрывающий тег select, так кактвой пропал.И для финансирования, и для отдела мы делаем одно и то же, готовим отчет, извлекаем все результаты в виде массива (с соответствующим названием) и затем через них foreach.На каждой итерации foreach мы сравниваем значение $row с соответствующим значением $transaction (например, $transaction['fund']==$row['fund']) и, если они совпадают, выбираем его!Если они не совпадают, тогда переменная $selected устанавливается пустой и, таким образом, не влияет на option.

Что ж, этот ответ оказался длиннее, чем я ожидал, возможно, пропустил много вещей, но если у вас есть какие-либо вопросы, оставьте их ниже!

0 голосов
/ 15 июня 2018
<?php
require('dbcon.php');
include("header.php");
$transaction_id = $_GET['edit'];


$conn = sqlsrv_connect( $dbServer, $connectionInfo);


$sql = ("SELECT * FROM [Transaction] WHERE transaction_id = ?");
$parameters = array($transaction_id);
$MainQuery = sqlsrv_query($conn,$sql,$parameters);
/*if (!sqlsrv_query($conn, $sql)) {
   die('An error has occurred. '.print_r(sqlsrv_errors()));
} else {
 echo print_r MainQuery[0];
}*/

print_r($MainQuery[0]);



while($budget2=sqlsrv_fetch_array($MainQuery,SQLSRV_FETCH_ASSOC))
{
$ID =$budget2['transaction_id'];
$FUND =$budget2['fund'];
$DEPT =$budget2['department'];
$CODE =$budget2['code_name'];
$YEAR =$budget2['budget_year'];
$DATE =$budget2['entry_date'];
$PROJECT =$budget2['project_name'];
$DESC =$budget2['item_desc'];
$AMT =$budget2['amount'];
$DETAIL =$budget2['detail'];
$PO_NUM =$budget2['PO'];
}

?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Update Transaction</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div class="form">
    <h1>Update Transaction</h1>
    <?php
    $status = "";
    if(isset($_POST['update']) && $_POST['update']==1)
    {
        $transaction_id = $_POST['transaction_id'];
        $fund = $_POST['fund'];
        $department = $_POST['department'];
        $code_name = $_POST['code_name'];
        $budget_year = $_POST['budget_year'];
        $entry_date = $_POST['entry_date'];
        $project_name = $_POST['project_name'];
        $item_desc = $_POST['item_desc'];
        $amount = $_POST['amount'];
        $detail = $_POST['detail'];
        $PO = $_POST['PO'];


         $stm = $pdo->prepare("UPDATE [Transaction] SET fund = ? , department = ? , code_name = ? , budget_year = ? , entry_date = ? , project_name = ? , item_desc = ? , amount = ? , detail = ? , PO = ?");

         $res = $stm->execute(array($fund,$department,$code_name,$budget_year,$entry_date,$project_name,$item_desc,$amount,$detail,$PO));

         if($res){
                $status = "Record Updated Successfully. </br></br>
        <a href='transactions.php'>View Updated Record</a>";
            }else{
                $status = "Record Update Failed.";
            }
            echo '<p style="color:#FF0000;">' . $status . '</p>';
        } else {
        ?> 
    <div>


        <form name="form" method="post" action=""> 

        <input type="hidden" name="update" value="1" />
        <input name="transaction_id" type="hidden" value="<?php echo $transaction_id;?>" />

        <p>Fund:
        <?php
            echo "<select name= 'fund' class='form-control selectpicker' onChange='getState(this.value)' Required>";

            $sql = "SELECT * FROM  Funding";
            $query_fund = sqlsrv_query($conn,$sql);

            while($row=sqlsrv_fetch_array($query_fund,SQLSRV_FETCH_ASSOC))
            {
                echo $row['fund'].'=='.$FUND;
                echo '<option value=" ' . $row['fund']. '"' . ((trim($row['fund']) == trim($FUND)) ? ' selected="selected"' : "").'>'.$row['fund']. '</option>';

            //continue;
            }


        ?>
        </select>
        </p>

        <p>Department: 

    <?php

            echo "<select name= 'department' class='form-control selectpicker' onChange='getState(this.value)' Required>";

            $sql = "SELECT department FROM Department";
            $query_dept = sqlsrv_query($conn,$sql);

            while($row=sqlsrv_fetch_array($query_dept,SQLSRV_FETCH_ASSOC))
            {

                echo '<option value="' . $row['department']. '"';
                if (trim($row['department']) == trim($DEPT)) {
                    echo " selected";
                }
                echo '>'.$row['department'] . '</option>' . "\n";

            }
    ?>
            </select>
        </p>


        <p>Object Code:
            <?php
            echo "<select name= 'code_name' class='form-control selectpicker' onChange='getState(this.value)' Required>";
            echo '<option value="$code_name">'.'--Select Object Code'.'</option>';
            $sql = "SELECT code_name FROM Object_Code";
            $query_code = sqlsrv_query($conn,$sql);

            while($row=sqlsrv_fetch_array($query_code,SQLSRV_FETCH_ASSOC))
            {
            echo '<option value=" ' . $row['code_name']. '"' . ((trim($row['code_name']) == trim($CODE)) ? ' selected="selected"' : "").'>'.$row['code_name']. '</option>';
            }
            ?>
            </select>
        </p>
0 голосов
/ 12 июня 2018

Исходная запись Кнопка редактирования Как только кнопка редактирования открывается, я хочу, чтобы она открыла окно, похожее на исходную страницу ввода, чтобы я могла выбрать другой отдел.или другой раскрывающийся список и обновите таблицу транзакций, где находится кнопка «Изменить».

...