0

このフォームをデータベースに投稿し、XHR を使用して更新せずに新しく追加された情報を取得する必要があります。

ページには、編集可能ないくつかの初期要素が読み込まれ、ボタンを押すことで「新しい」要素を動的に追加できます (新しいユーザーは、既存のタスクがないため、これを行う必要があります。session_id であなたが誰であるかを追跡します) )。

私はこれで13時間以上過ごしましたが、ちょっと疲れました。

コード:

インデックス.php

<?php 
    //Sets unique session for the current visitor and keeps track of information for use with database
    $time = time();  
    $date = $today = date("Ymd");  
    $id = $time + $date;  

    $id = session_id();
    if(empty($id)) session_start();

    //echo "SID: ".SID."<br>session_id(): ".session_id()."<br>COOKIE: ".$_COOKIE["PHPSESSID"];


?>
<!doctype html>
<html>
    <head>
    <meta charset='utf-8'> 
    <title>Simple To-Do List</title>
    <?php
        // Create connection via my connect.php file
        require 'connect.php';

            // Create query
            $query= "select * from checklist where SID = '".session_id()."'"; 
            $result = mysql_query($query);

            // Create requisite array for checklist
            $checklistItems = array();

           //Check to ensure query won't implode and is valid
           if($result === FALSE) {
             die(mysql_error()); 
            }

             // Calculates number of rows from query  
            $num=mysql_numrows($result);

            mysql_close($con);

    ?>
        <!-- javascript code to dynamically add new form fields as well as check\uncheck all boxes -->
            <script src="//code.jquery.com/jquery-latest.min.js" language="javascript" type="text/javascript"></script>  
            <script src="addInput.js" language="Javascript" type="text/javascript"></script>



    </head>
    <body>   

        <h1>My To-Dos</h1>


     <form name="checklist" id="checklist" class="checklist">
        <?php // Loop through query results   
              while($row = mysql_fetch_array($result))
                  {
                  $entry = $row['Entry'];
                  $CID = $row['CID'];
                  $checked =$row['Checked'];
                 // echo $CID;
                  echo "<input type=\"text\" value=\"$entry\" name=\"textfield$CID;\" id=\"textfield$CID;\" onchange=\"showUser(this.value)\" />";
                  echo "<input type=\"checkbox\" name=\"checkbox$CID;\" id=\"checkbox$CID;\"  value=\"$checked\"".(($checked == '1')? ' checked="checked"' : '')."  />";
                  echo "<br>";
                  }
        ?> 
        <div id="dynamicInput"></div>
        <input type="submit" id="checklistSubmit" name="checklistSubmit" class="checklist-submit"> <input type="button" id="CompleteAll" name="CompleteAll" value="Check All" onclick="javascript:checkAll('checklist', true);"><input type="button" id="UncheckAll" name="UncheckAll" value="Uncheck All" onclick="javascript:checkAll('checklist', false);">                  
     <input type="button" value="Add another text input" onClick="addInput('dynamicInput');"></form>


    </body>
</html>

connect.php

<?php 

// Create connection
$con=mysql_connect("localhost","root","");
$selected = mysql_select_db("madmonk",$con); 

// Check connection
if (mysqli_connect_errno($con))
{
    echo "Failed to connect to MySQL: " . mysql_connect_error();
}

?>

addInput.js

// Creates new dynamic elements within HTML body
var counter = 0;
var limit = 8;

function addInput(divName){ 
     i=counter; i++;
     if (counter == limit)  {
          alert("You have reached the limit of adding " + counter + " inputs");
     }
     else {

          var newdiv = document.createElement('div');
          newdiv.innerHTML = " <input type='text'name='myInputs["+i+"]'><input type='checkbox' name='myInputs["+i+"]'><br>";
          document.getElementById(divName).appendChild(newdiv);
          counter++;
     }
}

//Checks\unchecks all checkboxes on the web page
function checkAll(formname, checktoggle)
    {
        var checkboxes = new Array(); 
        checkboxes = document[formname].getElementsByTagName('input');
        for (var i=0; i<checkboxes.length; i++)  {
        if (checkboxes[i].type == 'checkbox')   {
        checkboxes[i].checked = checktoggle;
          }
       }
    }


//AJAX code to communicate with server without page refresh
$('checklistSubmit').click(function(e) {
    $(e).stopPropagation();

    $.post({
        url: 'processor.php',
        data: $('#checklist').serialize(),
        dataType: 'html',
        success: function(data, status, jqXHR) {
           $('div.successmessage').html(data);
           //success callback function
           alert (success);
        }, 
        error: function() {
           //error callback function
           alert (failure);
        } 
    });
});

上記の AJAX コードに問題があることは事実です。これは重要です。これを機能させることはできません。私はこれまでにこのようなことをしようとしたことは一度もありませんでした. うーん。

processor.php

<?php
require 'connect.php';

$entry  = $_POST['entry'];
$checked = $_POST['checked'];


$num_items = count($entry);
for ($i = 0; $i < $num_items; $i++)
{
    $sql="INSERT INTO checklist (Entry, Checked, SID)
VALUES ($checked, $entry, session_id()) WHERE SID = '".session_id()."'";}


mysql_close($con);

?>

^これはラフで完全に未完成です。

  1. 動的フィールドを操作してループし、mysql および php を介してデータベースにパイプするにはどうすればよいですか?

  2. 追加されたばかりの新しい項目をシームレスに追加するために新しい値で index.php ページを更新するにはどうすればよいですか?

  3. AJAX を機能させるにはどうすればよいですか?

私のために非常に具体的にお願いします。私はAJAXを使用するのが非常に初めてです。

4

4 に答える 4

1

1) 動的フィールドと対話するには、それらすべてにclass="dynamicField"andmyId = <whatever the id you care about is>または something のようなクラスを与えてから追加します

$(".dynamicField").change(function(){
  $.post("updateDB.php", 
    { 
      "dataToGoInDB": $(this).val(),
      "idYouCareAbout": $(this).attr("myId")
    },
    function(data){
      console.log(data.responseBackFromDB);
  }, "json");

});

次に、POST変数を確認するphpページupdateDB.phpを作成し、それらを適切にサニタイズしてSQLインジェクションを回避し、DBで必要なことを何でも行います。

DOM の作成後に動的フィールドを追加する予定がある場合は、代わりに次のようにします。

$("document").on("change", ".dynamicField", function(){
  $.post("updateDB.php", 
    { 
      "dataToGoInDB": $(this).val(),
      "idYouCareAbout": $(this).attr("myId")
    },
    function(data){
      console.log(data.responseBackFromDB);
  }, "json");

});

これにより、.change が .dynamicField の新しいインスタンスにアタッチされます。( http://api.jquery.com/on/ )

2) 新しいフィールドを追加するには、append http://api.jquery.com/append/などの jQuery DOM 操作方法のいずれかを試してください。

3) #1 に対する私の回答を参照してください

それが役立つことを願っています。

于 2013-06-01T06:14:22.053 に答える