2012-03-09 4 views
0

У меня есть форма с строки под названием target1 и JavaScript, который добавляет строки динамически, т.е. target2, target3 и т.д., и то же самое для strategy и resource.РНР динамической базы данных Вставка

Я хочу ввести их в базу данных, используя php и mysql. Поскольку количество представленных строк является динамическим, я думаю, что мне нужен оператор foreach или цикл while.

Я попытался использовать foreach() без везения.

Вот код.

Динамический ряд JavaScript/PHP файла:

<?php 
header('Content-type: application/x-javascript'); 
if($_REQUEST['type'] == "targets"){ 
?> 
function addRowToTargetTable() 
{ 
    var tbl = document.getElementById('targets'); 
    var lastRow = tbl.rows.length; 
    // if there's no header row in the table, then iteration = lastRow + 1 
    var iteration = lastRow; 
    var row = tbl.insertRow(lastRow); 

    // left cell 
    var cellLeft = row.insertCell(0); 
    var textNode = document.createTextNode(iteration + "."); 
    var targetid = document.createElement('input'); 
    targetid.type = 'hidden'; 
    targetid.name = 'target' + iteration; 
    targetid.id = 'target' + iteration; 
    targetid.value = 'target' + iteration; 
    cellLeft.appendChild(textNode); 
    cellLeft.appendChild(targetid); 

    // right cell 
    var cellRight = row.insertCell(1); 
    var el = document.createElement('textarea'); 
    el.name = 'target' + iteration; 
    el.id = 'target' + iteration; 
    el.className = 'validate[required]'; 
    el.style.cssText="margin:4px; max-width:400px; width:400px; max-height:35px; height:35px;"; 
    cellRight.appendChild(el); 

    // far right cell 
    var cellFarRight = row.insertCell(2); 
    var el2 = document.createElement('textarea'); 
    el2.name = 'targetcriteria' + iteration; 
    el2.id = 'targetcriteria' + iteration; 
    el2.className = 'validate[required]'; 
    el2.style.cssText="margin:4px; max-width:400px; width:400px; max-height:35px; height:35px;"; 
    cellFarRight.appendChild(el2); 

} 
function removeRowFromTargetTable() 
{ 
    var tbl = document.getElementById('targets'); 
    var lastRow = tbl.rows.length; 
    if (lastRow > 2) tbl.deleteRow(lastRow - 1); 
} 
<?php 
}elseif($_REQUEST['type'] == "strategies"){ 
?> 
function addRowToStrategyTable() 
{ 
    var tbl = document.getElementById('strategies'); 
    var lastRow = tbl.rows.length; 
    // if there's no header row in the table, then iteration = lastRow + 1 
    var iteration = lastRow; 
    var row = tbl.insertRow(lastRow); 

    // left cell 
    var cellLeft = row.insertCell(0); 
    var textNode = document.createTextNode(iteration + "."); 
    var strategyid = document.createElement('input'); 
    strategyid.type = 'hidden'; 
    strategyid.name = 'strategy' + iteration; 
    strategyid.id = 'strategy' + iteration; 
    strategyid.value = 'strategy' + iteration; 
    cellLeft.appendChild(textNode); 
    cellLeft.appendChild(strategyid); 

    // right cell 
    var cellRight = row.insertCell(1); 
    var el = document.createElement('textarea'); 
    el.name = 'strategy' + iteration; 
    el.id = 'strategy' + iteration; 
    el.className = 'validate[required]'; 
    el.style.cssText="margin:4px; max-width:400px; width:400px; max-height:35px; height:35px;"; 
    cellRight.appendChild(el); 

} 
function removeRowFromStrategyTable() 
{ 
    var tbl = document.getElementById('strategies'); 
    var lastRow = tbl.rows.length; 
    if (lastRow > 2) tbl.deleteRow(lastRow - 1); 
} 

<?php }elseif($_REQUEST['type'] == "resources"){ 
?> 
function addRowToResourceTable() 
{ 
    var tbl = document.getElementById('resources'); 
    var lastRow = tbl.rows.length; 
    // if there's no header row in the table, then iteration = lastRow + 1 
    var iteration = lastRow; 
    var row = tbl.insertRow(lastRow); 

    // left cell 
    var cellLeft = row.insertCell(0); 
    var textNode = document.createTextNode(iteration + "."); 
    var resourceid = document.createElement('input'); 
    resourceid.type = 'hidden'; 
    resourceid.name = 'resource' + iteration; 
    resourceid.id = 'resource' + iteration; 
    resourceid.value = 'resource' + iteration; 
    cellLeft.appendChild(textNode); 
    cellLeft.appendChild(resourceid); 

    // right cell 
    var cellRight = row.insertCell(1); 
    var el = document.createElement('textarea'); 
    el.name = 'resource' + iteration; 
    el.id = 'resource' + iteration 
    el.style.cssText="margin:4px; max-width:400px; width:400px; max-height:35px; height:35px;"; 
    cellRight.appendChild(el); 

} 
function removeRowFromResourceTable() 
{ 
    var tbl = document.getElementById('resources'); 
    var lastRow = tbl.rows.length; 
    if (lastRow > 2) tbl.deleteRow(lastRow - 1); 
} 
<?php 
} 
?> 

