@ipokos

Правильно ли принимаются/загружаются данные (php/ajax)?

Задача примитивна, нужна форма с добавлением полей, кнопкой удалить, добавить (пока без никаких проверок, вопросов и т.п.), подгружается ajax-ом

Хочется что б не сильно закидали камнями когда буду показывать, ну хотя бы не насмерть)
По этому и возник вопрос, что из этого совсем плохо?
Или что из плохого нужно исправить в первую очередь?
Как понимаете, вопрос возник из-за отсутствия нормального опыта, по этому буду крайне признателен объективным советам и комментам (если нетерпеж, то можно и потролить =) )
Если по сути:
functions.php
function connect_db(){
    require $_SERVER["DOCUMENT_ROOT"] . '/config/config.php';
    $link = mysqli_connect($host, $name, $password, $db);

    if (!$link) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit(); 
    }
    return $link;
}
function add_user_query($arr_user){
    $link = connect_db();
    $query = "INSERT INTO users VALUES (NULL,
                                        '".$arr_user['first_name']."',
                                        '".$arr_user['second_name']."',
                                        '".$arr_user['email']."')";
    mysqli_query($link, $query);
    mysqli_close($link);
}
function dell_user_query($arr_user){
    $link = connect_db();
    mysqli_query($link, "DELETE FROM users WHERE `email` = '".$arr_user['email']."'");
    mysqli_close($link);
}
function load_result(){
    $link = connect_db();
    $result = mysqli_query($link, "SELECT first_name, second_name, email FROM users");
    $resultArr = mysqli_fetch_all($result, MYSQLI_ASSOC);
    mysqli_close($link);
    return $resultArr;
}
function print_field($result){
    $number = 0;
        foreach($result as $key => $val)
        {?>
            <div class="row">
                <p id="number"><?= ++$number ?></p>
                <p id="first_name"><?= $result[$key]['first_name'] ?></p>
                <p id="second_name"><?= $result[$key]['second_name'] ?></p>
                <p id="email"><?= $result[$key]['email'] ?></p>
                <p class="control">
                    <span id="del">del</span>
                </p>
            </div>
        <?}
}


proc.php
<?php
require 'functions.php';
$action = $_POST['action'];
$first_name = $_POST['first_name'];
$second_name = $_POST['second_name'];
$email = $_POST['email'];

$arr_user = ['first_name' => $first_name,
             'second_name' => $second_name,
             'email' => $email
             ];
$arr = ['first_name', 'second_name', 'email'];
        
switch($action){
    case 'add':
        add_user_query($arr_user);
        break;
    case 'update':
      //  update_user_query($arr_user);
        break;
    case 'dell':
        dell_user_query($arr_user);
        break;
        
}
$result = load_result();
print_field($result);
?>


и js
$(document).ready(function(){
    load_table();
    
    $('.add_user').bind('click', function(){
        $('.fields').show();
        $('.add_user').css('display', 'none');
        
        var button_save = '<input type="button" name="save_user" class="save_user" value="Save user" />';
        var button_cansel = '<input type="button" name="cansel" class="cansel" value="Cansel" />';
        
        $(button_save).appendTo('.fields');
        $(button_cansel).appendTo('.fields');
        
    });
    $('.add-field').on('click','.cansel', function(){
        $('.fields').hide();
        $('.save_user').hide();
        $('.cansel').hide();
        $('.add_user').css('display', 'block');
    });
    $('.add-field').on('click','.save_user', function(){
        var first_name = $('.first_name').val();
        var second_name = $('.second_name').val();
        var email = $('.email').val();
        
        $.ajax({
            type: 'POST',
            url: "inc/proc.php",
            
            data: "action=add&first_name="+first_name+"&second_name="+second_name+"&email="+email,
            success: update_result
        });
        
    });
    
    $('.table').on('click','#del', function(){
       var email = $(this).closest(".row").find("#email").text();
            $.ajax({
            type: 'POST',
            url: "inc/proc.php",
            data: "action=dell&email="+email,
            success: update_result
            });
            
    });
       
        
});


function load_table(action){
    $.ajax({
            type: 'POST',
            url: "inc/proc.php",
            cache: false,
            success: loadResult
        });
}
function loadResult(data){
    $(".table").append(data);
}
function update_result(data){    
    $("div .row").remove();
    $(".table").append(data);
}
function confirm_delete(){
    confirm("Delete?")
}


function show_popup(){
    
    
}
function close_popup(){
    var popup = document.getElementById('popup');
    var overlay = document.getElementById('overlay');
    popup.style.display = 'none';
    overlay.style.display = 'none';
}

Все это добро(и еще немного) лежит тут:
https://github.com/v-lavr/table_tz
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
uDenX
@uDenX
PHP Developer
1. Вместо MySQLi юзаем PDO
2. Все данные пришедшие от пользователя нужно валидировать
3. Вместо прямых вставок переменных в запрос используйте плейсхолдеры
4. В INSERT можно перечислить только те поля, которые нужно вставить, таким образом избавитесь от NULL и код станет понятней
5. Вместо foreach в вашем случае можно использовать for
6. Вместо css('display', 'none') можно делать просто hide()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы