поля обновления формы, которые не были обновлены пользователем - PHP Query - PullRequest
1 голос
/ 08 марта 2019

Мне нужна помощь с моим запросом PHP. По сути, я даю пользователям возможность обновлять свои собственные данные после входа в систему. Форма:

<div class="grid-2"> 
    <p><b>UPDATE MY DETAILS</b></p>
        <form action ="includes/update.inc.php" method ="post">
        <label>S.Name</label>
        <input name="update-surname" type="text" placeholder="Enter new surname...">
        <label>Address</label>
        <input name="update-houseno" type="text" placeholder="Enter house no' or name...">
        <input name="update-ln1" type="text" placeholder="1st Line of Address...">
        <input name="update-town" type="text" placeholder="Town...">
        <input name="update-county" type="text" placeholder="County...">
        <input name="update-postcode" type="text" placeholder="Postcode...">
        <label>Contact Number</label>
        <input name="update-number" type="text" placeholder="Contact Number...">
        <label>Email</label>
        <input name="update-email" type="text" placeholder="Email...">

        <input type="submit" name="update-details" value="Update">
    </form>
</div>

Мой php-код, который у меня есть в настоящее время, если пользователь ничего не вводит в поле, он обновляет базу данных пустым вводом (чего я не хочу делать), если нет ввода, я не делаю хочу, чтобы это поле в таблице касалось.

    <?php
// Here we check whether the user got to this page by clicking the proper button.
if (isset($_POST['update-details'])) {

      require 'dbh.inc.php';

// We grab all the data which we passed from the signup form so we can use it later.
    $surname = $_POST['update-surname'];
    $houseno = $_POST['update-houseno'];
    $ln1 = $_POST['update-ln1'];
    $town = $_POST['update-town'];
    $county = $_POST['update-county'];
    $postcode = $_POST['update-postcode'];
    $email = $_POST['update-email'];
    $number = $_POST['update-number'];

      // We validate the updated email is correct if email has been updated. 
  if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    header("Location: ../after-login.php?error=invalidmail=");
    exit();
    }

    $query = "UPDATE `tblMember` SET `fldSName` = '$surname', `fldTelNum` = '$number', `fld1stLnAddress` = '$houseno', `fld2ndLnAddress` = '$ln1', `fld3rdLnAddress` = '$town', `fldCounty` = '$county', `fldPostcode` = '$postcode', `fldEmailAddress` = '$email' WHERE `tblMember`.`fldMemberID` = 1";


    $result = $conn->query($query) or die ("error");
}
?>

После загрузки php-формы веб-страница исчезает и не остается на текущей веб-странице.

Итак, нужно 2 вещи: помочь с правильным запросом и помочь, чтобы страница стала пустой и не осталась на странице.

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

Спасибо!

Ответы [ 3 ]

2 голосов
/ 08 марта 2019
<?php
// Here we check whether the user got to this page by clicking the proper button.
if (isset($_POST['update-details'])) {

    require 'dbh.inc.php';

// We grab all the data which we passed from the signup form so we can use it later.
    $surname = $_POST['update-surname'];
    $houseno = $_POST['update-houseno'];
    $ln1 = $_POST['update-ln1'];
    $town = $_POST['update-town'];
    $county = $_POST['update-county'];
    $postcode = $_POST['update-postcode'];
    $email = $_POST['update-email'];
    $number = $_POST['update-number'];

    // We validate the updated email is correct if email has been updated.
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        header("Location: ../after-login.php?error=invalidmail=");
        exit();
    }

    $query = "UPDATE `tblMember` SET ";
    (!empty($surname))?: $query .= "`fldSName` = '$surname',";
    (!empty($houseno))?: $query .= "`fldTelNum` = '$houseno',";
    (!empty($ln1))?: $query .= "`fld1stLnAddress` = '$ln1',";
    (!empty($town))?: $query .= "`fld2ndLnAddress` = '$town',";
    (!empty($county))?: $query .= "`fld3rdLnAddress` = '$county',";
    (!empty($postcode))?: $query .= "`fldCounty` = '$postcode',";
    (!empty($email))?: $query .= "`fldPostcode` = '$email',";
    (!empty($number))?: $query .= "`fldEmailAddress` = '$number'";



   $query .= " WHERE `tblMember`.`fldMemberID` = 1";


    $result = $conn->query($query);

    header("Location: ../after-login.php");  //make sure of the path

}

