2016-10-06 1 views
1

동시에 텍스트 필드와 같이 테이블의 모든 행과 열을로드하는 스크립트를 사용하여 동시에 편집 할 수 있고 제출 버튼을 누르십시오. 모든 값으로 업데이트 됨.PHP/MySQL은 테이블이 특정 수의 행에 도달 한 후 업데이트합니다.

별도의 버튼은 행을 추가하거나 삭제합니다. 기본적으로 재고 시스템입니다.

내 테이블이 약 150 개의 행에 도달하여 스크립트가 모든 테이블 값을 표시하지만 업데이트 및 삭제가 더 이상 작동하지 않을 때까지 효과가 있습니다. 새 행을 추가하는 작업은 계속 진행 중입니다.

오류는 없으며 업데이트가 실제로 작동하는 것과 똑같습니다. WAMP의 최신 버전을 실행 중입니다.

메모리 문제 인 것 같습니다.

PHP.ini 
memory_limit = 2048M 
post_max_size = 128M 
upload_max_filesize = 64M 

MY.ini 
innodb_buffer_pool_size = 512M 
key_buffer_size = 256M 
max_allowed_packet = 128M 
sort_buffer_size = 128M 
net_buffer_length = 8K 
read_buffer_size = 64M 
read_rnd_buffer_size = 64M 
myisam_sort_buffer_size = 512M 
ead_buffer_size = 10M 
write_buffer_size = 10M 
sort_buffer_size_size = 40M 
net_buffer_length = 64K 

내 표는 순간에 17 열이 나는 간단한 뭔가 내가 놓친있을 수 있습니다 있도록이 데이터베이스 작업 내 처음이다, 다음과 같은 수정을 시도했습니다. 열을 삭제하면 10 또는 20 개의 새 행을 추가 할 수 있지만 문제가 다시 발생합니다.

내 질문 : 1. 부적절한 코드를 속여서 작동 시키려면 어떻게해야합니까? 2. 제대로 처리하기 위해 코드를 정리할 수 있습니까?

내 코드는 보안 문제로 가득차있을 가능성이 큽니다. 꼭 필요한 경우 의견을 말하십시오.하지만 내 첫 프로젝트이기 때문에 좋은 설명/예를주십시오. 이해할 수 없으므로 너의 한쪽 라이너.

다음은 문제 페이지의 코드입니다. 내 테이블이 작을 때 완벽하게 잘 작동한다는 것을 기억하십시오. 현재 UPDATE 함수는 5 개의 UPDATES로 나뉘어져 있습니다.이 테스트는 도움이되지 않았습니다. 원래 모든 것은 하나의 UPDATE였습니다. @Phil에서 제안을 복용

 <?php 
include_once $_SERVER['DOCUMENT_ROOT'] . "/NAMAsoft/mochaOFFICE/main/links_config.php"; 
include_once ($standard_headtag); 
ini_set('memory_limit', '1024M'); 
?> 
</head> 
<body style=''> 

<?php 
include ($DBconnect); 
$tbl_name="inventorylist"; // Table name 
echo ini_get("memory_limit")."\n"; 
ini_set("memory_limit","2048M"); 
echo ini_get("memory_limit")."\n"; 

