2013-08-22 2 views
1

PHP와 MySQL을 기반으로 작업 표를 생성하라는 메시지가 표시되었습니다.PHP가 자동으로 삭제되는 SQL 데이터를 가져 오는 중

데이터를 삽입하는 페이지와 데이터를 표시하고 편집/삭제할 페이지를 만들었습니다.

<?php 
    while($info = mysql_fetch_array($data)) { 
?> 
<tr> 
    <td> <input type="checkbox" name="job" id="<?php echo $info['job_code']?>" value="<?php echo $info['job_code']?>" /></td> 
    <td><?php echo $info['job_code'] ?></td> 
    <td><?php echo $info['job_desc'] ?> </td> 
    <td><?php echo $info['job_client'] ?> </td> 
    <td><?php echo $info['job_year'] ?> </td> 
    <td><?php echo $info['job_month']?> </td> 
    <td><?php echo $info['job_date']?> </td> 
    <td><?php echo $info['job_category']?> </td> 
    <td>EDIT</td> 
    <td>DELETE</td> 
</tr> 
<?php } ?> 

을 여기에 2에서, 나의 이해에서 작업 []의 변수 삭제 과정

$this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); 

$admin_data_query = mysql_query("SELECT * FROM jobs")or die(mysql_error()); 
$job_code_query = $_POST['job']; 
$job_code_query_items = 'IN ('; 
foreach ($job_code_query as $key => $value) { 
    $job_code_query_items .= ($key > 0 ? ", '" . $value . "'" : "'" . $value . "'"); 
} 
$job_code_query_items .= ');'; 
while ($admin_data = mysql_fetch_array($admin_data_query)) { 
    if (isset($_POST[$admin_data['job_code']])) { 
     $admin_sql = "DELETE FROM jobs WHERE job_code = $job_code_query_items"; 
     $admin_query = mysql_query($admin_sql) or die(mysql_error()); 
     $this->messages[] = "Job deleted."; 
    } else { 
     $this->messages[] = "Failed to delete job."; 
    } 
} 

입니다 : 여기

데이터 편집을 표시하는 페이지입니다/삭제 페이지가 1 페이지에서 사용자가 제출 한 체크 박스를 포착하지 못했거나 확인란이 잘못되어 데이터를 보내지 않았습니다.

편집 : 답변을 찾았습니다. 여기 있습니다 올바른 코드 : 처리 페이지에서

<td> 
    <input type="checkbox" name="<?php echo $info['job_code']?>" 
      id="<?php echo $info['job_code']?>" 
      value="<?php echo $info['job_code']?>"/> 
</td> 
<td><?php echo $info['job_code'] ?></td> 
<td><?php echo $info['job_desc'] ?> </td> 
<td><?php echo $info['job_client'] ?> </td> 
<td><?php echo $info['job_year'] ?> </td> 
<td><?php echo $info['job_month']?> </td> 
<td><?php echo $info['job_date']?> </td> 
<td><?php echo $info['job_category']?> </td> 

페이지 1

에서

(2)

while ($admin_data = mysqli_fetch_array($admin_data_query)) { 
    $job_code_query = $admin_data["job_code"]; 

    if (isset($_POST[$admin_data["job_code"]])) { 

     $admin_sql = "DELETE FROM jobs WHERE job_code = '$job_code_query'"; 
     $admin_query = mysqli_query($this->db_connection, $admin_sql) or die(mysqli_error($this->db_connection)); 
     $this->messages[] = "Job deleted."; 
    } else { 
     $this->messages[] = "Failed to delete job."; 
    } 
} 

도움이 또는 그것을 읽으려고 한 사람 주셔서 감사합니다!

+0

을 사용해야합니다. 확인란이 하나만 있으면 배열에'name = "job"'을 입력하면됩니다. 당신은 항상'isset'을 사용하여 theckbos가 설정되어 있는지 확인하고 그 값을 취합니다. 그러나 IMO는 checkbox의 이름을 배열로 사용하지 않고 하나의 값으로 만듭니다. – Fixus

+0

많은 작업이 나열되어 있고 그 중 다중 확인란이 선택되어 있습니까? 나는 MaveRick이 게시 한 답변과 제안을 시도했지만 더 이상 오류는 없지만 내 작업은 삭제되지 않았거나 여전히 나열되지 않았습니다. –

+0

이 변수를 사용하여 쿼리를 보내면 전체 테이블'jobs'이 삭제됩니다. 내 대답으로 명확히 지우려면 정확히 무엇을 삭제해야합니까 – MaveRick

답변

0

변화 $job_code_query = $_POST['job[]'];$job_code_query = $_POST['job'];

에 있지만 쿼리에 배열을 보낼 수 있도록 $job_code_query가 배열이기 때문에 이것은 또 다른 문제가 발생할 수 $admin_sql ="DELETE FROM jobs WHERE job_code = '$job_code_query'";

당신은 위의 정의를 수정하고 배열을 변환해야 문자열 쿼리에 추가하기 전에

당신의 코드는 다음과 같습니다

$this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); 

    $admin_data_query = mysql_query("SELECT * FROM jobs")or die(mysql_error()); 
    $job_code_query = $_POST['job']; 
    $job_code_query_items = 'IN ('; 
    foreach ($job_code_query as $key => $value) { 
     $job_code_query_items .= ($key>0?", '".$value."'":"'".$value."'"); 
    } 
    $job_code_query_items .= ');'; 
    while ($admin_data = mysql_fetch_array($admin_data_query)) { 
     if (isset($_POST['job_code'])) { 
      $admin_sql ="DELETE FROM jobs WHERE job_code $job_code_query_items"; 
      $admin_query = mysql_query($admin_sql) or die(mysql_error()); 
      $this->messages[] = "Job deleted."; 
     } else { 
      $this->messages[] = "Failed to delete job."; 
     } 
    } 
+0

제안을 따랐지만 작업은 여전히 ​​데이터베이스에 나열되어 있습니다. 그리고 배열을 문자열로 변환하는 방법에 대해서는 여전히 혼란 스럽습니다. 더 많은 정보를 제공 할 수 있습니까? 고맙습니다! –

+0

'$ job_code_query'는 값이 많은 배열입니다.이 배열의 값까지 한 번에 많은 행을 삭제해야합니까? – MaveRick

+0

예, 기본적으로 이메일받은 편지함의 확인란과 같아 한 번에 많은 행을 삭제하려고합니다. –

0

당신은 또한 PDO 또는 현재 사용되지 않습니다 MySQLi 대신 mysql_로 * 기능을 사용해야 하나

$job_code_query = $_POST['job']; 

하여 라인 (29)을 교체합니다. MySQLi 연결을 사용하는 경우 $dbconnection->query($sqlquery)mysql_query

관련 문제