Bir döngü oluşturulan formdan birden fazla satır alınıyor ...

1 Cevap php

Bana PHP için yeni değilim, ama sizin yardımınıza öğrenmek ve gerçekten takdir ediyorum burada olduğumu söyleyerek başlayalım.

Ben veri çekin ve bir form oluşturmak için aşağıdaki kodu kullanabilirsiniz. Bu doldurmak için bir kullanıcı için 40 satır kadar oluşturur. Açıklama, Tutar, ve Frekans: Her satır aynı bilgilerden oluşur. Ihtiyaç duyulan bilgilerin kalan veritabanı tarafından oluşturulur. (Gizli alanları bak)

<?php 
$row = 0;
do { 
$optid = $row_options['option_id'];
echo "<tr>\n\t<td>" . htmlentities($row_options['option']) . "</td>\n";
echo "\t<td>" . "<input name='description' type='text' size='40' maxlength='120'/>" . "</td>\n";
echo "\t<td>" . "<input name='option_id' type='hidden' value='$optid' />$<input name='amount' type='text' size='10' maxlength='7'/>" . "</td>\n";
echo "\t<td>" . "<select name='assisted_frequency'>
            <option value='Monthly'>Monthly</option>
    <option value='Weekly'>Weekly</option>
    <option value='Daily'>Daily</option>
    <option value='Hourly'>Hourly</option>
    <option value='One-Time'>One-Time</option>
            </select>" . "</td>\n</tr>\n";  

$array[$row] = array(
$arraydesc[$row] = $_POST['description'],
$arrayamto[$row] = $_POST['amount'],
$arrayoptid[$row] = $optid,
$arrayfreq[$row] = $_POST['frequency'],
);
$row ++;
} while ($row_options = mysql_fetch_assoc($options)); 
$counter = $row - 1;
?>

Ben bilgiyi kullanıcı girişleri alınırken sorun yaşıyorum. Benim niyet girdisini onların bilgi var, daha sonra başka bir veritabanına benim veritabanı bilgileri ve kullanıcı bilgilerinin karışımını yüklemek kullanıcı sonra her satır döngü olduğunu. Örneğin, kullanıcı, güzel olsa edebilir:

form1  

Option 1:  description [input box]      amount [input box]       frequency [option box]  
Option 2:  description [input box]      amount [input box]       frequency [option box]  
Option 3:  description [input box]      amount [input box]       frequency [option box]  
Option 4:  description [input box]      amount [input box]       frequency [option box]  

submit 

Yukarıdaki formu gönderdikten sonra, ben veritabanına girdi verileri için aşağıdaki benzer bir sorgu kullanıyorum:

for($row=0; $row<=$counter; $row++){
$insertSQL2 = sprintf("INSERT INTO table (option_id, amount, description, frequency) VALUES (%s, %s, %s, %s)",
 GetSQLValueString($arrayoptid[$row], "int"),
 GetSQLValueString($arrayamto[$row], "int"),
 GetSQLValueString($arraydesc[$row], "text"),
 GetSQLValueString($arrayfreq[$row], "text"));

// code to submit query
}

Ben denedim, foreach, diziler veritabanına (satır satır) her satırı eklemek için (bildiğim her şey gibi hissediyor ne). Ben veri sadece son satırını, ya da hiç veri olsun ya. Ayrıca [$ row] teknik bilgime karakterler ekliyor endişe.

Kullanıcı girdilerinin her satır almak için en iyi yolu nedir, daha sonra veritabanına bu verileri (satır satır) yükleyebilirsiniz? Ayrıca, gerçekten benim kodlama tekniği ve ben alıyorum yaklaşımını geliştirmek için önerilerinizi bekleriz.

1 Cevap

Bu denediniz mi?

<input name="description[]" type="text" ... />
<input name="option_id[]" type="text" ... />
<select name="assisted_frequency[]">...</select>

ve daha sonra

$expectNumRows = ...;
function is_good_subm_data($name, $num) {
    return (array_key_exists($name, $_POST) &&
        is_array($_POST[$name]) && count($_POST[$name]) == $num);
}
if (!is_good_subm_data('description', $expectNumRows) ||
    !is_good_subm_data('option_id', $expectNumRows) ||
    !is_good_subm_data('assisted_frequency', $expectNumRows)) {
    //error handling
}

for ($i = 0; $i < $expectNumRows; $i++) {
    //read $_POST['description'][$i] etc.
}

Çok basit (hiçbir doğrulama) PHP dosyası:

<?php
if ($_SERVER['REQUEST_METHOD'] == "GET") {
?>
<form method="post">
Description 1: <input name="description[]" type="text"  /><br />
Option Id 1: <input name="option_id[]" type="text" /><br />
<br />
Description 2: <input name="description[]" type="text"  /><br />
Option Id 2: <input name="option_id[]" type="text" /><br />
<input type="submit" />
</form>
<?php } else {
    $expectNumRows = 2;
    for ($i = 0; $i < $expectNumRows; $i++) {
        echo "description $i:" .
            htmlentities($_POST["description"][$i]) . "<br />";
        echo "option id $i:" .
            htmlentities($_POST["option_id"][$i]) . "<br />";
        echo "<br />";
    }
}