вставка нескольких флажков - PullRequest
1 голос
/ 12 июля 2011

Вот простая форма, содержащая несколько вариантов флажков и текстовое поле ввода:

    <form method="post" name="form1" action="<?php echo $editFormAction; ?>">
    <table>
    <tr><th colspan="2">BREATHING CIRCULATION</th></tr>
    <tr><th>#</th><th>Instruction Name</th></tr>
    <tr><td><input name="InstrCheck[]" type="checkbox" id="InstrCheck" value="Respirations normal rate"></td><td>Respirations normal rate</td></tr>
    <tr><td><input name="InstrCheck[]" type="checkbox" id="InstrCheck" value="Respirations effort normal"></td><td>Respirations effort normal</td></tr>
<tr><td><input name="InstrCheck[]" type="checkbox" id="InstrCheck" value="Breath Sounds-normal"></td><td>Breath Sounds-normal</td></tr>
    <tr><td><input name="InstrCheck[]" type="checkbox" id="InstrCheck" value="Skin colour-normal"></td><td>Skin colour-normal</td></tr>
    <tr><td><input name="InstrCheck[]" type="checkbox" id="InstrCheck" value="Heart rhythm & rate normal"></td><td>Heart rhythm & rate normal </td></tr>
    <tr><td><input name="InstrCheck[]" type="checkbox" id="InstrCheck" value="No Oedema"></td><td>No Oedema </td></tr>
    </table>
    <textarea name="InstrCheck[]" id="InstrCheck" placeholder="set your own instruction">                          </textarea>
<input type="hidden" name="MM_insert" value="form1">
<input type="hidden" value="<?php echo $_GET['a'];?>" name="pat_id">
</form>

Моя проблема в том, как вставить проверенные опции (может быть больше одного) И значение текстовой области (если оно введено) и вставить все эти входные значения в один и тот же столбец в БД, но каждый вход в «отдельной строке». Я пробовал этот код, но не работает, ничего не вставьте (пустая ячейка):

<?php
$editFormAction = $_SERVER['PHP_SELF'];
    if (isset($_SERVER['QUERY_STRING'])) {
    $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
    }
    $pat_id = $_GET['a'];
    $Date = date("d-m-Y");
    $Time = date("H:i:s");
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
    foreach ($_POST['InstrCheck'] as $value) {
  $insertSQL = "INSERT INTO instruction (instName, instTime, instDate, pat_id) VALUES ('$value', '$Time', '$Date', '$pat_id')";
    }
  mysql_select_db($database_PPS, $PPS);
  $Result1 = mysql_query($insertSQL, $PPS) or die(mysql_error());


  $insertGoTo = "Patint_selection.php?a=$pat_id";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
?>

Ответы [ 3 ]

0 голосов
/ 12 июля 2011

Вы можете использовать эту форму HTML ...

<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
    <table>
        <thead>
            <tr><th colspan="2">BREATHING CIRCULATION</th></tr>
            <tr><th>#</th><th>Instruction Name</th></tr>
        </thead>
        <tbody>
            <tr><td><input name="InstrCheck0" type="checkbox" id="InstrCheck0" value="Respirations normal rate" /></td><td>Respirations normal rate</td></tr>
            <tr><td><input name="InstrCheck1" type="checkbox" id="InstrCheck1" value="Respirations effort normal" /></td><td>Respirations effort normal</td></tr>
            <tr><td><input name="InstrCheck2" type="checkbox" id="InstrCheck2" value="Breath Sounds-normal" /></td><td>Breath Sounds-normal</td></tr>
            <tr><td><input name="InstrCheck3" type="checkbox" id="InstrCheck3" value="Skin colour-normal" /></td><td>Skin colour-normal</td></tr>
            <tr><td><input name="InstrCheck4" type="checkbox" id="InstrCheck4" value="Heart rhythm & rate normal" /></td><td>Heart rhythm & rate normal </td></tr>
            <tr><td><input name="InstrCheck5" type="checkbox" id="InstrCheck5" value="No Oedema" /></td><td>No Oedema </td></tr>
        </tbody>
    </table>
    <textarea name="InstrCheck6" id="InstrCheck6" placeholder="set your own instruction"></textarea>
    <input type="hidden" name="MM_insert" value="form1" />
    <input type="hidden" name="pat_id" value="<?php echo $_GET['a']; ?>" />
