2012-01-20 5 views
0

У меня есть страница с таблицей HTML с новостями (NIEUWSBERICHT), фотографиями (IMAGE) и объявлениями (RECLAME). На этой странице пользователь может организовать эти элементы, добавив к ним pagenumber. После сохранения pagenumbers в db, элементы с pagenumber будут транслироваться в редакции cablenewspaper (или как вы это называете на английском языке), что является конечной целью. В таблице HTML также отображаются внешние ключи, которые мне нужны для моих запросов.Как собрать данные из динамической таблицы HTML

Там есть образ HTML таблицы по адресу:

enter image description here

Моей проблемы: как я могу получить данные из приведенных выше таблиц HTML после отправки формы?

Я хочу получить 2 типа запросов типа (например, ключи соответствуют картинке выше):

UPDATE NIEUWSBERICHT SET pagenumber = 2 WHERE nieuwsbericht_id = 53 
UPDATE NIEUWSBERICHT SET pagenumber = 3 WHERE nieuwsbericht_id = 56 
UPDATE NIEUWSBERICHT SET pagenumber = 6 WHERE nieuwsbericht_id = 62 

и

UPDATE IMAGE SET pagenumber = 7 WHERE image_id = 19 

Что делает его трудным для меня является то, что HTML таблица динамически наращивается (в PHP), а число строк является переменной. См. Список ниже. Как-то я думаю, было бы лучше, если бы я отпустил динамическое построение таблицы и начал использовать массивы для хранения всех переменных вместо «$ cell». Или, может быть, я могу каким-то образом получить значение параметра «PageNo» на экране, получить несколько значений, например, на картинке. PageNo в первой строке получает значения 20 и 8, которые я могу использовать в запросе. Aahhhrrg, я просто не знаю, как продолжить. Кто-нибудь, пожалуйста?

// Get column names // 
$fields_num = mysql_num_fields($result); 
echo "<h1>Create edition {$table}</h1>"; 
echo "<table border='1'><tr>"; 
for($i=0; $i<$fields_num; $i++) 
    { 
    $field = mysql_fetch_field($result); 
    echo "<td>{$field->name}</td>"; 
    } 
echo "<td>PageNo</td>"; 
echo "</tr>\n"; 

// Show query result // 
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
    { 
echo "<tr>"; 
foreach($row as $cell) 
    echo "<td>$cell</td>"; 
echo "<td> <select name='paginanummer'> 
    <option></option> 
    <option>1</option> 
    <option>2</option> 
    <option>3</option> 
    <option>4</option> 
    <option>5</option> 
    <option>6</option> 
    <option>7</option> 
    <option>8</option> 
    <option>9</option> 
    <option>10</option> 
    </select></td>"; 
    echo "</tr>\n"; 
    } 

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

+0

Наличие HTML-версии таблицы было бы полезно для получения точного решения кода. Один из способов, которым люди внедряют «живой» код (против изображений) - использовать службу, например, jsfiddle.net. Проверьте это - довольно классный материал. Кроме того, вопрос: можете ли вы использовать jQuery или это должно быть чистым JS? – buley

+0

Мне не очень понятно, хотите ли вы, чтобы это была простая форма, которую вы обрабатываете с помощью PHP, или что это должен быть вызов AJAX. –

+0

@ RickKuipers хорошая вещь. JiM_i, пытаетесь ли вы прочитать результаты формы через объект php '$ _POST' или проанализировать значения в браузере? – buley

ответ

0

дает select элементов имя с идентификатором строки, что она представляет собой , например:

<select name="position_12"> 

для строки с идентификатором 12 на дб

чем тогда, когда форма была отправлена, петля над данными для поиска параметра, который начинается с «position_»

foreach($_POST as $key=>$value){ 
    if(preg_match("^position\_(\d+)$",$key,$matches) && is_numeric($value)){ 
    $row_id = $matches[1]; 
     echo "insert {$value} into row number {$row_id}"; 
    } 
} 

где я положил echo У вас есть $row_id и $value vars, которые вы можете использовать для построения вашего запроса

+0

Спасибо Ярон! Я буду работать над этим. Я вернусь, когда у меня будут результаты! –

+0

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

+0

рад здесь :) –

0

Бинго, он работает!

Вот код для заполнения столбца HTML-таблицы «PageNo». Как вы видите, я дал выбранные уникальные имена (спасибо Yaron ;-)), и я поместил нужные мне ключи в значение select, например строку.

echo "<td> <select name='position_".$rowcounter."'> 
    <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 0'></option> 
    <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 1'>1</option> 
    <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 2'>2</option> 
    <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 3'>3</option> 
    <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 4'>4</option> 
    <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 5'>5</option> 
    <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 6'>6</option> 
    <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 7'>7</option> 
    <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 8'>8</option> 
    <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 9'>9</option> 
    <option value='$type, $nieuwsbericht_id, $reclame_id, $image_id, 10'>10</option> 
    </select></td>"; 

Затем, после отправки, десять значений сохраняются в позиции, называемой $ kv. Это выглядит следующим образом:

if ($_POST) { 
    $kv = array(); 
    foreach ($_POST as $key => $value) { 
    $kv[] = "$value"; 
    etc... 

Тогда я Переберите массив разделить значения (строки) с помощью splitdata на отдельные переменные. Вот что я хотел!Это выглядит так:

$maxcount = count($kv) - 1; 
for ($teller = 0; $teller <= $maxcount; $teller++) { 
$data = $kv[$teller]; 
$splitdata = explode(',', $data); 
$type = $splitdata[0]; 
$nieuwsbericht_id = $splitdata[1]; 
$reclame_id = $splitdata[2]; 
$image_id = $splitdata[3]; 
$paginanummer = $splitdata[4]; 

etc.... (now I can create the sql queries I need to update the database tables)