PHP JQuery форма не вставляется в SQL База данных сервера - PullRequest
0 голосов
/ 09 марта 2020

Когда я нажимаю сохранить, он просто обновляет страницу с другим добавленным URL. Я не уверен, что проблема связана с моим запросом или он не отправляет данные формы?

require_once ('connectionstring/connectionstring.php');
$conn = SQLServerConnection();

if(isset($_POST['Save'])){

    $username = $_POST['username'];
    $password = $_POST['password'];
    $comments = $_POST['comments'];
    $loc_id = "SELECT loc_id FROM <table> WHERE loc_name = '".$_GET['loc']."'";
    $vendor_website = $_POST['website'];
    $vendor = $_POST['vendor'];

    $query = "INSERT INTO <table> ([login_username]
        ,[login_password]
        ,[loc_id]
        ,[comments]
        ,[vendor_website]
        ,[vendor_name])VALUES (?,?,?,?,?,?)";

    $parms = array($username, $password, $loc_id, $comments, $vendor_website, $vendor);

    $result = sqlsrv_query($conn, $query, $parms) or die (print_r ( sqlsrv_errors(), true));

    sqlsrv_close($conn);
}
header('Location:  vendorcreds.php/?loc='.$_GET['loc']);

Вот HTML для формы:

<div class='dialog' id='newform' title='New Transaction' >
<form method='POST' id ='newfo' name = 'newfo'   action='insert.php?loc=<?php echo $_GET['loc'];?>' enctype='multipart/form-data'>`
</form>
</div>

Здесь Jquery для всплывающей формы и добавления таблицы во всплывающее окно:

$("#editFo").append(
        "<table style='margin-left: auto; margin-right:auto; background-color: #ffffff;' id='edittable'>"+
            "<tr>"+
                "<td>Vendor</td>"+
                "<td style='padding-left: 6px;'><input type='text' name='vendor' id='vendor' value='"+$vendor+"' /></td>"+
            "</tr>"+
            "<tr>"+
                "<td>Website</td>"+
                "<td style='padding-left: 6px;'><input type='text' name='website' id='website' value='"+$website+"' /></td>"+
            "</tr>"+
            "<tr>"+
                "<td>Username</td>"+
                "<td style='padding-left: 6px;'><input type='text' name='username' id='username' value='"+$username+"' /></td>"+
            "</tr>"+
            "<tr>"+
                "<td>Password</td>"+
                "<td><input type='text' name='password' id='password' value='"+$password+"'/></td>"+
            "</tr>"+
            "<tr>"+
                "<td>Comments</td>"+
                "<td><input type='text' name='comments' id='comments' value='"+$comments+"'  /></td>"+
            "</tr>"+
            "<tr>"+
                "<td></td>"+
                "<td><input type='form' name='addform2' id='addform2' style='visibility: hidden;' /></td>"+
            "</tr>"+
        "</table>"      
    );` 

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Вы анализируете оператор в переменной, не запрашивая базу данных. Переменная $ loc_id должна содержать данные из оператора.

    $loc_sql = "SELECT loc_id FROM <table> WHERE loc_name = '"._GET['loc']."' LIMIT 1";

    $loc = sqlsrv_query($conn, $loc_sql, $parms) or die (print_r ( sqlsrv_errors(), true));

   //Here i assume that sqlsrv method returns an array, so access the first index and assign to the variable.
    $loc_id = $loc[0];

Я предлагаю использовать PDO для улучшения структуры запросов и безопасность.

Подробнее об этом можно прочитать

https://phpdelusions.net/pdo

https://websitebeaver.com/php-pdo-prepared-statements-to-prevent-sql-injection

0 голосов
/ 10 марта 2020

Есть проблемы с вашим PHP кодом. Вам необходимо учесть следующее:

  • Вам необходимо выполнить первый оператор и получить результат от выполнения. Используйте sqlsrv_fetch_assoc() для извлечения данных из оператора SELECT.
  • Всегда проверяйте результат выполнения sqlsrv_query().
  • Всегда старайтесь использовать параметризованные операторы. Функция sqlsrv_query() выполняет как подготовку операторов, так и их выполнение, и может использоваться для выполнения параметризованных запросов.

Следующий пример (на основе вашего кода) является возможным решением:

<?php
require_once ('connectionstring/connectionstring.php');
$conn = SQLServerConnection();

if (isset($_POST['Save'])){

    $loc_name = $_GET['loc'];
    $query = "SELECT TOP 1 loc_id FROM <table> WHERE loc_name = ?";
    $params = array($loc_name);
    $result = sqlsrv_query($conn, $query, $params);
    if ($result === false) {
        die (print_r ( sqlsrv_errors(), true));
    };
    if (sqlsrv_has_rows($result) === false) {
        echo "Empty rowset.";
        exit;
    }
    while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) {
        $loc_id = $row["loc_id"];
    }
    sqlsrv_free_stmt($result);

    $username = $_POST['username'];
    $password = $_POST['password'];
    $comments = $_POST['comments'];
    $vendor_website = $_POST['website'];
    $vendor = $_POST['vendor'];
    $query = "INSERT INTO <table> ([login_username], [login_password], [loc_id], [comments], [vendor_website], [vendor_name]) VALUES (?, ?, ?, ?, ?, ?)";
    $params = array($username, $password, $loc_id, $comments, $vendor_website, $vendor);
    $result = sqlsrv_query($conn, $query, $params);
    if ($result === false) {
        die (print_r ( sqlsrv_errors(), true));
    };
    sqlsrv_free_stmt($result);

    sqlsrv_close($conn);
}
header('Location:  vendorcreds.php/?loc='.$_GET['loc']);
?>
...