</form>

... и обработать ее с помощью этого сценария PHP:

<?php

    $Date = date("d-m-Y");
    $Time = date("H:i:s");
    //    Has the form been sent?
    if (isset($_POST["MM_insert"])) {
        //    We can't test what's in $_POST["MM_insert"] before we even know it exists
        if ($_POST["MM_insert"] == "form1")
        {
            //    ONE connection to the database is enough; it shouldn't be in a for or foreach loop
            mysql_select_db($database_PPS, $PPS);
            //    The pattern's id is stored in the pat_id hidden field, right?
            $pat_id = $_POST["pat_id"];
            //    Never trust user input!
            $pat_id = mysql_real_escape_string($pat_id);

            //    Checkboxes & textarea have name attributes going from 0 to 6 (see HTML code)
            for ($i = 0 ; $i < 7 ; $i++)
            {
                //    Is the number $i checkbox checked?
                if (isset($_POST["InstrCheck$i"]))
                {
                    //    Let's get its value
                    $value = $_POST["InstrCheck$i"];
                    //    Again... never trust user input.
                    $value = mysql_real_escape_string($value);
                    //    Insert data
                    mysql_query("
                        INSERT INTO instruction (instName, instTime, instDate, pat_id)
                        VALUES ('$value', '$Time', '$Date', '$pat_id')
                    ");
                }
            }
        }
    }

?>

NB:

  • НЕ следует использовать один и тот же атрибут id для отдельных элементов HTML.
  • Кроме того, если вам действительно не нужны атрибуты id для элементов HTML не используйте их;они могут понадобиться, если вы хотите использовать для них JavaScript, если вы хотите применить к ним определенный стиль CSS, или если вы хотите прикрепить к ним элементов.
0 голосов
/ 13 июля 2011

Пустая ячейка, которая сохраняется в базе данных, является значением из вашего textarea.

Причина, по которой ваш код сохраняет только textarea, заключается в том, что это единственный запрос, выполняемый mysql_query.Ваш цикл foreach перезаписывает каждый запрос, а последнее значение $insertSQL является запросом textarea.Итак, чтобы исправить это, вам нужно переместить mysql_query внутри цикла foreach и подключиться к базе данных до начала цикла.

/** 
 *  Moving the mysql_query inside the loop requires you connect to the database 
 *  before the loop starts
 */
mysql_select_db($database_PPS, $PPS);

/** Move your mysql_query inside your foreach loop **/
foreach ($_POST['InstrCheck'] as $value) {
    $insertSQL = "INSERT INTO instruction (instName, instTime, instDate, pat_id) VALUES ('$value', '$Time', '$Date', '$pat_id')";

    // Moved inside the loop...now this will run for each loop
    $Result1 = mysql_query($insertSQL, $PPS) or die(mysql_error());

}

Другие ответы так же хороши и указывают на некоторые вещи, которые стоитпринимая во внимание.Я просто хочу, чтобы вы узнали, почему ваш исходный код был неправильным.

0 голосов
/ 12 июля 2011

Если я вас правильно понял:

IF(isset($_POST['InstrCheck']) && isset($_POST['comment'])) {
    $checked = $_POST['InstrCheck'];
    $comment= $_POST['comment'];
    IF(!empty($checked) && is_array($checked)) {
        foreach($checked as $check) {
            $query = 'INSERT INTO table (checkedID, comment) VALUES (\''.mysql_real_escape_string($check).'\', \''.mysql_real_escape_string($comment).'\'';
            mysql_query($query);
        }
    }
}

Вы можете отредактировать запрос в соответствии со своими предпочтениями, это всего лишь быстрый способ вставки нескольких строк в БД. edit : я неправильно прочитал вашу первую HTML-форму, вам нужно отредактировать имя textarea на что-то другое, чем InstrCheck[], и вместо этого сделать его comment, тогда вы можете использовать мой пример, приведенный выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...