2012-02-26 4 views
1

Первый раз делает это, смотреть это будет на самом деле очевидно,/легко исправить ...Вставка нескольких строк по форме в Single DB

В основном я пытаюсь вставить несколько строк с помощью одного запроса вставки, однако, Я явно терпеть неудачу, и поэтому он не будет работать.

Форма генерируется путем поиска в таблице соответствующих записей, к которым относится, поэтому, если ваш отдел A будет захватить ваше имя и сформировать строку ввода в форме. Все это прекрасно работает, я могу создать форму, но проблема возникает, когда я пытаюсь вставить форму.

В настоящее время он делает эту вещь вместо того, чтобы вставлять данные, введенные через форму, которая вводит букву А в большинстве полей (COUNT, STATUS и TYPE невосприимчивы к этому, поскольку они ограничены только определенными типами данных через таблицы настроить себя).

Это в настоящее время, как у меня есть набор форм в сценарии:

<?php 
if ($action == "editrecord") { 
?> 
<form name="form1" method="post" action=""> 
<table> 
<tr><td colspan="2" align="left"> 
<?php //Getting Title for Record 
     $resultTITLE = queryDB("SELECT * FROM merit_subdepts WHERE subdeptID = '$subdeptID'"); 
     while($rowTITLE = mysql_fetch_array($resultTITLE)) { 
     $recordTITLE = $rowTITLE["subdeptNAME"]; 
      echo "$recordTITLE"; 
     } 
?> 
</td></tr> 
<tr><td>Member Name</td><td>Choose Award</td><td>Reason</td><td></td></tr> 
<?php 
     $resultMERIT = queryDB("SELECT * FROM merit_members WHERE memberPRIMARY = '$subdeptID'"); 
     while($rowMERIT = mysql_fetch_array($resultMERIT)) { 
     $memberID = $rowMERIT["memberID"]; 
     $memberNAME = $rowMERIT["memberNAME"]; 
      ?> 
      <tr> 
       <td><?php echo $memberNAME; ?></td> 
       <td><select name="count[]" class="ui-state-default"> 
         <option value="0">0</option> 
         <option value="1">1</option> 
         <option value="2">2</option> 
         <option value="3">3</option> 
         <option value="4">4</option> 
         <option value="5">5</option> 
         <option value="6">6</option> 
        </select> 
       </td> 
       <td><input name="reason[]" type="text" id="reason" class="blackInput" value="Monthly Award <?php echo date("F, Y") ?>"></td> 
       <td><input name="type[]" type="hidden" id="type" value="Civil"> 
        <input name="awarder[]" type="hidden" id="awarder" value="<?php $usersname; ?>"> 
        <input name="datea[]" type="hidden" id="datea" value="<?php $stamp83; ?>"> 
        <input name="status[]" type="hidden" id="status" value="Check"> 
        <input name="id[]" type="hidden" id="id" value"<?php $memberID; ?>"> 
        <input name="dept[]" type="hidden" id="dept" value"<?php $recordTITLE; ?>"> 
       </td> 
      </tr> 

     <?php } //end of sub-division membership list ?> 
<tr><td colspan="4"><center> 
     <div class="butDiv"><input name="submitRECORDS" type="submit" id="submitRECORDS" value="Submit Records"></div> 
     </center> 
    </td> 
    </tr> 
</table> 
</form> 
<?php 
} //End of Edit Merit Records 
?> 

Это запрос вставки используется:

if ($submitRECORDS) { 

for($i = 0; $i<count($_POST['id']); $i++) //Getting total # var submitted and running loop 
{ $fromID = $_POST['id'][$i]; //var 
    $fromTYPE = $_POST['type'][$i]; //var 
    $fromCOUNT = $_POST['count'][$i]; //var 
    $fromDATEA = $_POST['datea'][$i]; //var 
    $fromAWARDER = $_POST['awarder'][$i]; //var 
    $fromREASON = $_POST['reason'][$i]; //var 
    $fromDEPT = $_POST['dept'][$i]; //var 
    $fromSTATUS = $_POST['status'][$i]; //var 
if ($fromID != "0") { 
queryDB("INSERT INTO merit_precord (NAME,TYPE,COUNT,DATEA,AWARDER,REASON,DEPT,STATUS) VALUES ('$fromID','$fromTYPE','$fromCOUNT','$fromDATEA','$fromAWARDER','$fromREASON','$fromDEPT',$fromSTATUS')"); } } 
$action=""; 
$msg=1; 
} 

Помощь высоко ценится, прежде чем я рипы моих волос. :)

+0

Подробнее о PDO, bindParam и транзакциях. –

+0

на ваш код отправки, 'print_r ($ _ POST); exit; 'просто для проверки правильности результатов. Если это выглядит хорошо, повторите свой SQL-запрос, который вы используете, чтобы убедиться, что он выглядит правильно. Также посмотрите http://www.php.net/manual/en/function.mysql-real-escape-string.php, чтобы защитить ваш SQL-код –

+0

, спасибо, я поддержал проблему с впрыском, я знал, что это было, но я был больше заинтересованы в том, чтобы заставить его работать, прежде чем я его полностью обеспечил. Я также запускал print_r ($ _ POST); вы предложили, и я получил это в ответ: Array ([count] => Array [reason] => Array [type] => Array [winnerer] => Array [datea] => Array [status] => Array [id] => Array [dept] => Array [submitRECORDS] => Отправить записи) – Vacosa

ответ

0

Это может быть не единственный источник ваших проблем (только первый, который я заметил), но при использовании <?php $varname ?> ничего на самом деле не будет напечатано на экране. Вместо этого вы должны использовать <?php echo $varname; ?>

  <td><input name="type[]" type="hidden" id="type" value="Civil"> 
       <input name="awarder[]" type="hidden" id="awarder" value="<?php echo $usersname; ?>"> 
       <input name="datea[]" type="hidden" id="datea" value="<?php echo $stamp83; ?>"> 
       <input name="status[]" type="hidden" id="status" value="Check"> 
       <input name="id[]" type="hidden" id="id" value"<?php echo $memberID; ?>"> 
       <input name="dept[]" type="hidden" id="dept" value"<?php echo $recordTITLE; ?>"> 
      </td> 

A вы видите вставлено является первой буквой Array. Когда указанные выше значения вставляются пустым и вы пытаетесь получить к ним доступ в цикле for с [], строка Array обращается к символьному индексу, подобному массиву.

Ваши заявления INSERT, как указано в комментариях, уязвимы для SQL-инъекций. Побег их с mysql_real_escape_string().

$fromID = mysql_real_escape_string($_POST['id'][$i]); 
    $fromTYPE = mysql_real_escape_string($_POST['type'][$i]); 
    $fromCOUNT = mysql_real_escape_string($_POST['count'][$i]); 
    ... 
    ... 
    $fromSTATUS = mysql_real_escape_string($_POST['status'][$i]);