Попытка показать обновленную строку msql после успешного обновления формы с помощью php - PullRequest
1 голос
/ 05 апреля 2019

Я хотел бы иметь страницу подтверждения, на которой можно показать результаты обновленной формы с использованием php.

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

edit.php

<?php

//get ID sent by GET collection
$parentID = $_GET['id'];

ob_start();

include('connection.php');
include('functions.php');

//query the database with client ID
$query = "SELECT * FROM users WHERE id='$parentID'";
$result = mysqli_query( $conn, $query );

//if result is returned
if( mysqli_num_rows($result) > 0 ) {

    //we have data
    //set some variables
    while( $row = mysqli_fetch_assoc($result) ) {
            $parentName = $row['p_name'];
            $parentEmail = $row['email'];
            $studentName = $row['s_name'];
            $parentPhone = $row['phone'];
            $notes = $row['notes'];
            $parentDeposit = $row['deposit'];
            $packageNotColl = $row['Package-NotCollected'];
            $depositNotColl = $row['deposit-not-collected'];
        }
    } else {
            $alertMessage = "<div class='alert alert-warning'>Nothing to see here.<a href='list.php'>Head back</a></div>";
}

// id update button was submitted
if( isset( $_POST['update'] ) ) {
    //set variables
    $parentName = validateFormData( $_POST['parentName'] );
    $parentEmail = validateFormData( $_POST['parentEmail'] );
    $studentName = validateFormData( $_POST['studentName'] );
    $parentPhone = validateFormData( $_POST['parentPhone'] );
    $notes = validateFormData( $_POST['notes'] );
    $parentDeposit = validateFormData( $_POST['parentDeposit'] );

    //create new database query result
    $query = "UPDATE users
                SET p_name = '$parentName',
                email = '$parentEmail',
                s_name = '$studentName',
                phone = '$parentPhone',
                notes = '$notes',
                deposit = '$parentDeposit'
                WHERE id ='$parentID'";
    $result = mysqli_query( $conn, $query );

    if( $result ) {
        //redirect to client page with query string
        header("Location: updated.php?alert=updatesuccess");
        return $result;
    } else {
        echo "Error updating record: " . mysqli_error($conn);
    }
}

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

    $alertMessage = "<div class='alert alert-danger'>
                        <p>Are you sure you want to delete this profile? This action cannot be undone!</p><br>
                        <form action='". htmlspecialchars( $_SERVER['PHP_SELF'] ) ."?id=$parentID' method='post'>
                            <input type='submit' class='btn btn-danger btn-sm' name='confirm-delete' value='Yes, delete!'>
                            <a type='button' class='btn btn-default btn-sm' data-dismiss='alert'>Maybe not this time.</a>
                        </form>
                    </div>";

}

if( isset( $_POST['confirm-delete'] ) ) {
    $query = "DELETE FROM users WHERE id='$parentID'";
    $result = mysqli_query( $conn, $query );

    if($result) {
        header("Location: list.php?alert=deleted");
    } else {
        echo "Error deleting client: " . mysqli_error($conn);
    }
}

mysqli_close($conn);

include('header.php');

?>

<h1>Edit Profile</h1>

<?php echo $alertMessage; ?>

