Вставка нескольких строк по форме в одну БД - PullRequest
1 голос
/ 26 февраля 2012

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

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

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

В настоящее время он делает это, когда вместо вставки данных, введенных через форму, он вводит букву А в большинстве полей (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;
}

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

1 Ответ

0 голосов
/ 26 февраля 2012

Возможно, это не единственный источник ваших проблем (только первое, что я заметил), но при использовании <?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]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...