2013-11-27 30 views
0

我有如下形式PHP更新数据库中的数据只是有时

$connection = mysqli_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD, SQL_DBNAME) ; 
if (mysqli_connect_errno($connection)) 
{ 
echo "Nespojeno s MySQL: " . mysqli_connect_error(); 
} 
$sql = "SELECT * FROM novinky"; 
$result = mysqli_query($connection, $sql); 
echo "<div id='newsbox'>"; 
while($zaznam = mysqli_fetch_row($result)): 
echo "<form class='newsholder'>"; 
echo "<input id='displaynadpis' value='$zaznam[1]'>"; 
echo "<input id='displaybold' value='$zaznam[2]'>"; 
echo "<textarea id='displaytext'>$zaznam[3]</textarea>";  
echo "<div class='buttonsholder'>"; 
echo "<button class='deletebutton'>Smazat</button>"; 
echo "<button class='updatebutton'>Upravit</button>"; 
echo "<input id='prime' type='hidden' attr='id' value='$zaznam[0]'>"; 
echo "</div>"; 
echo "<div class='clearfix'></div>";  
echo "</form>"; 
endwhile; 

echo "</div>"; 

mysqli_close($connection); 

从数据库中,以便于.updatebutton点击更新它们显示的数据。 数据由jQuery的AJAX

$('.updatebutton').on('click', function(){ 

var idVal = $(this).closest('.newsholder').find('#prime').val(); 
var displaynadpisVal = $(this).closest('.newsholder').find('#displaynadpis').val(); 
var displayboldVal = $(this).closest('.newsholder').find('#displaybold').val(); 
var displaytextVal = $(this).closest('.newsholder').find('#displaytext').val(); 

alert(displaynadpisVal); 

$.ajax({url:"updaterecord.php", 
type:"POST", 
cache:false, 
data:{id: idVal, displaynadpis: displaynadpisVal, displaybold: displayboldVal, displaytext: displaytextVal} 

}); }); 

传递给PHP脚本

$connection = mysqli_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD, SQL_DBNAME) ; 

if (mysqli_connect_errno($connection)) 
{ 
    echo "Nespojeno s MySQL: " . mysqli_connect_error(); 
    } 

$id = $_POST['id']; 
$updatenadpis = $_POST['displaynadpis']; 
$updatetextbold = $_POST['displaybold']; 
$updatetext = $_POST['displaytext']; 


echo $updatetext; 

$sql = "UPDATE novinky SET nadpis='$updatenadpis', 
         textbold='$updatetextbold', 
         text='$updatetext' 



WHERE id = '$id'" 
    ; 


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

mysqli_close($connection); 

更新数据库。问题是,它只有时有效,但在约70%的情况下,它没有任何改变。数据存储在JS变量中很好,当通过alert()测试时,它们每次都存在。所以这个问题可能在mysqli_query()中?或者AJAX方法?我尝试了很多来自其他帖子的选项和建议,但没有运气。感谢您的帮助...

+0

尝试使用预处理语句并捕获异常。你将有一个起点。 –

+0

你可以请检查你的浏览器firebug或检查元素,并检查你的ajax响应,并在这里发布,如果有任何错误来响应。 – harishkumar329

+0

状态代码是:200确定在ajax post方法....并且我不太确定如何构建准备语句.... –

回答

0

这里最大的问题是您正在传递原始用户输入查询。分配给变量不会改变任何东西!

您应该过滤从用户收到的所有内容,并使用准备好的语句确保您的安全。

也不要使用mysqli_connect_error()来检查查询错误。使用mysqli_error()

+0

谢谢。我正在努力做好准备的陈述,但不确定正确的施工。在接下来的评论是我做了什么... –

+0

$语句= $ SQL->准备(“UPDATE novinky SET nadpis = ?, \t \t \t \t \t \t \t textbold = ?, \t \t \t \t \t \t \t文本= \t \t \t \t \t \t \t WHERE ID =“) ?; $ stmt-> bindParam('sss',$ updatenadpis,$ updatetextbold,$ updatetext ); $ stmt-> execute(); $ stmt-> close(); –

+0

这是不正确的,是吗? –