0

So, I have this site, and I created some buttons that makes cells in the table row editable: https://i.sstatic.net/HWMiw.jpg

After the user edits whatever cells he wants, he should press "Save" button, as you see in the picture. Now I want to get whatever he wrote in those cells and send it to a PHP file, where every variable referring to a cell that the user edit will be validated. If they all are validated in the end, I update a SQL database with these new values.

Is there a way of doing this? Here is my script and some of the php:

<script>
    var buttons = document.getElementsByClassName("clicker");

    var buttonclicked = function(e){
        if(e.target.textContent == "Edit")
        {           
            e.target.textContent = "Save";
            var id = e.target.id;

            var editable_elements = document.querySelectorAll("[contenteditable=false]");
            for(var i = (id*7); i < (id*7)+7; i++){
                editable_elements[i].setAttribute("contentEditable", true);}

        }
        else
        {
            e.target.textContent = "Edit";
            var id = e.target.id;
            var editable_elements = document.querySelectorAll("[contenteditable=true]");
            for(var i = (id*7); i < (id*7)+7; i++){
                editable_elements[i].setAttribute("contentEditable", false);}
        }
        };

    for(var j = 0; j < buttons.length; j++)
    {
        buttons[j].addEventListener('click', buttonclicked);
    }
</script>

PHP (to show why I need to pass this variables to it):

    else if($_POST["criteria"] == 3 && (!empty($_POST["g3"]) || !empty($_POST["g4"])))
    {
        apologize("This can not happen...");
    }

    if(empty($_POST["g1"]))
        $g1 = -1;
    else
        $g1 = $_POST["g1"];

    if(empty($_POST["g2"]))
        $g2 = -1;
    else
        $g2 = $_POST["g2"];

    if(empty($_POST["g3"]))
        $g3 = -1;
    else
        $g3 = $_POST["g3"];

    if(empty($_POST["g4"]))
        $g4 = -1;
    else
        $g4 = $_POST["g4"];

    $subject = strtoupper($_POST["subject"]);

    $normal = media($_POST["criteria"], $g1, $g2, $g3, $g4);  

    query("INSERT INTO portfolio (id, subject, G1, G2, G3, G4, criteria, creditos, normal) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE G1 = VALUES(G1), G2 = VALUES(G2), G3 = VALUES(G3), G4 = VALUES(G4), criteria = VALUES(criteria), creditos = VALUES(creditos), normal = VALUES(normal)", $_SESSION["id"], $subject, $g1, $g2, $g3, $g4, $_POST["criteria"], $_POST["creditos"], $normal);

PS: editable_elements go from 0 to 6, and include "g1,g2,g3,g4,criteria,credits" and another variable not important to this thread(but I want to send it to the php as well)

And the HTML part that can be modified is this: (remember that all the variables you see in this table were sent from another php file)

<?php $i = 0;?>
<?php foreach ($rows as $row): ?>
<tr class="d1">
    <td><?php echo $row["subject"] ?></td>
    <td contenteditable = "false" id = "<?php echo 'g1'.$i; ?>">
    <?php 
        if($row["G1"] != -1)
            echo $row["G1"];  
        else
            echo " ";     
    ?>
    </td>
    <td contenteditable = "false" id = "<?php echo 'g2'.$i; ?>">
    <?php 
        if($row["G2"] != -1)
            echo $row["G2"]; 
        else
            echo " ";      
    ?>
    </td>
    <td contenteditable = "false" id = "<?php echo 'g3'.$i; ?>">
    <?php 
        if($row["G3"] != -1)
            echo $row["G3"];
        else
            echo " ";      
    ?>
    </td>
    <td contenteditable = "false" id = "<?php echo 'g4'.$i; ?>">
    <?php 
        if($row["G4"] != -1)
            echo $row["G4"];
        else
            echo " ";      
    ?>
    </td>
    <td>
    <?php 
        $round = round($row["normal"],2);
        echo $round;
    ?>
    </td>
    <td contenteditable = "false" id = "<?php echo 'creditos'.$i; ?>"><?= $row["creditos"] ?></td>
    <td contenteditable = "false" id = "<?php echo 'criteria'.$i; ?>"><?php echo $row["criteria"];?></td>
    <td><button class = "clicker" id = "<?php echo $i; ?>">Edit</button></td>
</tr>
<?php $i++; ?>
<?php endforeach ?>
3
  • So make an XMLHttpRequest.... Commented Nov 22, 2015 at 19:16
  • what is your html code? Commented Nov 22, 2015 at 19:17
  • your question is not clear Commented Nov 22, 2015 at 19:19

1 Answer 1

2

You can do this easily by 2 methods

  1. you can use ajax to send values to php file.

  2. you can create dynamic form using script and post all values by submitting it.

Sign up to request clarification or add additional context in comments.

2 Comments

I tried to do it with AJAX, but console is not logging the data, could you help me and try to explain me what is going wrong?: pastie.org/10574618 You can see the script down there
Are you printing any thing on edit.php. data variable will have all info you have echo / print on edit. php. As well as you can check various status of ajax. Please refer api.jquery.com/jquery.ajax for more details

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.