echo " 
<style> 
table { width:1200px;table-layout:fixed;} 
table tr { height:1em; } 
td {overflow:hidden;white-space:nowrap; } 
</style> 
<form name='form1' method='post' action=''> 
<table border='0' cellspacing='1' cellpadding='0'> 
<tr> 
<td width='80px' align='center'><strong>Department</strong></td> 
<td width='80px' align='center'><strong>品名</strong></td> 
<td width='80px' align='center'><strong>Product#</strong></td> 
<td width='80px' align='center'><strong>Maker</strong></td> 
<td width='80px' align='center'><strong>Cost</strong></td> 
<td width='80px' align='center'><strong>/Per</strong></td> 
<td width='80px' align='center'><strong>Import Fee %</strong></td> 
<td width='80px' align='center'><strong>Prep Cost</strong></td> 
<td width='80px' align='center'><strong>MOQ</strong></td> 
<td width='80px' align='center'><strong>Weight</strong></td> 
<td width='80px' align='center'><strong>Size (t)</strong></td> 
<td width='80px' align='center'><strong>Category</strong></td> 
<td width='80px' align='center'><strong>Page</strong></td> 
<td width='80px' align='center'><strong>Specs</strong></td> 
<td width='80px' align='center'><strong>Comment</strong></td> 
<td width='80px' align='center'><strong>Stock</strong></td> 
</tr> 
</td> 
<td align='center'> 
     <select name='department_add' id='department_add' data-native-menu='false'>"; 
     $sql1 = "SELECT * FROM menulist"; 
     $result1 = $conn->query($sql1); 
     if ($result1->num_rows > 0) { 
     $count1 = $result1->num_rows; 
     // output data of each row 
     while($row1 = $result1->fetch_assoc()) { 
     echo "<option value='".$row1['department']."'>".$row1['department']."</option>";} 
     } else { 
     echo "Error: " . $sql1 . "<br>" . $conn->error; 
     } 
      echo " 
     </select> 
</td> 
<td align='center'> 
<input name='productname_add' type='text' id='productname_add' value=''> 
</td> 
<td align='center'> 
<input name='productnum_add' type='text' id='productnum_add' value=''> 
</td> 
<td align='center'> 
<input name='maker_add' type='text' id='maker_add' value=''> 
</td> 
<td align='center'> 
<input name='cost_add' type='text' id='cost_add' value=''> 
</td> 
<td align='center'> 
<input name='per_add' type='text' id='per_add' value=''> 
</td> 
<td align='center'> 
<input name='importfee_add' type='text' id='importfee_add' value=''> 
</td> 
<td align='center'> 
<input name='prepcost_add' type='text' id='prepcost_add' value=''> 
</td> 
<td align='center'> 
<input name='MOQ_add' type='text' id='MOQ_add' value=''> 
</td> 
<td align='center'> 
<input name='weight_add' type='text' id='weight_add' value=''> 
</td> 
<td align='center'> 
<input name='sizeT_add' type='text' id='sizeT_add' value=''> 
</td> 
<td align='center'> 
     <select name='category_add' id='category_add' data-native-menu='false'>"; 
     $sql2 = "SELECT * FROM menulist"; 
     $result2 = $conn->query($sql2); 
     if ($result2->num_rows > 0) { 
     $count2 = $result2->num_rows; 
     // output data of each row 
     while($row1 = $result2->fetch_assoc()) { 
     echo "<option value='".$row1['category']."'>".$row1['category']."</option>";} 
     } else { 
     echo "Error: " . $sql2 . "<br>" . $conn->error; 
     } 
     echo " 
     </select> 
</td> 
<td align='center'> 
     <select name='page_add' id='page_add' data-native-menu='false'>"; 
     $sql3 = "SELECT * FROM menulist"; 
     $result3 = $conn->query($sql3); 
     if ($result3->num_rows > 0) { 
     $count3 = $result3->num_rows; 
     // output data of each row 
     while($row1 = $result3->fetch_assoc()) { 
     echo "<option value='".$row1['page']."'>".$row1['page']."</option>";} 
     } else { 
     echo "Error: " . $sql3 . "<br>" . $conn->error; 
     } 
     echo " 
     </select> 
</td> 
<td align='center'> 
<input name='specs_add' type='text' id='specs_add' value=''> 
</td> 
<td align='center'> 
<input name='comment_add' type='text' id='comment_add' value=''> 
</td> 
<td align='center'> 
<input name='stock_add' type='text' id='stock_add' value=''> 
</td> 
</tr> 
</table> 
<input type='submit' name='Add' value='Add'> 
</form> 
<br> 
<br>"; 