Вот форма:

<div id="non-indent"> 
<form action="complete-iep-operations.php?operation=create&action=insert" method="post" id="validate" enctype="multipart/form-data"> 
<table border="1" class="listing full" id="register" style="border-collapse:collapse;"> 
    <tr class="no-pointer"> 
    <th scope="col" width="48"> 
     <h4>IEP No.</h4> 
    </th> 
    <th scope="col" width="153"> 
     <h4>IEP Date</h4> 
    </th> 
    <th scope="col" width="124"> 
     <h4>Renewal Date</h4> 
    </th> 
    <th scope="col" width="116"> 
     <h4>IEP Meeting Conducted</h4> 
    </th> 
    </tr> 
    <tr> 
    <td> 
    <p><input name="iep_number" type="text" id="iep_number" maxlength="2" class="validate[required]" style="margin-top:5px; width:40px;" /></p> 
    </td> 
    <td> 
    <p> 
     <input type="text" style="margin-top:5px; width:30px;" class="validate[required]" name="iep-day" id="iep-day" maxlength="2" /> 
     - 
     <input type="text" style="margin-top:5px; width:30px;" class="validate[required]" name="iep-month" id="iep-day" maxlength="2" /> 
     - 
     <input type="text" style="margin-top:5px; width:60px;" class="validate[required]" name="iep-year" id="iep-day" maxlength="4" /> 
    </p> 
    </td> 
    <td> 
    <p> 
     <input type="text" style="margin-top:5px; width:30px;" class="validate[required]" name="renewal-day" id="renewal-day" maxlength="2" /> 
- 
<input type="text" style="margin-top:5px; width:30px;" class="validate[required]" name="renewal-month" id="renewal-day" maxlength="2" /> 
- 
<input type="text" style="margin-top:5px; width:60px;" class="validate[required]" name="renewal-year" id="renewal-day" maxlength="4" /> 
    </p> 
    </td> 
    <td> 
    <p> 
     <input type="text" style="margin-top:5px; width:30px;" class="validate[required]" name="completed-day3" id="completed-day3" maxlength="2" /> 
- 
<input type="text" style="margin-top:5px; width:30px;" class="validate[required]" name="completed-day3" id="completed-day3" maxlength="2" /> 
- 
<input type="text" style="margin-top:5px; width:60px;" class="validate[required]" name="completed-day3" id="completed-day3" maxlength="4" /> 
    </p> 
    </td> 
    </tr> 
