Как отправить через POST переменную без input

317
11 августа 2021, 03:30

Есть форма, которая передаёт значения select-ов через POST-запрос, но надо к ним добавить ещё массив, который формируется в процессе создания этих select-ов. Как это сделать? Возможно это не записывать в значение тестового input-а, после чего его отправлять? :)

first.php:

<form class="forma" action="second.php" method="post">
  <div class="form-group">
    <select class="form-control" name="NamesUsers">
<?php
      $name = $_SESSION['login'];      
      $availableNames = array();
      if ($_SESSION['RolOfUser'] == 'admin'){
        $sql = mysqli_query($db, "SELECT login FROM users WHERE login != '$name'");
        while ($row = $sql->fetch_assoc())
        {
          echo "<option value=\"".$row['login']."\">" . $row['login'] . "</option>";
          array_push($availableNames, $row['login']);
        }
      }else {
        $sqlModer = mysqli_query($db,
        "SELECT login FROM users INNER JOIN roli ON users.id=roli.UserId where users.login !='$name' and roli.RolOfUser !='admin'");
        while ($rrow = $sqlModer->fetch_assoc()) {
          echo "<option value=\"".$rrow['login']."\">" . $rrow['login'] . "</option>";
          array_push($availableNames, $row['login']);
        }
      }
?>
    </select>
  </div>
    <div class="form-group">
      <select class="form-control" name = "SetRol">
        <option value = "admin">Сделать администратором</option>
        <option value = "moderator">Сделать модератором</option>
        <option value = "user">Понизить до ЮЗВЕРЯ</option>
      </select>
    </div>  
  <input class="btn btn-primary" type="submit" value="Изменить роль">
</form>

second.php:

  $NameUser = $_POST['NamesUsers'];
  $NameRol = $_POST['SetRol'];
  $allowed = array("admin", "moderator", "user");
  //$availableNames = $_POST['$availableNames']; ???
  if(in_array($NameRol, $allowed) and in_array($NameUser, $availableNames)){
    $sql = "UPDATE roli SET RolOfUser = ? WHERE UserId = (SELECT id FROM users WHERE login = ?)";
    $statement = $db->prepare($sql);
    $statement->bind_param("ss", $NameRol, $NameUser);
    $statement->execute();
  }else{
    echo "<div class=\"message center\"><p>Невозможный пользователь или роль</p></div>";
  }
Answer 1

Передавать через POST в данном случае небезопасно, могу обмануть и передать что то другое))) Вы можете определить какой список должен быть на основании значения $_SESSION['RolOfUser'] и сделать запрос в базу данных для получения этого списка.

$name = $_SESSION['login'];
$availableNames = [];
if ($_SESSION['RolOfUser'] == 'admin'){
  $sql = mysqli_query($db, "SELECT login FROM users WHERE login != '$name'");
}else {
  $sqlModer = mysqli_query($db,
    "SELECT login FROM users INNER JOIN roli ON users.id=roli.UserId where users.login !='$name' and roli.RolOfUser !='admin'");
}
while ($row = $sqlModer->fetch_assoc()) {
  array_push($availableNames, $row['login']);
}
Answer 2

Без вывода отправляемой информации в коде сайта - никак, но вы можете поступить неочевидно - отправлять форму на JS и перед отправкой добавить ей нужный параметр Пример на jq ajax

$('.sudmit-class').click(function () {
    var settings = {
        "async": true,
        "crossDomain": true,
        "url": "http://",
        "method": "GET",
        "headers": {
        //    ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ
        }
    }
    $.ajax(settings).done(function (response) {
        console.log(response);
    });   
})
Answer 3

Если вопрос только об HTML и форме, тогда сериализуйте данные и положите их в скрытый input Например: Если отправка при помощи jQuery Тогда вы можете вписать данные в любой блок и затем через селектор и при помощи jQuery выбрать эти данные и отправить обработчику php

READ ALSO
Когда выполняется main?

Когда выполняется main?

Есть Class1, в котором создаётся экземпляр Class2:

165
Как кодировать audio файл в строку Base64?

Как кодировать audio файл в строку Base64?

Я загружаю файл audio через onActivityResult(), мне нужно его отправить на сервер (php) с помощью библиотеки volleyКак мне кодировать audio в строку base64

192
Возможные перестановки по длине

Возможные перестановки по длине

У меня есть какой то массив со словами, который я сортирую по длинеХочу сделать так, что бы на выходе он выдавал все возможные перестановки

357
Тормозит автотест

Тормозит автотест

Занимаюсь написанием автотестовНедавно стал очень сильно тормозить (работает по 3, 9, 49 минут, в зависимости от тестового стенда, когда раньше...

273