2012-12-09 2 views
0

내 웹 페이지에 표를 표시하는 코드가 있습니다. 테이블의 내용은 데이터베이스와 연결됩니다. 그래서 html 테이블의 데이터베이스에서 테이블을 가져옵니다. 각 (html) 행의 끝에는 이미지 (icon-delete.png)가 있습니다. 이것은 $ row [0]의 값을 얻습니다. (이것은 내 PKID가있는 곳이므로 항상 고유 한 번호이며 자동 오름차순입니다.) 이제 icon-delete.png 버튼을 클릭 한 개별 행을 지우고 싶습니다. .. 내 코드의 마지막 규칙이미지와 기본 키 값을 사용하여 데이터베이스에서 행 삭제

$con = mysql_connect('localhost', 'root', ''); 
if ($con) { 
    mysql_select_db('bieren', $con); 
    $result = mysql_query('SELECT * FROM brouwers'); 
    echo '<form action="" method="post">'; 
    echo '<table border="0" cellspacing=0>';  
    echo '<tr class="heads"> 
     <th>brouwernr</th> 
     <th>brouwernaam</th> 
     <th>adres</th> 
     <th>postcode</th> 
     <th>gemeente</th> 
     <th>omzet</th> 
    </tr>'; 

    $counter = 0; 
    while ($row = mysql_fetch_array($result, MYSQL_NUM)) { 
     if($counter % 2 == 0){ 
      echo '<tr class="even">'; 
     } else{ 
      echo '<tr class="oneven">'; 
     } 

     for($i = 0; $i <=6; $i++){ 
      $counter ++; 
      echo '<td>'; 
      echo $row[$i]; 
      echo'</td>'; 
     } 

     echo '<td> <input type="image" src="icon-delete.png" name="delete" value ="'.$row[0].'" /> </td>'; 
     echo '</tr>'; 
    } 
} else { 
    echo 'Connectie niet geslaagd. Reden: ' . mysql_error() . '. Probeer opnieuw.'; 
} 
echo '</table>'; 
echo '</form>'; 