<form action="<?php echo htmlspecialchars( $_SERVER['PHP_SELF'] ); ?>?id=<?php echo $parentID; ?>" method="post" class="row">
    <div class="form-group col-sm-6">
        <label for="parent-name">Parent Name</label>
        <input type="text" class="form-control input-lg" id="client-name" name="parentName" value="<?php echo $parentName; ?>">
    </div>
    <div class="form-group col-sm-6">
        <label for="parent-email">Email</label>
        <input type="text" class="form-control input-lg" id="client-email" name="parentEmail" value="<?php echo $parentEmail; ?>">
    </div>
    <div class="form-group col-sm-6">
        <label for="student-name">Student Name</label>
        <input type="text" class="form-control input-lg" id="student-name" name="studentName" value="<?php echo $studentName; ?>">
    </div>
    <div class="form-group col-sm-6">
        <label for="parent-phone">Phone #</label>
        <input type="text" class="form-control input-lg" id="parent-phone" name="parentPhone" value="<?php echo $parentPhone; ?>">
    </div><div class="form-group col-sm-6">
        <label for="student-name">Notes</label>
        <input type="textarea" class="form-control input-lg" id="notes" name="notes" value="<?php echo $notes; ?>">
    </div>
    <div class="form-group col-sm-6">
        <label for="parent-deposit">Deposit</label>
        <input type="text" class="form-control input-lg" id="parent-deposit" name="parentDeposit" value="<?php echo $parentDeposit; ?>">
    </div>
    <hr>
    <div class="col-sm-12">
        <hr>
        <button type="submit" class="btn btn-lg btn-danger pull-left" name="delete">Delete</button>
        <div class="pull-right">
            <a href="list.php" type="button" class="btn btn-lg btn-default">Cancel</a>
            <button type="submit" class="btn btn-lg btn-success" name="update">Update</button>
            <!-- <a href="updated.php?id<?php echo $rows['id']; ?>" target="_blank" type="button" class="btn btn-lg btn-warning">Print</a> -->
        </div>
    </div>
</form>
<hr>
<div>
    <?php if($packageNotColl > 0) { ?>
        <div class='col-sm-3 alert alert-danger'>Package not collected 2018: $<?php echo $packageNotColl; ?></div>
    <?php } ?>    
</div>

<?php

include('footer.php');
?>

updated.php

<?php

//get ID sent by GET collection
$parentID = $_GET['id'];

ob_start();

include('connection.php');
include('functions.php');

//query the database with client ID
$query = "SELECT * FROM users WHERE id='$parentID'";
$result = mysqli_query( $conn, $query );

mysqli_close($conn);

include('header.php');

?>

<table class="table table-striped table-bordered">
        <tr>
            <th>ID</th>
            <th>Parent Name</th>
            <th>Email</th>
            <th>Student Name</th>
            <th>Phone #</th>
            <th>Notes</th>
            <th>Deposit</th>      
            <th>Edit</th>      
        </tr>


    <?php

        if(isset($_GET['id'])) {

            if(mysqli_num_rows($result) > 0) {
                //we have data
                //output the data
                while( $row = mysqli_fetch_assoc($result) ) {
                    echo "<tr>";

                    echo "<td>" . $row['id'] . "</td><td>" . $row['p_name'] . "</td><td>" . $row['email'] . "</td><td>" . $row['s_name'] . "</td><td>" . $row['phone'] . "</td><td>" . $row['notes'] . "</td><td>" . $row['deposit'] . "</td>"; 

                    echo '<td><a href="edit.php?id=' . $row['id'] . '" type="button" class="btn btn-primary btn-sm"><span class="glyphicon glyphicon-edit"></span></a></td>';

                    echo '</tr>';
                }
            } else { //if no entries
                echo "<div class='alert alert-warning'>You have no clients!</div>";
            } 
        } 

    ?>

<?php

include('footer.php');
?>

Страница updated.php показывает таблицу, но не содержит результатов SQL-запросов.

1 Ответ

0 голосов
/ 05 апреля 2019

header('Location: ...) возвращает указанный вами URL / адрес в браузер, который затем вызывает эту страницу. любая информация, которую имел ваш скрипт, когда вы вызывали это перенаправление, исчезла, так как это другой запрос.

Следовательно, вы должны добавить идентификатор к предоставленному вами URL. Как

header('Location: /updated.php?id='.$parentID.'&alert=deleted');

Однако Вы действительно должны предотвратить инъекцию sql, которая только и ждет. ПОЖАЛУЙСТА, прочтите, как это предотвратить, потому что ваш скрипт уязвим к нему. Ваш скрипт также уязвим для XSS. Дезинфицируйте ВСЕ данные, предоставленные извне ($parentID = $_GET['id']; должен по крайней мере быть $parentId = intval($_GET['id']) для борьбы с XSS).

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