2014-12-15 3 views
1

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

Надеюсь, я четко объяснил.

Мои коды ниже:

TQ

I петля мои входы с PHP

for($x = 0; $x <= 10; $x++){ 
    print ' 
    <tr> 
       <td><input class="form-mod" type="text" name="sn[]"/></td> 
       <td><input class="form-mod" type="text" name="ename[]"/></td> 
       <td><input class="form-mod" type="text" name="hrs[]"/></td> 
       <td><input class="form-mod" type="text" name="sales[]"/></td> 
       <td><input class="form-mod" type="text" name="wages[]"/></td> 
       <td ><input class="form-mod" type="text" name="inc[]"/></td> 

      </tr> 
    '; 
} 

PHP КОД

if(isset($_POST['submited'])){ 
    $rows = array(array($_POST['pc'],$_POST['wn'],$_POST['from'],$_POST['to'],$_POST['sn'],$_POST['ename'],$_POST['hrs'],$_POST['sales'],$_POST['wages'],$_POST['inc']) 


); 

    $args = array_fill(0, count($rows[0]), '?'); 

    $query = "INSERT INTO wages (program_code,week_no,`from`,`to`,serial_no,name,hrs,sales,wages,incentive) VALUES (".implode(',', $args).")"; 
    $stmt = $dbo->prepare($query); 

    foreach ($rows as $row) 
    { 
     $stmt->execute($row); 
    } 


    if(!$stmt->rowCount() >= '1'){ 
     print "unsuccessfully insert"; 
    }else{ 
     print "successfully inserted"; 
    } 
} 

ОБНОВЛЕНО

Я пересмотрел код, который @Vitor Lima типа. я удалю этот код "" implode(',', $row) "" и замените его на ?,?,?,?, и он сработал. но если я ввожу только 2 строки со значениями на входной странице, он все равно будет вставлять оставшиеся 8 в базу данных, поэтому 2 строки со значениями и 8 пусты. любая идея, как преодолеть это

if(isset($_POST['submited'])){ 
    for($x = 0; $x < 10; $x++){ 
     $row = array($_POST['pc'], $_POST['wn'], $_POST['from'], $_POST['to'], 
        $_POST['sn'][$x], $_POST['ename'][$x], $_POST['hrs'][$x], 
        $_POST['sales'][$x], $_POST['wages'][$x], $_POST['inc'][$x]); 

     $query = "INSERT INTO wages (program_code, week_no,`from`,`to`,serial_no, 
       name,hrs,sales,wages,incentive) VALUES (?,?,?,?,?,?,?,?,?,?)"; 
     $stmt = $dbo->prepare($query); 
     $stmt->execute($row); 

     if(!$stmt->rowCount() >= '1'){ 
      print "unsuccessfully insert"; 
     }else{ 
      print "successfully inserted"; 
     } 
    } 
} 
+0

Какие ошибки вы получаете? Я думаю, вы должны сделать цикл в PHP-скрипте (как и на вашей странице) и вставить один за другим. –

+0

выводит слово «Array to string conversion» – Jonathan

+0

@Jonathan Array для строковых ошибок преобразования возникает при попытке вывода массивов. PHP знает, как выводить строковые значения (т. Е. Строки, числа и т. Д.). Если вы хотите вывести массив, вам нужно каким-то образом отформатировать его. –

ответ

0

Посмотрите на вашу страницу: имена на вход имеют [], это означает, что они будут переданы в виде массива на сервер, так что, например, $_POST['sn'] будет массив с десятью позициями (вы можете использовать var_dump сертифицировать ...)

Таким образом, в вашем PHP скрипт, вы должны сделать петлю, что-то подобное

if(isset($_POST['submited'])){ 
    for($x = 0; $x < 10; $x++){ 
     $row = array($_POST['pc'], $_POST['wn'], $_POST['from'], $_POST['to'], 
        $_POST['sn'][$x], $_POST['ename'][$x], $_POST['hrs'][$x], 
        $_POST['sales'][$x], $_POST['wages'][$x], $_POST['inc'][$x]); 

     $query = "INSERT INTO(wages program_code, week_no,`from`, `to`,serial_no, 
       name,hrs,sales,wages,incentive) VALUES (".implode(',', $row).")"; 
     $stmt = $dbo->prepare($query); 
     $stmt->execute($row); 

     if(!$stmt->rowCount() >= '1'){ 
      print "unsuccessfully insert"; 
     }else{ 
      print "successfully inserted"; 
     } 
    } 
} 
+0

it output 'Колонка не найдена: 1054 Неизвестный столбец «John» в поле «список» это bcoz обратных ссылок bcoz' from '&' to 'являются резервными словами – Jonathan

+1

я заменяю 'implode (', ', $ row) на ?,?,?,? ', и это сработало. добавьте 'if (! empty ($ _ POST ['sn'] [$ x])) {query here}' после цикла, чтобы он не вставлял пустые строки. Thx @Vitor Lima – Jonathan

Смежные вопросы