if(isset($_POST)) 
{ 
    $con = mysql_connect('localhost', 'root', ''); 

    if ($con) { 
     mysql_select_db('bieren', $con); 
     $result = mysql_query('DELETE FROM brouwers 
        WHERE brouwers.brouwernr = "'.$row[0].'"');} 
} 

하나는 말합니다 : PHP 코드 행은 또한 데이터베이스에서 삭제해야하는이이 순간에 내 코드는 WHERE brouwers.brouwernr = $ 행 [0] 그러나 이것은 당신이 무슨 상관이 이해할 수 있도록 나 또한 내가 HTML 지금 무엇을 가지고의 이미지를 보여 드리겠습니다. 삭제하는 올바른 행이 아닙니다. The webpage view

많은 감사합니다!

+1

** 헤드 업! ** PHP의 향후 버전은 * mysql_ 계열의 기능을 비추천 및 삭제합니다 *. 이제 [PDO로 전환] (http://php.net/book.pdo) 또는 [mysqli] (http://php.net/book.mysqli)에 좋은 시간이 될 것입니다. – Charles

+0

우선 나는 지금 당장 PDO를 사용하고 싶지 않습니다. 지금 내가 가진 것은 기본적으로 내가 시도한 것인데, 나는 많이 바뀌었지만 데이터베이스에서 뭔가를 제거하는 것에 가까워졌지만 현재 행에는 없다. –

답변

4

원래 질문에 대한 답은 삭제하고자하는 행의 ID로 $ _POST [ 'delete']를 사용해야한다는 것입니다. 이미 @ vlcekmi3에 의해 잘 응답 된 것 같습니다.

그러나, 나는 (지금은 사용되지 않으며 긴을 낙담하고있다 ) 이전 내선/MySQL의 확장 기능을 사용하는 방법에 대한 당신의 마음을 변경할 수 설득 희망 원래 문제에 대한 몇 가지 추가 값을 추가 할 수 있습니다 믿는다 무엇 . 나는 당신이 PDO를 사용하고 싶지 않다고 말한 것을 알고 있습니다. 마음의 틀에 틀린 부분은 이전 mysql API 사용을 중단하고 최신 API (예 : PDO 또는 MySQLi)를 사용하지 않는 완벽한시기입니다. 이전 API를 사용하지 않을 이유를 제공하기보다는 새로운 API를 사용해야하는 몇 가지 이유를 알려 드리려고합니다.

  1. 현재 사용중인 API (mysql_* 기능)은 거의 15 세입니다. 우리 중 대부분은 오래된 자동차를 소유하지 않습니다. 귀하의 운송 수단을 중요하게 생각하는만큼 귀하의 규정을 소중하게 생각합니까? 이 확장은 MySQL 버전 3.x에서 도입되었으며 그 이후로 그 버전의 MySQL과 역 호환을 유지했습니다. 이러한 외부의 하위 호환성 제약으로 인해 API는 데이터베이스의 새로운 기능을 모두 지원하지 못하고 있으며 그 기능 대부분은 오늘날 웹에서의 최신 애플리케이션 개발에 매우 ​​중요합니다.
  2. API는 더 이상 MySQL 커뮤니티에서 유지 관리 또는 지원을받지 않습니다. 즉,이 확장 프로그램에서 수년 동안 변화 될 것으로 예상해서는 안됩니다. 여기에는 버그 수정, 잠재적 인 보안 패치 및 MySQL에서 변경된 사항이 포함되어 있습니다. 그것은 좋은 일이 아닙니다 (당신은 자신을 위험에 빠뜨리고 있습니다). PDO와 MySLQi 모두 이러한 위험으로부터 코드를 안전하게 보호하며, 아무런 문제가 발생하지 않을 경우 (버그가 발견되면) 확장 기능을 즉시 적용 할 수 있다는 점에서 편의성을 제공합니다.
  3. 매개 변수화 된 쿼리 (즉, 당신이 일반적인 인간을 방지 할 수 있습니다 (즉, 많은 일반적인 상황에서 잠재적으로 더 빠른 성능을 제공합니다)
    • 준비된 문 :
    • 더 새로운 API를 사용하면 당신처럼, 내선/mysql을 사용할 수없는 기능 제공 당신이 여기 경험 탈출 문제)
    • 비동기 쿼리 (다른 성능 이점)
    • 저장 프로 시저 (일반 SQL 쿼리와 함께 당신이 할 수없는 이점을 제공하는 훌륭한 도구)
    • 여러 쿼리 기능같은 오류 MySQL 서버와 해당 인터페이스 명령을 실행하는 기능
    • (당신이 네트워크를 통해 여러 데이터베이스 서버가있는 경우에)
    • SSL 지원 (재무 데이터 같은 미션 크리티컬 애플리케이션을위한) 47,
    • 트랜잭션을 지원하는 당신을 이전 API로는 할 수 없습니다.
  4. 최신 API를 사용하면 코드를 더 쉽게 읽고 사용할 수 있습니다. 이러한 API를 사용하여 SQL 논리를 계산 논리의 대부분을 추상화하고 ext/mysql이 사용자의 입장에서 불필요한 복잡성을 피할 수 있습니다.
  5. PDO는 데이터베이스에 무관 한 API이므로 PHP가 지원할 수있는 데이터베이스와 인터페이스하기 위해 PHP에서 동일한 기능 세트를 한 번만 배워야합니다. 향후 언제든지 새 데이터베이스로 작업해야하는 경우 새 인터페이스를 다시 학습 할 필요가 없습니다. 따라서 PHP 코드 작업에 많은 시간과 노력을 낭비 할 필요가 없습니다.

내가 당신을 위해 나열한 혜택 중 일부를 살펴본 후, 의 전환을 지금 보지 않고의 이점을 살펴보고 스위칭의 이점보다 중요한지 말해 보라고합니다. 더 이상 새로운 API 로의 이동을 연기 할 때 단일 이점을 생각조차 할 수 없기 때문에 당신이 그 결론에 도달하지 못할 것이라고 확신합니다. 이 오래된 API는 가난한 사례를 조장합니다. 그 중 하나는 당신이 당신의 답을 얻었을 때 오늘 깨닫은 것입니다. ext/mysql을 사용해 수년간 두뇌에 뿌려진 이러한 가난한 사례를 가지고있는 것은 아닙니다. 심지어 나는 지난 8 년 동안 ext/mysql에서 얼마나 많은 습관이 있었는지 깨달았다. 그러나 내가 장점과 단점을 실제로 보았을 때 (그리고 지난 2 년을 보냈다) 나는 찬성론이 단점보다 훨씬 큽니다.

간단한 예를 들어의 당신이 PDO를 사용한다면이 코드가 될 것입니다 디버깅 할 및 쉽게 읽는 방법을 훨씬 더 아름다운, 쉽게 볼 수 있습니다.

/* This creates a new PDO object that holds the connection to your database */ 
$db = new PDO('mysql:dbname=bieren;host=localhost;charset=UTF-8', 'root', ''); 

/* This puts PDO into Exception Mode making it easier for you to catch errors */ 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); // turn off emulation 

/* Create your HTML table */ 
echo "<table>"; 

// Look how easy it is to loop over the results 
foreach($db->query('SELECT * FROM brouwers', PDO::FETCH_NUM) as $i => $row) { 
    echo ($i % 2 ? '<tr class="oneven">' : '<tr class="even">'); 
    foreach ($row as $column) { 
     echo "<td>$column</td>"; 
    } 
    echo "</tr>\n"; 
} 

echo "</table>"; 

그냥 어떻게 보면 코드의 모양과 읽기가 실제로 쉽게하는 것이 훨씬 좋네요 더 간결! 동의하니?

관련 문제