2013-11-23 2 views
0

작동하지 삭제할 I 데이터베이스jQuery를 아약스 MySQL의 기록은

$connection = mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD) or die("Pripojeni se  nezdarilo" . mysql_error()); 
mysql_select_db('svatepole'); 
$sql = "SELECT * FROM novinky"; 
$result = MySQL_Query($sql, $connection); 


while($zaznam = MySQL_Fetch_Row($result)): 

echo "<form class='newsholder'>"; 

echo "<input value='$zaznam[1]'>"; 
echo "<input value='$zaznam[2]'>"; 
echo "<textarea>$zaznam[3]</textarea>"; 
echo "<input id='prime' attr='id' value='$zaznam[0]'>"; 

echo "<div class='buttonsholder'>"; 
echo "<button id='deletebutton'>Smazat</button>"; 
echo "<button>Upravit</button>"; 
echo "</div>"; 
echo "<div class='clearfix'></div>"; 

echo "</form>"; 
endwhile; 

에서 SELECT 데이터를 표시하기 위해 다음과 같은 PHP 파일을하고 난 행의 ID를 찾을 수 JQuery와 아약스에게

$('#deletebutton').on('click', function(){ 

var idVal = $(this).parent().parent().find('#prime').val(); 

alert(idVal) 
$.post("deleterecord.php", 
{id:idVal} 

); 

}); 

를 추가하려고 해요 DELETE 파일로 전달하면 클릭시 행이 삭제됩니다.

$connection = mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD) or die("Pripojeni se  nezdarilo" . mysql_error()); 

$id = $_POST['id']; 

if(! $connection) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
$sql = "DELETE FROM novinky WHERE id = $id" 
    ; 

mysql_select_db('svatepole'); 
$retval = mysql_query($sql, $connection); 
if(! $retval) 
{ 
    die('Could not enter data: ' . mysql_error()); 
} 
echo "Entered data successfully\n"; 

mysql_close($connection); 

그러나이 기능을 사용할 수 없습니다. Chrome 콘솔에 따르면 데이터베이스에 더 많은 내용이 포함되어 있지만 첫 번째 행에만 첨부 된 이벤트 핸들러가 있습니다. 또한 추가 된 경고는 맨 처음 버튼을 클릭했을 때만 나타납니다.

어떤 생각을 잘못하고 있으며 데이터를 DELETE 쿼리에 올바르게 전달하는 방법은 무엇입니까?

감사합니다.

echo "<button class='deletebutton'>Smazat</button>"; 

및 JQuery와 사용

+0

더 이상 mysql_ * 함수를 사용하지 마십시오. 더 이상 사용되지 않습니다. 자세한 내용은 [PHP에서 mysql_ * 함수를 사용하면 안되는 이유는 무엇입니까?] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)를 참조하십시오. 대신 [prepared statements] (http://bobby-tables.com/php.html)에 대해 알아야하며 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http : //)를 사용해야합니다. php.net/mysqli). 어떤 것을 결정할 수 없으면 [이 기사] (http://php.net/manual/en/mysqlinfo.api.choosing.php)가 도움이 될 것입니다. PDO를 선택하면 [여기는 좋은 튜토리얼입니다] (http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers). –

+0

BTW, 당신은 [SQL injection] (https://www.owasp.org/index.php/SQL_Injection)에 취약합니다. [XSS] (https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29)를 방지하려면 HTML로 출력 할 때 항상 ['htmlspecialchars'] (http://php.net/htmlspecialchars)를 사용하십시오.). –

+0

감사. 나는 그것을 MySQLi로 변환 할 것이다 .... –

답변

1
echo "<button id='deletebutton'>Smazat</button>"; 

변경이.

$('.deletebutton').on('click', function(){ 
    var idVal = $(this).parent().parent().find('#prime').val(); 

    alert(idVal) 
    $.post("deleterecord.php",{id:idVal},function(response){ alert(response);}); 

}); 

u가 id = 'deletebutton'을 사용하는 경우 .jquery는 id가 'deletebutton'인 첫 번째 요소를 검사합니다. 이벤트 핸들러는 id = "deletebutton"인 첫 번째 요소에만 첨부됩니다.

+0

위대한. 이것은 문제로 보였다. 아주 어리석은 실수. 이제는 삭제 버튼보다 아무것도하지 않는다는 점을 제외하고는 모든 것이 훌륭하게 작동합니다. 어쩌면 한 번 10 번 시도. 어떤 생각을 어떻게 100 % 기능을 보장하기 위해? –

+0

그래서 파이어 폭스는 매번 사파리와 크롬을 처리 할 수있는 것처럼 보입니다. jQuery가 행 ID를 찾기 위해 통과하는 문제가있을 수 있습니까? var idVal = $ (this) .parent(). parent(). find ('# prime'). –