echo " 
<style> 
table { width:1260px;table-layout:fixed;} 
table tr { height:1em; } 
td {overflow:hidden;white-space:nowrap; } 
</style> 
<form name='form1' method='post' action=''> 
<table border='0' cellspacing='1' cellpadding='0'> 
<tr> 
<td width='30px' align='center'><strong>DEL</strong></td> 
<td width='30px' align='center'><strong>Id</strong></td> 
<td width='80px' align='center'><strong>Department</strong></td> 
<td width='80px' align='center'><strong>品名</strong></td> 
<td width='80px' align='center'><strong>Product#</strong></td> 
<td width='80px' align='center'><strong>Maker</strong></td> 
<td width='80px' align='center'><strong>Cost</strong></td> 
<td width='80px' align='center'><strong>/Per</strong></td> 
<td width='80px' align='center'><strong>Import Fee %</strong></td> 
<td width='80px' align='center'><strong>Prep Cost</strong></td> 
<td width='80px' align='center'><strong>MOQ</strong></td> 
<td width='80px' align='center'><strong>Weight</strong></td> 
<td width='80px' align='center'><strong>Size (t)</strong></td> 
<td width='80px' align='center'><strong>Category</strong></td> 
<td width='80px' align='center'><strong>Page</strong></td> 
<td width='80px' align='center'><strong>Specs</strong></td> 
<td width='80px' align='center'><strong>Comment</strong></td> 
<td width='80px' align='center'><strong>Stock</strong></td> 
</tr>"; 

$sql = "SELECT * FROM $tbl_name"; 
$result = $conn->query($sql); 
if ($result->num_rows > 0) { 
    $count = $result->num_rows; 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 

echo " 
<tr> 
<td align='center'> 
<input type='checkbox' name='checkbox[]' value='" .$row['id']. "'> 
</td> 
<td align='center'> "; 
$id[]=$row['id']; 
echo $row['id']; 
echo " 
</td> 

<td align='center'> 
<input name='department[]' type='text' id='department' value='" .$row['department']. "'> 
</td> 
<td align='center'> 
<input name='productname[]' type='text' id='productname' value='" .$row['productname']. "'> 
</td> 
<td align='center'> 
<input name='productnum[]' type='text' id='productnum' value='" .$row['productnum']. "'> 
</td> 
<td align='center'> 
<input name='maker[]' type='text' id='maker' value='" .$row['maker']. "'> 
</td> 
<td align='center'> 
<input name='cost[]' type='text' id='cost' value='" .$row['cost']. "'> 
</td> 
<td align='center'> 
<input name='per[]' type='text' id='per' value='" .$row['per']. "'> 
</td> 
<td align='center'> 
<input name='importfee[]' type='text' id='importfee' value='" .$row['importfee']. "'> 
</td> 
<td align='center'> 
<input name='prepcost[]' type='text' id='prepcost' value='" .$row['prepcost']. "'> 
</td> 
<td align='center'> 
<input name='MOQ[]' type='text' id='MOQ' value='" .$row['MOQ']. "'> 
</td> 
<td align='center'> 
<input name='weight[]' type='text' id='weight' value='" .$row['weight']. "'> 
</td> 
<td align='center'> 
<input name='sizeT[]' type='text' id='sizeT' value='" .$row['sizeT']. "'> 
</td> 
<td align='center'> 
<input name='category[]' type='text' id='category' value='" .$row['category']. "'> 
</td> 
<td align='center'> 
<input name='page[]' type='text' id='page' value='" .$row['page']. "'> 
</td> 
<td align='center'> 
<input name='specs[]' type='text' id='specs' value='" .$row['specs']. "'> 
</td> 
<td align='center'> 
<input name='comment[]' type='text' id='comment' value='" .$row['comment']. "'> 
</td> 
<td align='center'> 
<input name='stock[]' type='text' id='stock' value='" .$row['stock']. "'> 
</td> 
</tr>"; 
} 
} else { 
echo "Error: " . $sql . "<br>" . $conn->error; 
} 
echo " 
</table> 
<input type='submit' name='Submit' value='Update'> 
<input type='submit' name='del' value='Delete'> 
</form>"; 