В основном вы проверяете свои входные значения и, как и вы, строите свой запрос путем объединения блоков запроса.

В конце добавлен заголовок, чтобы перенаправить вас на нужную страницу.

2 голосов
/ 08 марта 2019

Для первой проблемы вы можете отредактировать ваш запрос как

UPDATE tblMember
SET fldSName = IF('$surname' = '', fldSName, '$surname'),
    fldTelNum = IF('$number' = '', fldTelNum, '$number'),
    fld1stLnAddress = IF('$houseno' = '', fld1stLnAddress, '$houseno'),
    fld2ndLnAddress = IF('$ln1' = '', fld2ndLnAddress, '$ln1'),
    fld3rdLnAddress = IF('$town' = '', fld3rdLnAddress, '$town'),
    fldCounty = IF('$county' = '', fldCounty, '$county'),
    fldPostcode = IF('$postcode' = '', fldPostcode, '$postcode'),
    fldEmailAddress = IF('$email' = '', fldEmailAddress, '$email'),
WHERE  
    `tblMember`.`fldMemberID` = 1  

Для Второго беспокойства вы должны удалить die () и перенаправить на after-login.php как

 $conn->query($query);
 header("Location: ../after-login.php");
2 голосов
/ 08 марта 2019

Необходимо проверить, не является ли поле ввода данных не пустым / действительным.

Шаги, чтобы избежать обновления пустых полей:

1) Возьмите пустой массив

2) Проверьте, является ли каждая опубликованная переменная действительной, и допустимо ли добавить ее в массив.

3) Проверьте, не является ли массив пустым.

4) Если он не пустой, запустите SQL.

<?php
// Here we check whether the user got to this page by clicking the proper button.
if (isset($_POST['update-details'])) {

      require 'dbh.inc.php';

// We grab all the data which we passed from the signup form so we can use it later.
    $ln1 = $_POST['update-surname'];
    $houseno = $_POST['update-houseno'];
    $ln1 = $_POST['update-ln1'];
    $town = $_POST['update-town'];
    $county = $_POST['update-county'];
    $postcode = $_POST['update-postcode'];
    $email = $_POST['update-email'];
    $number = $_POST['update-number'];

      // We validate the updated email is correct if email has been updated. 
  if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    header("Location: ../after-login.php?error=invalidmail=");
    exit();
    }

    $update = [];
    if (! empty($surname)) {
        $update['fldSName'] = "fldSName = '".$surname ."'";
    }

    if (! empty($number)) {
        $update['fldTelNum'] = "fldTelNum='".$number ."'";
    }

    if (! empty($houseno)) {
        $update['fld1stLnAddress'] = "fld1stLnAddress='".$houseno ."'";
    }

    if (! empty($ln1)) {
        $update['fld2ndLnAddress'] = "fld2ndLnAddress='".$ln1 ."'";
    }

    if (! empty($town)) {
        $update['fld3rdLnAddress'] = "fld3rdLnAddress='".$town ."'";
    }

    if (! empty($county)) {
        $update['fldCounty'] = "fldCounty='".$county ."'";
    }
    if (! empty($postcode)) {
        $update['fldPostcode'] = "fldPostcode='".$postcode ."'";
    }
    if (! empty($email)) {
        $update['fldEmailAddress'] = "fldEmailAddress='".$email ."'";
    }


    if (! empty($update)) {
        $query = "UPDATE `tblMember` SET ";
        $query .= implode(', ', $update);
        $query .= " WHERE `tblMember`.`fldMemberID` = 1";
        $result = $conn->query($query) or die ("error");
    }
}
?>

Примечание:

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

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