2015-02-03 3 views
2

Я новичок в PHP и борется с динамической таблицей html. У меня работает таблица, и я смог принять эти значения и вставить их в таблицу на моем Mysql DB. Однако, честно говоря, я смущен тем, почему у меня есть работы и почему я не могу использовать метод «bindValue» для работы?PDO Вставить в значения базы данных из динамической таблицы html

Может кто-нибудь объяснить, почему метод bindValue не работает? Вот код, который у меня есть. Если вы увидите что-то, что может быть улучшено, я буду рад услышать ваши мысли.

<!-- This is from my HTML file --> 

    <script language="javascript"> 

function addRow(tableID) { 

    var table = document.getElementById(tableID); 

    var rowCount = table.rows.length; 
    var row = table.insertRow(rowCount); 

    var cell1 = row.insertCell(0); 
    var element1 = document.createElement("input"); 
    element1.type = "checkbox"; 
    element1.name="chkbox[]"; 
    cell1.appendChild(element1); 

    var cell2 = row.insertCell(1); 
    cell2.innerHTML = "<input type='text' name='itemdesc[]' >"; 

    var cell3 = row.insertCell(2); 
    cell3.innerHTML = "<input type='number' name='unitprice[]' >"; 

    var cell4 = row.insertCell(3); 
    cell4.innerHTML = "<input type='number' name='quantity[]' >"; 

    var cell4 = row.insertCell(4); 
    cell4.innerHTML = "<input type='number' name='linetotal[]' >"; 
    } 

function deleteRow(tableID) { 
    try { 
    var table = document.getElementById(tableID); 
    var rowCount = table.rows.length; 

    for(var i=0; i<rowCount; i++) { 
     var row = table.rows[i]; 
     var chkbox = row.cells[0].childNodes[0]; 
     if(null != chkbox && true == chkbox.checked) { 
      table.deleteRow(i); 
      rowCount--; 
      i--; 
     } 
    } 
    }catch(e) { 
     alert(e); 
    } 
} 

Это из моего .php файла

for($i=0; $i < count($_POST['itemdesc']); $i++) 
{ 


try 
{ 
    $sql = "INSERT INTO invoicelineitem SET 
     invoiceid = " . $last_id .", 
     itemdesc = '" . $_POST['itemdesc'][$i] ."', 
     unitprice = " . $_POST['unitprice'][$i].", 
     quantity = " . $_POST['quantity'][$i].", 
     linetotal = " . $_POST['linetotal'][$i]; 
    $s = $pdo->prepare($sql); 
    $s->execute(); 

/* I can't get this to work 

    $sql = 'INSERT INTO invoicelineitem SET 
     invoiceid = :invoiceid, 
     itemdesc = :itemdesc, 
     unitprice = :unitprice, 
     quantity = :quantity, 
     linetotal = :linetotal'; 
    $s = $pdo->prepare($sql); 
    $s->bindValue(':invoiceid', $last_id); 
    $s->bindValue(':quantity', $_POST['quantity'][$i]); 
    $s->bindValue(':untiprice', $_POST['unitprice'][$i]); 
    $s->bindValue(':itemdesc', $_POST['itemdesc'][$i]); 
    $s->bindValue(':linetotal', $_POST['linetotal'][$i]); 
    $s->execute(); 
*/ 

Это сообщение об ошибке я получаю:

исключение 'PDOException' с сообщением «SQLSTATE [HY093]: Invalid номер параметра : параметр не был определен 'в /media/sf_mcpi/mcpi/invoice/index.php:216 Трассировка стека: # 0 /media/sf_mcpi/mcpi/invoice/index.php(216): PDOStatement-> execute() # 1 {main}

+2

Является ли это опечатка ': UnitPrice, d' <=' d' и цитата в 'linetotal'' <= Использование исключений поймало бы эти ошибки. 'setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION)' –

+1

Вы, кажется, смешиваете PHP и JavaScript, и это не сработает. –

+1

@JayBlanchard Хорошая добыча ;-) Я не видел этого, пока вы не упомянули об этом. –

ответ

1

Ваш запрос настроен так, как если бы это был запрос UPDATE. INSERT запроса отличается, используя этот формат:

INSERT INTO `table` (`col1`, `col2`, ...) 
VALUES ('val1', 'val2', ...) 

INSERT требует, чтобы указать столбцы, которые вы будете вставляя в последующем равном количестве VALUES.

UPDATE: Благодаря хорошим уловом по @Mihai, "untiprice InstEd из UnitPrice, заполнитель и значение bindparam отличаются"

+0

* Hm ... * http://dev.mysql.com/doc/refman/5.6/en/insert.html говорит 'INSERT [LOW_PRIORITY | ЗАДЕРЖАННЫЕ | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (partition_name, ...)] SET col_name = {expr | DEFAULT}, ... 'так что трудно сказать. Я тоже об этом подумал. Давайте посмотрим, что должен сказать OP :-) –

+0

* Hmmmmm *, я вижу вашу точку @ Fred-ii-, хотя кажется довольно нестандартным способом выполнения вставок. –

+0

Я знаю Джей. Вы стоите на 50% вправо ;-) Я отправил комментарий по вопросу OP о проверке ошибок, посмотрел, что выкладывает. –

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