// Check if button name "Submit" is active, do this 
if(isset($_POST['Submit'])){ 
    $department= $_POST['department']; 
    $productname = $_POST['productname']; 
    $productnum = $_POST['productnum']; 
    $maker = $_POST['maker']; 
    $cost = $_POST['cost']; 
    $per = $_POST['per']; 
    $importfee = $_POST['importfee']; 
    $prepcost = $_POST['prepcost']; 
    $MOQ= $_POST['MOQ']; 
    $weight = $_POST['weight']; 
    $sizeT = $_POST['sizeT']; 
    $category = $_POST['category']; 
    $page = $_POST['page']; 
    $specs = $_POST['specs']; 
    $comment = $_POST['comment']; 
    $stock = $_POST['stock'];  
for($i=0;$i<$count;$i++){ 
$sql1 = "UPDATE $tbl_name SET 
department='".$department[$i]."', productname='".$productname[$i]."', productnum='".$productnum[$i]."' 
WHERE id='".$id[$i]."'"; 
$result1 = $conn->query($sql1); 
} 
for($i=0;$i<$count;$i++){ 
$sql1 = "UPDATE $tbl_name SET 
maker='".$maker[$i]."', cost='".$cost[$i]."', per='".$per[$i]."', importfee='".$importfee[$i]."', prepcost='".$prepcost[$i]."' 
WHERE id='".$id[$i]."'"; 
$result1 = $conn->query($sql1); 
} 
for($i=0;$i<$count;$i++){ 
$sql1 = "UPDATE $tbl_name SET 
MOQ='".$MOQ[$i]."', weight='".$weight[$i]."' 
WHERE id='".$id[$i]."'"; 
$result1 = $conn->query($sql1); 
} 
for($i=0;$i<$count;$i++){ 
$sql1 = "UPDATE $tbl_name SET 
sizeT='".$sizeT[$i]."', category='".$category[$i]."', page='".$page[$i]."' 
WHERE id='".$id[$i]."'"; 
$result1 = $conn->query($sql1); 
} 
for($i=0;$i<$count;$i++){ 
$sql1 = "UPDATE $tbl_name SET 
specs='".$specs[$i]."', comment='".$comment[$i]."', stock='".$stock[$i]."' 
WHERE id='".$id[$i]."'"; 
$result1 = $conn->query($sql1); 
} 
echo("<script>location.href = 'MATERIALlist.php';</script>"); 
} 


if (isset($_POST['del'])){ 
    $checkbox = $_POST['checkbox']; 
    $count = count($checkbox); 
    for($i=0;$i<$count;$i++){ 
     if(!empty($checkbox[$i])){ /* CHECK IF CHECKBOX IS CLICKED OR NOT */ 
     $id = mysqli_real_escape_string($conn,$checkbox[$i]); /* ESCAPE STRINGS */ 
     mysqli_query($conn,"DELETE FROM $tbl_name WHERE id = '$id'"); /* EXECUTE QUERY AND USE ' ' (apostrophe) IN YOUR VARIABLE */ 
     } /* END OF IF NOT EMPTY CHECKBOX */ 
    } /* END OF FOR LOOP */ 
    echo("<script>location.href = 'MATERIALlist.php';</script>"); 
} /* END OF ISSET DELETE */ 



if(isset($_POST['Add'])){ 
$sql = "INSERT INTO $tbl_name (department,productname,productnum,maker,cost,per,importfee,prepcost,MOQ,weight,sizeT,category,page,specs,comment,stock) 
VALUES('$_POST[department_add]','$_POST[productname_add]','$_POST[productnum_add]','$_POST[maker_add]','$_POST[cost_add]','$_POST[per_add]','$_POST[importfee_add]','$_POST[prepcost_add]','$_POST[MOQ_add]','$_POST[weight_add]','$_POST[sizeT_add]','$_POST[category_add]','$_POST[page_add]','$_POST[specs_add]','$_POST[comment_add]','$_POST[stock_add]')"; 
if ($conn->query($sql) === TRUE) { 
echo("<script>location.href = 'MATERIALlist.php';</script>"); 
} else { 
echo "Error: " . $sql . "<br>" . $conn->error; 
} 
} 


$conn->close(); 

?> 
</body> 
</html> 

