S.SAKTHYBAALAN Ответов: 1

Как я могу запустить два PHP скрипта из C#


Используя C# и MySQL, я создаю проект. Есть также базы данных из локальных и удаленных источников. Сначала записи вставляются или обновляются в локальную базу данных, а затем новые записи(вновь вставленные в локальную или измененные записи в локальной) должны быть загружены в удаленную базу данных. Вот я и сделал все это. Но каждый процесс идет отдельно. Моя проблема в том, как я могу сделать все это как один.

Видеть изображение [^]

Что я уже пробовал:

Кодирование на языке C#
Кнопка отображения


private void btnDisplay_Click(object sender, EventArgs e)
        {
            try
            {
                _dbConnection.Open();
                const string selectQuery =
                    "SELECT * FROM tbl_sales WHERE (row_inserted_on >= @dtp_last_updated) AND (last_edited_on >= @dtp_last_updated)";

                using (var cmdLocal = new MySqlCommand(selectQuery, _dbConnection))
                {
                    cmdLocal.Parameters.Add("@dtp_last_updated", MySqlDbType.DateTime).Value =
                        DateTime.Parse(dtpLastServerUpdated.Text);
                    cmdLocal.Connection = _dbConnection;
                    cmdLocal.CommandText = selectQuery;
                    _dbDataAdapter = new MySqlDataAdapter();
                    _dbDataAdapter.SelectCommand = cmdLocal;
                    _dbDataTable = new DataTable();
                    _dbDataAdapter.Fill(_dbDataTable);
                    dataGridView1.DataSource = _dbDataTable;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            finally
            {
                _dbDataAdapter.Dispose();
                _dbConnection.Close();
            }
        }


Кнопка Expoert to JSon
private void btnExportToJson_Click(object sender, EventArgs e)
        {
            var jasonData = (DataTableToJson(_dbDataTable));
            //MessageBox.Show(afd);
            System.IO.File.WriteAllText(@"C:\Users\BAALAN-PC\Desktop\path.json", jasonData);
            Application.Exit();
        }


Кнопка загрузить на сервер
private void btnHttpRequest_Click(object sender, EventArgs e)
        {
            try
            {
                WebClient client = new WebClient();
                string myFile = @"C:\Users\BAALAN-PC\Desktop\path.json";
                client.Credentials = CredentialCache.DefaultCredentials;
                client.UploadFile(@"http://myWeb.com/myWorkDb/fileUpload.php", "POST", myFile);
                client.Dispose();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }

        }


PHP кодирование
phpExecute.php (загружает данные из JSon-файла в удаленную базу данных)
<?php
    try
    {
        $connect = mysqli_connect("localhost", "fiart", "", "dbsync");    
        $query = '';
        $table_data = '';
        $filename = "path.json";

        $data = file_get_contents($filename);
        $array = json_decode($data, true); 

        foreach($array as $row) 
        {
            $query .= "INSERT INTO tbl_sales(sale_item, sale_qty, row_inserted_on, last_edited_on, id) VALUES ('".$row["sale_item"]."', '".$row["sale_qty"]."', '".$row["row_inserted_on"]."', '".$row["last_edited_on"]."', '".$row["id"]."') ON DUPLICATE KEY UPDATE sale_item='".$row["sale_item"]."', sale_qty='".$row["sale_qty"]."', row_inserted_on='".$row["row_inserted_on"]."', last_edited_on='".$row["last_edited_on"]."';";
        }

            mysqli_multi_query($connect, $query);  

            echo "<h1>All data appeded </h1>";
    } 

    catch(Exception $e)
    {   
        echo $e->getMessage();    
    }
?>


fileUpload.php (используется с кнопкой загрузить на сервер)
<?php
    $filepath = $_FILES["file"]["tmp_name"];
    move_uploaded_file($filepath,"path.json");
?>

1 Ответов

Рейтинг:
7

Patrice T

const string selectQuery = "SELECT * FROM tbl_sales WHERE (row_inserted_on >= @dtp_last_updated) AND (last_edited_on >= @dtp_last_updated)";

$query .= "INSERT INTO tbl_sales(sale_item, sale_qty, row_inserted_on, last_edited_on, id) VALUES ('".$row["sale_item"]."', '".$row["sale_qty"]."', '".$row["row_inserted_on"]."', '".$row["last_edited_on"]."', '".$row["id"]."') ON DUPLICATE KEY UPDATE sale_item='".$row["sale_item"]."', sale_qty='".$row["sale_qty"]."', row_inserted_on='".$row["row_inserted_on"]."', last_edited_on='".$row["last_edited_on"]."';";

SQL-инъекция: Похоже, вы знаете проблему и лекарство, почему все еще используете незащищенный код ?
Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]


S.SAKTHYBAALAN

Спасибо, @ppolymorphe. Как я могу это изменить ?

Patrice T

Прочтите ссылки в конце решения.
"Выбор" - это пример решения.

S.SAKTHYBAALAN

Итак, где я должен хотеть измениться?