</table> 
<br /> 
<h3>Targets</h3> 
<br /> 
<table border="1" class="listing full" id="targets" style="border-collapse:collapse;"> 
    <tr class="no-pointer"> 
    <th scope="col" width="102"> 
     <h4>Target Number</h4> 
    </th> 
    <th scope="col"> 
     <h4>Target Details</h4> 
    </th> 
    <th scope="col"> 
     <h4>Target Achievement Criteria</h4> 
    </th> 
    </tr> 
    <tr> 
    <td> 
    <p>1.</p> 
    <input type="hidden" value="target1" id="target1" /> 
    </td> 
    <td> 
     <label for="target1"></label> 
     <textarea name="target1" id="target1" class="validate[required]" style="margin:4px; max-width:400px; width:400px; max-height:35px; height:35px;"></textarea> 
    </td> 
    <td> 
     <label for="targetcriteria1"></label> 
     <textarea name="targetcriteria1" id="targetcriteria1" class="validate[required]" style="margin:4px; max-width:400px; width:400px; max-height:35px; height:35px;"></textarea> 
    </td> 
    </tr> 
</table> 
<br /> 
<table border="1" class="listing full" id="register" style="border-collapse:collapse;"> 
<tr> 
<td> 
<div align="right"> 
<input type="button" value="Remove Target Row" id="submit" onclick="removeRowFromTargetTable();" style="margin:0px; margin-right:10px; float:right;" /> 
<input type="button" value="Add Another Target" id="submit" onclick="addRowToTargetTable();" style="margin:0px; margin-right:20px; float:right;" /> 
</div> 
</td> 
</tr> 
</table> 
<br /> 
<h3>Strategies</h3> 
<br /> 
<table border="1" class="listing full" id="strategies" style="border-collapse:collapse;"> 
    <tr class="no-pointer"> 
    <th scope="col" width="102"> 
     <h4>Strategy Number</h4> 
    </th> 
    <th scope="col"> 
     <h4>Strategy Details</h4> 
    </th> 
    </tr> 
    <tr> 
    <td> 
    <p>1.</p> 
    <input type="hidden" value="strategy1" id="strategy1" /> 
    </td> 
    <td> 
     <label for="strategy1"></label> 
     <textarea name="strategy1" id="strategy1" class="validate[required]" style="margin:4px; max-width:400px; width:400px; max-height:35px; height:35px;"></textarea> 
    </td> 
    </tr> 
</table> 
<br /> 
<table border="1" class="listing full" id="register" style="border-collapse:collapse;"> 
<tr> 
<td> 
<div align="right"> 
<input type="button" value="Remove Strategy Row" id="submit" onclick="removeRowFromStrategyTable();" style="margin:0px; margin-right:10px; float:right;" /> 
<input type="button" value="Add Another Strategy" id="submit" onclick="addRowToStrategyTable();" style="margin:0px; margin-right:20px; float:right;" /> 
</div> 
</td> 
</tr> 
</table> 
<br /> 
<h3>Resources</h3> 
<br /> 
<table border="1" class="listing full" id="resources" style="border-collapse:collapse;"> 
    <tr class="no-pointer"> 
    <th scope="col" width="102"> 
     <h4>Resource Number</h4> 
    </th> 
    <th scope="col"> 
     <h4>Resource Details</h4> 
    </th> 
    </tr> 
    <tr> 
    <td> 
    <p>1.</p> 
    <input type="hidden" value="resource1" id="resource1" /> 
    </td> 
    <td> 
     <label for="resource1"></label> 
     <textarea name="resource1" id="resource1" style="margin:4px; max-width:400px; width:400px; max-height:35px; height:35px;"></textarea> 
    </td> 
    </tr> 
