2011-06-12 3 views
1

RMA 양식을 만들려고합니다. 아이디어는 한 페이지에 여러 행을 입력하는 기능입니다. 내가 가지고있는 문제는 하나 이상의 행이있는 양식이있는 경우 상위 행의 데이터 만 제출한다는 것입니다. 둘러보고 foreach() 및 implode() 함수를 사용해야한다고 읽었지만 제대로 작동하지 않는 것 같습니다.PHP를 사용하여 mysql 데이터베이스에 여러 라인 항목을 입력하는 방법

이것은 현재 단일 행으로 동작하는 내 전체 PHP 코드입니다. 누군가 내가 여러 행을 얻을 수 있도록 도와 주실 수 있다면 좋을 것입니다. 또한 PHP/mysql에 대한 많은 경험이 없으므로 "x, y, z 함수 사용"대신에 지금까지 도움이되지 않았기 때문에 예제를 나열하십시오.

모든 도움을 주시면 대단히 감사하겠습니다. 감사합니다

당신은 배열으로 양식 요소를 제출 한 다음 가서 새 행을 삽입, 그들을 통해 반복 할 필요가
<html><head><title> TEST - RMA</title></head> 
<body> 
<h1>RMA Screen</h1> 
<h2>Order Results</h2> 
<?php 
    $controller_serial = $_POST['controller']; 
    $sample_holder_serial = $_POST['sampleholder']; 
    $first_name = $_POST['firstname']; 
    $last_name = $_POST['lastname']; 
    $randomnumber = $_POST['RMAnum']; 


    $link = mysql_connect('localhost', 'user', 'abcd'); 
    if (!$link) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
    echo 'Connected successfully'; 

    mysql_select_db(rma); 

    $randomnumber = mt_rand(1,100); 
    while($fetch = mysql_fetch_array( 
    mysql_query("SELECT `RMAnum` FROM `rma` 
       WHERE `RMAnum` = $randomnumber"))) { 
    $randomnumber = mt_rand(1,10); 

    } 

    mysql_query("INSERT INTO `rma` 
      (`controller_serial`, `sample_holder_serial` 
      , `first_name`, `last_name`, `RMAnum`) 
      VALUES('$controller_serial','$sample_holder_serial' 
      , '$first_name', '$last_name', '$randomnumber')") 
    or die(mysql_error()); 
    mysql_close($link); 


    echo 'Thanks for submitting the form.<br />'; 
    echo 'RMA NUMBER: ' . $randomnumber . '<br />'; 
    echo 'Controller Serial Number: ' . $controller_serial . '<br />'; 
    echo 'Sample Holder Serial Number: ' . $sample_holder_serial . '<br />'; 
    echo 'First Name: ' . $first_name . '<br />'; 
    echo 'Last Name: ' . $last_name . '<br />'; 
?> 

</body></html> 
+3

데이터베이스는 게시 된 코드를 SQL 인젝션의 위험이 있습니다. – hakre

답변

0

.

2

양식을 배열로 취급해야합니다. 각 양식 필드의 끝에 숫자를 추가 한 다음 양식을 게시 할 때 그 번호를 가져 오는 것만 큼 간단 할 수 있습니다. 당신이 배열의 개념을 이해 할 때까지

는 그것을 가능한 한 간단하고 오래된 학교를 유지하기 위해, 숫자 접미사 방법을 사용할 수 있습니다 ..

<input type="text" name="controller_serial_1" value="foobar" /> 

....

<input type="text" name="controller_serial_2" value="otherfoobar" /> 

및 곧.

는 숨겨진 필드를 작성 max_records 당신의 PHP에서 다음
<input type="hidden" name="max_records" value="2" /> 

:이 개념을 파악 수있게되면

for($i=1; $i<$_POST['max_records']; $i++) 
{ 
    mysql_query("INSERT INTO `rma` (`controller_serial`, `sample_holder_serial`, `first_name`, `last_name`, `RMAnum`) VALUES($_POST['controller_serial_'].$i,$_POST['sample_holder_serial_'].$i, $_POST['first_name_'].$i, $_POST['last_name_'].$i, $_POST['randomnumber_'].$i)"); 
} 

하여, 최적화 된 코드의 다음 단계는 해당 필드의 배열의 각을하는 것입니다 그래서 foreach()를 할 수 있습니다.

+0

@fahad 빈 양식 행에 대한 유효성 검사를 추가하고 아래에 @ johan의 mysql_real_escape_string()을 추가하면 우승자가 표시됩니다. –

0

문제는 루프를 끝내면 단일 값만 남기 때문에 echo 문이 루프에 포함되어 while() 내부에 있어야합니다. 오히려 루프의 각 단계마다 값을 반향시켜야합니다.

1

코드는 한 행에 대한 정보 만 가져 오기 때문에 한 행에서만 작동합니다. 첫 번째 단계는 삽입 할 여러 행에 대한 정보를 얻을 수 있습니다 :

$controller_serials = array("controller1", "controller2", "controller3"); // etc... an array of your controllers 
$sample_holder_serials = array("sampleholder1", "sampleholder3", "sampleholder3"); // etc.. an array of sampleholders 
$first_names; // array of firstnames in the same format 
$last_name; // array of lastnames 
$randomnumber; // array of randomnumbers 

, 그리고

을 (또는 당신이 원하는 경우 모든에 하나 개의 큰 다차원 배열을 넣을 수 있습니다.) foreach 문 쓰기 :

foreach ($controller_serials as $key => $value){ 
    mysql_query("INSERT INTO `rma` (`controller_serial`, `sample_holder_serial`, `first_name`, `last_name`, `RMAnum`) VALUES('{$value}','{$sample_holder_serials[$key]}', '$first_names[$key]', '$last_names[$key]', '$randomnumbers[$key]')"); 

} 

이것은 기본 수준에서 작동해야하지만 SQL 주입에 취약합니다. 귀하의 의견을 살핍니다.

EDIT : 또한 임의의 숫자로 어디로 갈지 잘 모르겠습니다. 1-100의 임의의 숫자를 사용하여 데이터베이스에 값을 입력하는 위치를 결정할 때 가끔 자신의 항목을 덮어 쓰게된다는 것을 알아야합니다.왜 단순히 새로운 행을 삽입하지 않습니까?

변경이 안전 코드에이 코드

enter image description here코딩 공포

$controller_serial = $_POST['controller']; 
    $sample_holder_serial = $_POST['sampleholder']; 
    $first_name = $_POST['firstname']; 
    $last_name = $_POST['lastname']; 
    $randomnumber = $_POST['RMAnum']; 
    ..... 
    mysql_query("SELECT RMAnum FROM rma WHERE RMAnum = '$randomnumber' ") 

: 당신이 필요로하는

$controller_serial = mysql_real_escape_string($_POST['controller']); 
    $sample_holder_serial = mysql_real_escape_string($_POST['sampleholder']); 
    $first_name = mysql_real_escape_string($_POST['firstname']); 
    $last_name = mysql_real_escape_string($_POST['lastname']); 
    $randomnumber = mysql_real_escape_string($_POST['RMAnum']); 
    ..... 
    mysql_query("SELECT RMAnum FROM rma WHERE RMAnum = '$randomnumber' ") 
    // single quotes are vital, dont forget them  ^   ^

관련 문제