введите несколько переменных в таблицу, присваивая каждой соответствующей записи - PullRequest
3 голосов
/ 08 октября 2008

Я отображаю данные в html-таблице, с выпадающим списком со списком мест. Каждому волонтеру будет назначено место. Я предполагаю, что смогу пройти через таблицу html и назначить каждому волонтеру место. Раскрывающийся список содержит все возможные места, которым они могут быть назначены.

<select>
<option value="1">Setup</option>
<option value="2">Check in</option>
etc...
</select>

Затем, когда я закончу назначать каждого добровольца, я хочу нажать «Отправить», и он назначит соответствующее значение для каждого добровольца.

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

Ответы [ 4 ]

3 голосов
/ 08 октября 2008

Измените имя каждого выбора, таким образом, он включает идентификатор добровольца:

<select name="venues[1]">
<option value="1">Setup</option>
etc...
</select>

<select name="venues[2]">
<option value="1">Setup</option>
etc...
</select>

<select name="venues[3]">
<option value="1">Setup</option>
etc...
</select>

После отправки в $ _POST будет таблица с именами мест и с индексами: 1, 2, 3 (идентификатор добровольца) и значения, выбранные для каждого добровольца.

Теперь вы можете перебирать массив $_POST['venues'] и сохранять каждое значение:

foreach ($_POST['venues'] as $volunteer_id => $venue) {
  save_venue_for_volunteer($volunteer_id, $venue);
}
1 голос
/ 08 октября 2008

Вот очень грубый пример того, как вы могли бы справиться с этим. Примечание. Ваши таблицы MySQL (при условии, что MySQL) должны относиться к типу, который поддерживает транзакции (InnoDB поддерживает, MyISAM - нет).

<?php

if ( isset( $_POST['venuChoice'] ) )
{
    //  Create a transaction
    mysql_query( 'BEGIN' );

    $failure = false;

    //  Loop over the selections
    foreach ( $_POST['venuChoice'] as $employeeId => $venueId )
    {
        $sql = sprintf(
                'UPDATE table SET columns=%d WHERE id=%d'
            ,   intval( mysql_real_escape_string( $venueId ) )
            ,   intval( mysql_real_escape_string( $employeeId ) )
        );
        if ( ! @mysql_query( $sql ) )
        {
            $failure = true;
            break;
        }
    }

    //  Close out the transaction
    if ( $failure )
    {
        mysql_query( 'ROLLBACK' );
        //  Display and error or something
    } else {
        mysql_query( 'COMMIT' );
    //  Success!
    }
}

?>

<form>
    <select name="venueChoice[1]">
        <option value="1">Setup</option>
        <option value="2">Check in</option>
    </select>
    <select name="venueChoice[2]">
        <option value="1">Setup</option>
        <option value="2">Check in</option>
    </select>
    <select name="venueChoice[3]">
        <option value="1">Setup</option>
        <option value="2">Check in</option>
    </select>

</form>

Вы также можете изменить это, чтобы отслеживать текущий выбор места проведения каждого сотрудника, сравнивать его с данными POST, а затем выполнять запросы UPDATE только для тех, которые были фактически изменены.

0 голосов
/ 29 октября 2008
foreach ($_POST['venues'] as $volunteer_id => $venue) {
    save_venue_for_volunteer($volunteer_id, $venue);
}

function save_venue_for_volunteer($volunteer_id, $venue) {
    $result = mysql_query("UPDATE volunteers_2009 SET venue_id='$venue' WHERE id='$volunteer_id'") 
    or die(mysql_error());
}

Таблица, в которую он будет сохранен, называется волонтером_2009, так как это должно быть?

0 голосов
/ 08 октября 2008

Я не могу думать ни о чем. Вы можете поместить несколько операторов SQL в 1 запрос MySQL:

UPDATE volunteer SET venue = 1 WHERE id = 2;
UPDATE volunteer SET venue = 2 WHERE id = 3;
...

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

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