如何使用多数组会话2插入数据php javascript mysql
我有一种方法,这种方法之前已经讨论过,并且很成功,但是当多个数据不能进入数据库时,数据只输入一个 这是我的节目 我的PHP表单:如何使用多数组会话2插入数据php javascript mysql,javascript,php,jquery,mysql,Javascript,Php,Jquery,Mysql,我有一种方法,这种方法之前已经讨论过,并且很成功,但是当多个数据不能进入数据库时,数据只输入一个 这是我的节目 我的PHP表单: <form class="form-horizontal" id="form-produk"> <div class="control-group" > <label class="control-label" for="kelas">Kategori</label> <div c
<form class="form-horizontal" id="form-produk">
<div class="control-group" >
<label class="control-label" for="kelas">Kategori</label>
<div class="controls">
<select class='form-control' name='id_kategori'>
<?php
$tampil=mysql_query("SELECT * FROM kategori ORDER BY nama_kategori");
if ($id_kat==0){
echo "<option value=0 selected>- Pilih Kategori -</option>";
}
while($w=mysql_fetch_array($tampil)){
if ($id_kat==$w[id_kategori]){
echo "<option value=$w[id_kategori] selected>$w[nama_kategori]</option>";
}
else{
echo "<option value=$w[id_kategori]>$w[nama_kategori]</option>";
}
}?>
</select>
</div>
</div>
<div class="control-group">
<label class="control-label" for="produk">Nama Produk</label>
<div class="controls">
<?php if($id_kat > 0){
?>
<input type="text" name="editprod" class="form-control" value="<?php echo $nama_prod;?>"/>
<?php } else{
?>
<input name='add_btn' class="btn btn-primary" value='Tambah Record' id='add_btn' type='button'><br><br>
<div id='container1'></div>
<?php } ?>
</div>
</div>
</form>
<script type="text/javascript">
$(document).ready(function() {
var count = 0;
$("#add_btn").click(function() {
count++;
$('#container1').append(
'<div class="records">' + '<textarea id="' + count + '" name="' + count + '" type="text" size="100" class="form-control nma_prod"></textarea>' + '<div class="hrgini"><span class="input-group-addon">Rp</span><input style="text-align:right" id="' + count + '" name="' + count + '" class="form-control hrg_prod" type="text" placeholder="Harga Produk"><span class="input-group-addon">,00</span></div>' + '<button class="remove_item btn btn-danger" >Hapus</button>' + '<br><br></div>'
);
});
$('body').on('click', ".remove_item", function(ev) {
$(this).parents(".records").fadeOut();
$(this).parents(".records").remove();
});
});
</script>
这种方法适用于一个数据,但不适用于多个数据?
有什么建议吗?您应该在变量周围使用单引号。 也就是说,应该是这样-
echo "<option value='{$w[id_kategori]}' selected>'{$w[nama_kategori]}'</option>";
echo“{$w[nama_kategori]}”;
您似乎将几个INSERT
语句一个接一个地连接起来。这不适用于mysql\u query()
。您最好单独发送INSERT
s。即使您在mysql控制台中尝试此操作,您至少必须用分号分隔语句
顺便说一句,mysql\ucode>类型的函数已经被弃用了。它们将在下一个PHP版本(7)中消失。它们也容易受到SQL注入的攻击,出于安全原因不应使用它们。考虑将MySQL或PDO切换到数据库访问。
试试这个:
$data = $_REQUEST['data'];
$data = json_decode($data, true);
$query = '';
foreach($data as $item ){
$kat= $item['kat_prod'];
$nma_prod = $item['nma_prod'];
$hrg_prod = $item['hrg_prod'];
$query = "INSERT INTO `produk` VALUES('','$_POST[kat]','$nma_prod','$hrg_prod')";
if ($query) {
$exec = mysql_query($query);
if ($exec) {
$out = json_encode(array('msg' => 'Data inserted successfully!'));
} else {
die( json_encode(array('msg' => 'Something went wrong!')) );
}
} else {
die( json_encode(array('msg' => 'Nothing to Insert!')) );
}
}
echo $out;
按照原始代码的方式执行多语句可能是最好的解决方案。当然,这意味着您需要使用mysqli
而不是mysql
函数/方法创建db连接
/* mysqli_multi_query example */
$data = $_REQUEST['data'];
$data = json_decode($data, true);
$query = '';
foreach( $data as $item ){
$kat= $item['kat_prod'];
$nma_prod = $item['nma_prod'];
$hrg_prod = $item['hrg_prod'];
$kat = $_POST['kat'];
/* string concatenation, terminate each with semi-colon */
$query .= "INSERT INTO `produk` VALUES ( '', '{$kat}', '{$nma_prod}', '{$hrg_prod}' );";
}
if( $query ) {
$exec = mysqli_multi_query( $conn, $query );
if( $exec ) {
exit( json_encode( array( 'msg' => 'Data inserted successfully!') ) );
} else {
exit( json_encode( array( 'msg' => 'Something went wrong!') ) );
}
} else {
exit( json_encode( array( 'msg' => 'Nothing to Insert!') ) );
}
或者,您可以继续使用mysql\u query
(尽管由于sql注入,现在非常不鼓励这样做),并在处理数组的第一个循环中执行每个查询,或者在这样一个单独的循环中执行每个查询
$data = isset( $_REQUEST['data'], $_POST['kat'] ) ? $_REQUEST['data'] : false;
if( $data ){
$data = json_decode( $data, true );
$query = array();
foreach( $data as $item ){
$kat= $item['kat_prod'];
$nma_prod = $item['nma_prod'];
$hrg_prod = $item['hrg_prod'];
$kat = strip_tags( trim( $_POST['kat'] ) );
$query[]="INSERT INTO `produk` VALUES ( '', '{$kat}', '{$nma_prod}', '{$hrg_prod}' );";
}
if( !empty( $query ) ) {
$msgs=array('msg'=>'multiple messages');
foreach( $query as $i => $sql ){
$res = mysql_query( $sql, $conn );
$msgs[ 'stmt'.$i ]=$res ? 'Data inserted successfully!' : 'Something went wrong!';
}
exit( json_encode( $msgs ) );
} else {
exit( json_encode( array( 'msg' => 'Nothing to Insert!') ) );
}
mysql_close( $conn );
}
mysqli
及其相关方法在您使用准备好的语句时提供了更好的sql注入保护-有很多关于StackOverflow的文章可供选择。看起来您是在连接sql-每个语句末尾都没有终止分号。我想您可能需要使用mysqli\u multi\u query
来实现这一点(不过要用分号终止每条语句)@RamRaider抱歉。我看你在评论中胜过我。
/* mysqli_multi_query example */
$data = $_REQUEST['data'];
$data = json_decode($data, true);
$query = '';
foreach( $data as $item ){
$kat= $item['kat_prod'];
$nma_prod = $item['nma_prod'];
$hrg_prod = $item['hrg_prod'];
$kat = $_POST['kat'];
/* string concatenation, terminate each with semi-colon */
$query .= "INSERT INTO `produk` VALUES ( '', '{$kat}', '{$nma_prod}', '{$hrg_prod}' );";
}
if( $query ) {
$exec = mysqli_multi_query( $conn, $query );
if( $exec ) {
exit( json_encode( array( 'msg' => 'Data inserted successfully!') ) );
} else {
exit( json_encode( array( 'msg' => 'Something went wrong!') ) );
}
} else {
exit( json_encode( array( 'msg' => 'Nothing to Insert!') ) );
}
$data = isset( $_REQUEST['data'], $_POST['kat'] ) ? $_REQUEST['data'] : false;
if( $data ){
$data = json_decode( $data, true );
$query = array();
foreach( $data as $item ){
$kat= $item['kat_prod'];
$nma_prod = $item['nma_prod'];
$hrg_prod = $item['hrg_prod'];
$kat = strip_tags( trim( $_POST['kat'] ) );
$query[]="INSERT INTO `produk` VALUES ( '', '{$kat}', '{$nma_prod}', '{$hrg_prod}' );";
}
if( !empty( $query ) ) {
$msgs=array('msg'=>'multiple messages');
foreach( $query as $i => $sql ){
$res = mysql_query( $sql, $conn );
$msgs[ 'stmt'.$i ]=$res ? 'Data inserted successfully!' : 'Something went wrong!';
}
exit( json_encode( $msgs ) );
} else {
exit( json_encode( array( 'msg' => 'Nothing to Insert!') ) );
}
mysql_close( $conn );
}