</table> 
<br /> 
<table border="1" class="listing full" id="register" style="border-collapse:collapse;"> 
<tr> 
<td> 
<div align="right"> 
<input type="button" value="Remove Resource Row" id="submit" onclick="removeRowFromResourceTable();" style="margin:0px; margin-right:10px; float:right;" /> 
<input type="button" value="Add Another Resource" id="submit" onclick="addRowToResourceTable();" style="margin:0px; margin-right:20px; float:right;" /> 
</div> 
</td> 
</tr> 
</table> 
<br /> 
<table border="0" class="full" id="register" style="border-collapse:collapse;"> 
<tr> 
<td> 
<div align="right"> 
<input name="submit" type="submit" id="submit" style="margin:0px; margin-right:10px; float:right;" /></div> 
</td> 
</tr> 
</table> 
</form> 
</div> 

И код PHP:

<?php 
mysql_connect('host', 'XXXXX', 'XXXXX') or die(mysql_error()); 
mysql_select_db('db401728075') or die(mysql_error()); 

if($_REQUEST['operation']=="create" && $_REQUEST['action']=="insert") { 

$targeti = 1; 
while(true) { 
    if(isset($_POST['target'.$targeti])) { 
     $target = $_POST['target'.$targeti]; 
     echo $target; 
     echo "<BR>"; 
     $targeti++; 
    } else { 
     break; 
    } 
} 

Любая помощь вы можете дать мне бы высоко оценили.

+7

** Не размещайте информацию подключения к базе данных как хоста, имя пользователя и пароль на веб-странице общественного ** – tonymarschall

+0

имя USE = «цели []» в подарок! alle целевые входы, и он возвращает массив, где вы можете зацикливаться на – Ruben

ответ

1

Вы не можете перебирать $ _POST ['target'], потому что его не существует. Вам нужно что-то вроде этого:

$targeti = 1; 
while(true) { 
    if(isset($_POST['target'.$targeti])) { 
     $target = $_POST['target'.$targeti]; 
     // process $target value here 
     $targeti++; 
    } else { 
     break; 
    } 
} 

и тот же код для других типов

Редакции: Если вы не хотите обрабатывать значение $ цели внутри цикла, вы можете сохранить его в массиве ($ target [] = $ target). Основная идея обработки в цикле или сохранение в массиве состоит в том, что если вы будете динамически создавать переменные ($ {'target'. $ Targeti} = $ _POST [...]), вам нужно сохранить переменную счетчика ($ targeti) и использовать его позже, чтобы найти все созданные переменные, и такой код не ясен.

+0

Спасибо за этот код. Однако это заставляет сайт зацикливаться и не загружать страницу Ошибка 500. Любые идеи, почему? –

+0

Посмотрите обновленный код. Я забыл добавить заявление о нарушении. Извините, что –

+0

все еще получает ошибку 500 –

0

В вашем php-коде вы не выполняете никаких действий вставки mysql. Также $targeti = "2"; должен быть чем-то вроде $targeti++;, иначе вы всегда будете цитировать с target2.

+0

причине, по которой я не включал вставки, потому что он не идентифицирует $ _post в эхом, который я делаю дальше страницы. то есть когда он вставляет его. (если существуют должности) –

+0

и отредактированный вопрос –

0

Возможно, я ошибаюсь, но я подтвержу.

HTML должен быть написан как:

<textarea name="target []" id="target" class="validate[required]" style="margin:4px; max-width:400px; width:400px; max-height:35px; height:35px;"></textarea> 

таким образом ваши значения закачанный в виде массива.

и PHP для этого будет:

<?php 
if(isset($_POST['target'])) { 
     $target = $_POST['target'];    
     foreach($target as $targetvalue){ 
      echo $targetvalue; // do something with the target value here. 
     } 
    } 
?> 
+0

Почему вы назначаете значения локальной переменной, только для циклирования? На самом деле это не причина, не так ли? –

+0

Атрибут атрибута должен быть «target []» not id, потому что браузеры отправляют имя на сервер –

+0

My bad. Написал это в спешке. Благодарю . Решает ли проблема? –

Смежные вопросы