테스트 사이트 - 개발 중인 베타 버전입니다

동적 테이블 row 추가/삭제 스크립트 채택완료

그누구나 4년 전 조회 3,685

아래와 같은 다국어 학습사전을 만드는 중입니다.

 

[view 화면]

위 view 화면을 뿌려주기 위한 데이터 입력 페이지인 write 화면은 아래와 같습니다.

[write 화면]

 

항목입력 화면에서는 단어의 뜻을 순번과 품사, 뜻, 참조어; 또는 예시 표현, 그 해석을 입력하도록 합니다.

단의의 뜻과 예문을 어느 곳에서건 추가하기 위해서 테이블 하단에만 새 row가 추가되는 것이 아니라,

추가 버턴을 누르는 위치 바로 아래에 새로운 row가 추가되서 새 항목들을 입력해야 합니다.

 

이미 DB에 데이터가 입력된 단어를 열어 수정할 경우에는 위 그림과 같이 잘 표시되고 추가 입력도 잘 작동합니다.

 

문제는, 새로운 단어를 등록하려고 write 페이지를 열면, 아래 그림과 같이 테이블의 입력 row가 나타나질 않습니다.

이 문제를 해결할 수 있는지요? 

 

해당 부분의 스크립트 입니다.

write.skin.php 

</p>

<p><?php 

//$wr_6; //품사/예문

//$wr_7; //의미/표현

//$wr_8; //연관어(유의어,상대어,속어)/번역문

    if ($w == "u") {

    $wr_6x = explode("|",substr($write['wr_6'],1));

    $wr_7x = explode("|",substr($write['wr_7'],1));

    $wr_8x = explode("|",substr($write['wr_8'],1));

    }

?>

<div style="height:10px;"> </div>    

<label for="wr_4" class="user-label">항목 입력</label></p>

<p><!-----//source <a href="https://coursesweb.net/javascript/add-delete-rows-table-javascript" target="_blank" rel="noopener noreferrer">https://coursesweb.net/javascript/add-delete-rows-table-javascript</a> ---------->

<table id="table1" border="0" style="border:0px solid #ccc">

        <!--col width="4%"></col-->

        <col width="8%"></col>

        <col width="38%"></col>

        <col width="38%"></col>

        <col width="8%"></col>

        <col width="8%"></col>

    <tr>

        <!--th>ID</th-->

        <th style="border:1px solid #ccc">구분</th>

        <th style="border:1px solid #ccc">번역/표현</th>

        <th style="border:1px solid #ccc">참조어/해석</th>

        <th style="border:1px solid #ccc">Delete</th>

        <th style="border:1px solid #ccc">Add Rows</th>

    </tr></p>

<p>

    <?php if ($w == "u") { ?>

    <div></p>

<p>    <?php for ($i = 0;  $i < count($wr_6x); $i++) { ?>

    <tr>

        <!--td class="tbl_id" style="text-align:center">1</td-->

        <td style="border:1px solid #ccc"><input class='frm_input_a' name='wr_6x[]' type='text' required itemname='구분' value='<?php echo $wr_6x[$i];?>' maxlength='20'></td>

        <td style="border:1px solid #ccc"><input class='frm_input_b' name='wr_7x[]' type='text' itemname='번역/표현' value='<?php echo $wr_7x[$i]; ?>' maxlength='120'></td>

        <td style="border:1px solid #ccc"><input class='frm_input_b' name='wr_8x[]' type='text' itemname='참조어/해석' value='<?php echo $wr_8x[$i]; ?>' maxlength='120'></td>

        <td style="border:1px solid #ccc"><input type="button" value="Delete" onclick="ob_adRows.delRow(this)"/></td>

        <td style="border:1px solid #ccc"><input type="button" value="Add Row" onclick="ob_adRows.addRow(this)"/></td>

    </tr>

    <?php } ?></p>

<p>    </div>

    <?php } ?></p>

<p><table id=dyntbl1 width="100%" cellspacing=1 cellpadding=3 bgcolor="#EEEEEE">

        <col align="center" width="8%"></col>

        <col align="center" width="38%"></col>

        <col align="center" width="38%"></col>

        <col align="center" width="8%"></col>

        <col align="center" width="8%"></col>

</table></p>

<p><div>

    <input style="float:right; margin:5px 2px" type="button" value="Add Row at end" onclick="ob_adRows.addRow()"/>

</div></p>

<p><script>

//JS class to add/delete rows in html table - <a href="https://coursesweb.net/javascript/ " target="_blank" rel="noopener noreferrer">https://coursesweb.net/javascript/ </a>

//receives table id

