PHP не может получить значение из HTML формы - PullRequest
0 голосов
/ 11 апреля 2020

Не могу получить значение PHP POST из формы. Значение ввода извлекается из Ajax и вставляется в форму ввода ниже. Тем не менее, тест на отправку формы не может получить значение из ввода. Могу ли я узнать в чем проблема и как ее решить? Заранее спасибо.

UpdateProfile. php

<?php
session_start();
include("dbcon.php"); 

if(isset($_POST['updateProfile']))  
{  
    $profileCode=$_POST['profileCode'];
    $profileName=$_POST['profileName'];
    $profileDesc=$_POST['profileDesc'];
    echo "<script>alert('".$profileCode."')</script>";

    $find_user="select * from profile where profileCode='$profileCode'"; 
    $statement = $dbcon->prepare($find_user);
    $statement->execute();
    if($row = $statement->fetch())
    {  
        echo "<script>alert('".$profileCode."')</script>";
    } 
    else 
    {
        echo "<script>alert('Failed to update profile!')</script>";
    }
} 
?>

<script>
function editBtn(profileCode) {
                $.ajax({
                    type:"POST", 
                    url: "test.php", 
                    dataType: "html",
                    data: {profileCode:profileCode},
                    success: function(data){
                        $('#profileCode').val(data.split(",")[0]);
                        $('#profileName').val(data.split(",")[1]);
                        $('#profileDesc').val(data.split(",")[2]);
                        event.preventDefault();
                    }
                });}
</script>

<?php
 $username = $_SESSION["username"];
 $query = "SELECT * FROM profile WHERE username='$username'";
 $statement = $dbcon->prepare($query);
 $statement->execute();
 $result = $statement->fetchAll();
 foreach($result as $row)
 {
?>
<i class="ti-pencil" onclick="editBtn('<?php echo $row['profileCode']; ?>')"></i>
<?php } ?>
<form role="form" method="post" action="manageprofile.php">
       <label>Profile Code</label>
       <input type="text" class="form-control border-input" id="profileCode" name="profileCode" value="" disabled>
       <label>Profile Name</label>
       <input type="text" class="form-control border-input" id="profileName" name="profileName" value="" placeholder="Profile Name" required>
       <label>Profile Description</label>
       <textarea rows="5" class="form-control border-input" placeholder="About you" id="profileDesc" name="profileDesc" value=""></textarea>
</form>

test. php

<?php
include("dbcon.php"); 

$courseCode = $_POST['profileCode'];
$query = " SELECT * FROM profile WHERE profileCode='$profileCode' ";
$statement = $dbcon->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
foreach($result as $row)
{
    echo $row['profileCode'].",".$row['profileName'].",".$row['profileDesc'];
} ?>

Изображение: сообщение не возвращает значения в оповещении

Код ошибки: строка 7 ($ profileCode = $ _ POST ['profileCode'];) // после нажатия на кнопку отправки

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Простой ответ заключается в том, что вы отключили свой входной код профиля в своем html:

<input type="text" class="form-control border-input" 
id="profileCode" name="profileCode" value="" disabled> <!-- disabled -->

Именно поэтому $_POST не получает код профиля.

Кроме того, вы отправляете только значение profileCode в ajax -запросе:

data: {profileCode:profileCode}` 

Итак, вы отправляете запрос ajax (сообщение -request) с данными profileCode. Сам код профиля отправляется на PHP. Но поскольку PHP не включает отключенные элементы в PHP, значение будет пустым.

И поэтому другие поля также будут пустыми - потому что ваш код в тесте. php:

$statement->fetchAll(); 

вообще не будет выводить и, следовательно, ответ html не будет отправлен обратно (поскольку profileCode в запросе к базе данных пуст (SELECT * FROM profile WHERE profileCode=''))


И то, что другие уже прокомментировали: Вы должны улучшить то, как вы обрабатываете SQL -инъекции. Вы используете подготовленные заявления, но вы используете их способом, который не ' t вообще защищать.

Я полагаю, что вы используете PDO-драйвер, поэтому:

Вместо:

 $query = "SELECT * FROM profile WHERE username='$username'";
 $statement = $dbcon->prepare($query);

You следует использовать:

$query = "SELECT * FROM profile WHERE username=:username";
$statement = $dbcon->prepare($query);
$statement->execute( array(':username', $username) );

Это делает невозможным для пользователя возиться с реальной строкой (SELECT * FROM profile WHERE username=:username), поскольку :username является просто заполнителем.

0 голосов
/ 11 апреля 2020

Спасибо, что помогли мне. Я думаю о решении, которое снова использует ajax, чтобы получить это обновленное значение и отправить его в тест. php.

UpdateProfile. php

function submitEditProfileForm(){
            $.ajax({
                type:"POST", 
                url: "test.php",
                data: {
                    profileCode:$('#profileCode').val(),
                    profileName:$('#profileName').val(),
                    profileDesc:$('#profileDesc').val()
                },
                success: function(data){
                    alert(data);
                }
            });
        }

test. php

if(isset($_POST['profileCode']) && isset($_POST['profileName']) && isset($_POST['profileDesc'])){
    $profileCode= $_POST['profileCode'];
    $profileName= $_POST['profileName'];
    $profileDesc= $_POST['profileDesc'];
    echo $profileCode.",".$profileName.",".$profileDesc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...