同じフォームを使用してレコードを追加し、更新するPHPのフォームは、クエリパラメータに依存します

アフマド・アリ:

私は追加して、同じフォームを使用してレコードを更新するためにPHPのフォームでこのフォームは、クエリパラメータに依存しています。

<?php
    if (isset($_GET['id'])) {
        $id = $_GET['id'];
        echo '<h1>Edit</h1>';
    } else {
        echo '<h1>Add New</h1>';
    } 

    global $wpdb;
    $pr = $wpdb->get_results("SELECT * FROM wp_projects WHERE id = $id LIMIT 1");
?>
<form action="" method="post">
    <input type="text" name="pr-name" value="<?php echo $pr[0]->name ?>" size="50">
    <input type="text" name="pr-lang" value="<?php echo $pr[0]->languages ?>" size="50">
    <?php 
    if (isset($_GET['id'])) {
        echo '<input style="margin-left: 10%;" class="btn btn-primary" type="submit"
            name="edit" value="Edit" />';
    } else {
        echo '<input style="margin-left: 10%;" class="btn btn-primary" type="submit"
            name="add" value="Add" />';
    }
    ?>
</form>

このフォームを処理するためのロジック:

if (isset($_POST['add'])) {
    global $wpdb, $name, $lang;
    $name = !empty($_POST['pr-name']) ? sanitize_text_field($_POST['pr-name']) : null;
    $lang = !empty($_POST['pr-lang']) ? sanitize_text_field($_POST['pr-lang']) : null;
    $table_name = $wpdb->prefix . "projects";
    $wpdb->insert($table_name, array(
        'time' => current_time('mysql'),
        'name' => $name,
        'languages' => $lang,
    ));
}

if (isset($_POST['edit'])) {
    global $wpdb, $name, $lang;
    $name = !empty($_POST['pr-name']) ? sanitize_text_field($_POST['pr-name']) : null;
    $lang = !empty($_POST['pr-lang']) ? sanitize_text_field($_POST['pr-lang']) : null;
    $table_name = $wpdb->prefix . "projects";
    $wpdb->update(
        $table_name,
        array('time' => current_time('mysql'), 'name' => $name ),
        array('ID'=>$id),
        array("%s"),
        array("%d")
    );
}

今のところは、任意のレコードを追加していない、と私は編集(または更新)ルートを使用する場合はレコード全体を空白になります。これは、レコードから以前の値を削除します。

I削除した場合<?php echo $pr[0]->name ?>、フォームの入力フィールドのすべてが完璧に動作しますが、私は私が更新するんだよ知っているので、私は、DBから格納された値を取得できませんでした。

私はそれを解決するために何ができますか?

ユージン・ルバン:

あなたはここにいくつかの問題を抱えています。

最初は、 - SQLで直接$ _GETや$ _POSTからのデータを使用することはありません-あなたが取得するSQLインジェクションを

第二に、あなたはそれがどのように考えるか<?php echo $pr[0]->name ?>あなたは何が$ PRのいずれかのデータがある場合は、新しいレコードを追加しないようにしようとしたときに動作しますか?だから、あなたは次のようになめらかに試すことができ<?php echo $pr[0]->name ?? '' ?>、または私は下記のより正しい道を行くことに。

あなたはこのラインを使用する必要があるので、$pr = $wpdb->get_results("SELECT * FROM wp_projects WHERE id = $id LIMIT 1");場合にのみ、あなたの編集URLに。あなたもチェックを追加することができますこの方法は、 -これであっレコードですidデシベルインチ

だから、コードはそのようなことになります。

<?php
    global $wpdb;
    $name = '';
    $lang = '';
    if (isset($_GET['id'])) {
        $id = $_GET['id'];
        $pr = $wpdb->get_results("SELECT * FROM wp_projects WHERE id = $id LIMIT 1");
        if (!$pr) {
            die('No record with id: ' . $id);
        }
        $name = $pr[0]->name;
        $lang = $pr[0]->languages;
        echo '<h1>Edit</h1>';
    } else {
        echo '<h1>Add New</h1>';
    } 
?>
<form action="" method="post">
    <input type="text" name="pr-name" value="<?php echo $name ?>" size="50">
    <input type="text" name="pr-lang" value="<?php echo $lang ?>" size="50">
    <?php 
    if (isset($_GET['id'])) {
        echo '<input style="margin-left: 10%;" class="btn btn-primary" type="submit"
            name="edit" value="Edit" />';
    } else {
        echo '<input style="margin-left: 10%;" class="btn btn-primary" type="submit"
            name="add" value="Add" />';
    }
    ?>
</form>

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=364620&siteId=1