function adRowsTable(id){

  var table = document.getElementById(id);

  var me = this;

  if(document.getElementById(id)){

    var row1 = table.rows[1].outerHTML;</p>

<p>    //adds index-id in cols with class .tbl_id

    function setIds(){

      var tbl_id = document.querySelectorAll('#'+ id +' .tbl_id');

      for(var i=0; i<tbl_id.length; i++) tbl_id[i].innerHTML = i+1;

    }</p>

<p>    //add row after clicked row; receives clicked button in row

    me.addRow = function(btn){

      btn ? btn.parentNode.parentNode.insertAdjacentHTML('afterend', row1): table.insertAdjacentHTML('beforeend',row1);

      setIds();

    }</p>

<p>    //delete clicked row; receives clicked button in row

    me.delRow = function(btn){

      btn.parentNode.parentNode.outerHTML ='';

      setIds();

    }

  }

}</p>

<p>//create object of adRowsTable(), pass the table id

var ob_adRows = new adRowsTable('table1');

</script></p>

<p>

 

 

write_update.skin.php 

</p>

<p>//$wr_6; //품사/예문

//$wr_7; //의미/표현

//$wr_8; //연관어(유의어,상대어,속어)/번역문

for ($i = 0;  $i < count($wr_6x); $i++)

{

    $wr_6 = $wr_6."|".$wr_6x[$i];

    $wr_7 = $wr_7."|".$wr_7x[$i];

    $wr_8 = $wr_8."|".$wr_8x[$i];

}

$sql678 = "update $write_table set

    wr_6  = '$wr_6',

    wr_7  = '$wr_7',

    wr_8  = '$wr_8'                     

    where wr_id = '$wr_id' ";

sql_query($sql678);</p>

<p>

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
m
4년 전

</p>

<pre>
<code><?php if ($w == "u") { ?>
    <div>
    <?php for ($i = 0;  $i < count($wr_6x); $i++) { ?>
    <tr>
        <!--td class="tbl_id" style="text-align:center">1</td-->
        <td style="border:1px solid #ccc"><input class='frm_input_a' name='wr_6x[]' type='text' required itemname='구분' value='<?php echo $wr_6x[$i];?>' maxlength='20'></td>
        <td style="border:1px solid #ccc"><input class='frm_input_b' name='wr_7x[]' type='text' itemname='번역/표현' value='<?php echo $wr_7x[$i]; ?>' maxlength='120'></td>
        <td style="border:1px solid #ccc"><input class='frm_input_b' name='wr_8x[]' type='text' itemname='참조어/해석' value='<?php echo $wr_8x[$i]; ?>' maxlength='120'></td>
        <td style="border:1px solid #ccc"><input type="button" value="Delete" onclick="ob_adRows.delRow(this)"/></td>
        <td style="border:1px solid #ccc"><input type="button" value="Add Row" onclick="ob_adRows.addRow(this)"/></td>
    </tr>
    <?php } ?>
    </div>
    <?php } ?></code></pre>

<p>

<?php 
$wr6_cnt = count($wr_6x);
if(!$wr6_cnt){
$wr6_cnt = 1;
}
for ($i = 0;  $i < $wr6_cnt; $i++) { ?>
    <tr>
        <!--td class="tbl_id" style="text-align:center">1</td-->
        <td style="border:1px solid #ccc"><input class='frm_input_a' name='wr_6x[]' type='text' required itemname='구분' value='<?php echo $wr_6x[$i];?>' maxlength='20'></td>
        <td style="border:1px solid #ccc"><input class='frm_input_b' name='wr_7x[]' type='text' itemname='번역/표현' value='<?php echo $wr_7x[$i]; ?>' maxlength='120'></td>
        <td style="border:1px solid #ccc"><input class='frm_input_b' name='wr_8x[]' type='text' itemname='참조어/해석' value='<?php echo $wr_8x[$i]; ?>' maxlength='120'></td>
        <td style="border:1px solid #ccc"><input type="button" value="Delete" onclick="ob_adRows.delRow(this)"/></td>
        <td style="border:1px solid #ccc"><input type="button" value="Add Row" onclick="ob_adRows.addRow(this)"/></td>
    </tr>
    <?php } ?>
</code>
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

그누구나
4년 전
감사합니다. 이렇게 수정해봤더니 테이블은 온전히 표시되고 또 잘 작동합니다.
하지만,
데이블 위에

Warning: count(): Parameter must be an array or an object that implements Countable in E:\www\5424mto54f1ym\skin\board\g5_dictionary-32431\write.skin.php on line 407

경고가 뿌려지네요.
이걸 해결할 방법은 없으신지?

댓글을 작성하려면 로그인이 필요합니다.

그누위즈

해당 부분에 보시면

조건문으로 if ($w == 'u') 라고 되어있습니다.

이 부분은 글쓰기 상태가 수정인 경우 해당 입력란이 출력되는 것이고,

신규 글쓰기시 해당 입력란이 나타나게 하려면

else 구문을 추가하여, 기본 input을 넣어두시면됩니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인