나는 준비된 문 (아마도) ... 그것이 내가 그것을 수정했습니다 처음 오류의 전체이었고, 지금은 실행하지만 난 경우 중지에 기능을 제출 내 변경 이전과 같이 테이블에 많은 행이 있어야합니다. 흥미로운 점은 업데이트하면 echo "Updated {$ stmt-> affected_rows} rows"가 표시됩니다. 업데이트되지 않으면 출력이 전혀 나오지 않습니다. 성명서가 실행되지 않는 것처럼 보입니다.

// Check if button name "Submit" is active, do this 
if(isset($_POST['Submit'])){ 
    $department= $_POST['department']; 
    $productname = $_POST['productname']; 
    $productnum = $_POST['productnum']; 
    $maker = $_POST['maker']; 
    $cost = $_POST['cost']; 
    $per = $_POST['per']; 
    $importfee = $_POST['importfee']; 
    $prepcost = $_POST['prepcost']; 
    $MOQ= $_POST['MOQ']; 
    $weight = $_POST['weight']; 
    $sizeT = $_POST['sizeT']; 
    $category = $_POST['category']; 
    $page = $_POST['page']; 
    $specs = $_POST['specs']; 
    $comment = $_POST['comment']; 
    $stock = $_POST['stock']; 

for($i=0;$i<$count;$i++){ 

$sql = "UPDATE $tbl_name SET 
department=?,productname=?,productnum=?,maker=?,cost=?,per=?,importfee=?,prepcost=?,MOQ=?,weight=?,sizeT=?, 
category=?,page=?,specs=?,comment=?,stock=? 
WHERE id='".$id[$i]."'"; 
$stmt = $conn->prepare($sql); 
$stmt->bind_param('ssssssssssssssss',  $department[$i], $productname[$i], $productnum[$i], $maker[$i], $cost[$i] ,$per[$i] ,$importfee[$i], 
$prepcost[$i] ,$MOQ[$i], $weight[$i] ,$sizeT[$i] ,$category[$i] ,$page[$i], $specs[$i], $comment[$i], $stock[$i]); 

$stmt->execute(); 
if ($stmt->errno) { 
    echo "FAILURE!!! " . $stmt->error; 
} 
else echo "Updated {$stmt->affected_rows} rows"; 

} 
$stmt->close(); 
} 
+0

성명 제한 문제 일 수 있습니다. ** 반복 작업 전에 ** 작성된 준비된 명령문은이를 완화하고 매개 변수 바인딩과 결합하면 쿼리를 SQL 삽입으로부터 안전하게 만듭니다. – Phil

+0

문제는 모든 것을 한 페이지에 넣었다는 것입니다.기본 요소별로 로직을 분리하고 jQuery를 사용하여 아약스에 요청하십시오. 또한 루프에서 SQL 쿼리를하는 것이 좋지 않다는 것을 명심하십시오. – num8er

+0

@ num8er 나는 OP 문제의 원인이 무엇인지 의심 스럽습니다. – Phil

답변

0

이것은 php.ini 문제였습니다. 내가 동시에 모든 업데이트하려고했다 때문에 POST 한계에 도달했습니다 :

; How many GET/POST/COOKIE input variables may be accepted 
max_input_vars = 2500 

147 행 X 17 열 = 2499 POST의 때문에 148 개 행이 받아 들여지지 않았다. 한도를 높이면이 문제를 해결할 수있었습니다.

1

삽입에 대한 커밋 문구가 표시되지 않습니다. 최대 삽입은 삽입 레코드 크기와 비교할 때 패킷 크기에 따라 다르지만 대부분의 경우 삽입 후에 간단히 커밋 할 수 있습니다. 커밋 문은 테이블에 대한 논리적 인 삽입 또는 업데이트 그룹을 수행해야하는 경우 삽입을 롤백하는 기능을 제공합니다.

+0

이것은 Start Transaction 및 Commit에 대해 들어 본 적이 처음인데 그것을 사용하는 예제를 보지 못했습니다. 내가 그것에 대해 읽고 그것을 도울 수 있는지보기 위해 노력할 것입니다. – Nama

관련 문제