2014-09-19 148 views
1

询问之前,这里是我的格式的图片: enter image description herePHP不插入/后空值,但仍插入/后填充值

正如你所看到的,我有1个表格2个表,每个表,有六个输入。

在“表阿拉特”和“表Bahan”的输入代码是这样的:

<form method='post' action='p_input.php'> 
    <table> 
    <tr> 
     <td>1.</td> 
     <td><input type='text' name='nama[]' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='merk[]' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='kemasan[]' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='mhs[]' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='jml[]' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='hps[]' style='width:100%;' autocomplete='off'> 
     <input type='hidden' name='jenis[]' value='alat' autocomplete='off'></td> 
    </tr> 
    </table> 

    <table> 
    <tr> 
     <td>1.</td> 
     <td><input type='text' name='nama[]' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='merk[]' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='kemasan[]' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='mhs[]' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='jml[]' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='hps[]' style='width:100%;' autocomplete='off'> 
     <input type='hidden' name='jenis[]' value='bahan' autocomplete='off'></td> 
    </tr> 
    <table width='100%' align='center' style='margin-top:0;'> 
    <tr> 
    <td><input name='reset' type='reset' id='bersihkan' value='Reset'> 
    <input name='submit' type='submit' id='ajukan' value='Send'></td> 
    </tr> 
    </table> 
    </table> 
    </form> 

在这里所不同的是<input type='hidden' name='jenis[]' value='alat' autocomplete='off'>,对于“表阿拉特”的值是“ALAT”的“表Bahan “价值是'巴汉'(我在这里没有麻烦,只是告诉你)。

这是我p_input.php脚本:

<?php 
     error_reporting(0); 
     session_start(); 

     if(isset($_REQUEST['submit'])) { 
     include "../conf/koneksi.php"; 
     $count = count($_POST['nama']); 
     $jurusan = $_POST['jurusan']; 
     $lab = $_POST['lab']; 
     $materi = $_POST['materi']; 
     $mahasiswa= $_POST['mahasiswa']; 
     for($i = 0; $i < $count; $i++){ 
      $nama = mysql_real_escape_string($_POST['nama'][$i]); 
      $merk = mysql_real_escape_string($_POST['merk'][$i]); 
      $kemasan = mysql_real_escape_string($_POST['kemasan'][$i]); 
      $mhs = mysql_real_escape_string($_POST['mhs'][$i]); 
      $jml = mysql_real_escape_string($_POST['jml'][$i]); 
      $hps = mysql_real_escape_string($_POST['hps'][$i]); 
      $jenis = mysql_real_escape_string($_POST['jenis'][$i]); 
      $sql2= "ALTER TABLE tb_usulan AUTO_INCREMENT = 1"; 
      mysql_query($sql2); 
      $sql=mysql_query("INSERT INTO tb_usulan (nama,merk,kemasan,kebutuhan,jml_kebutuhan,hps,jenis,materi_praktikum) 
      VALUES 
      ('$nama', '$merk', '$kemasan', '$mhs', '$jml', '$hps','$jenis','$materi')") or die(mysql_error()); 

     } 
     } 
     ?> 

我的问题是:如果我只在“TABLE阿拉特”填写输入和保持输入“TABLE BAHAN”空,然后当我点击提交,如果我只填写“TABLE BAHAN”中的输入并将“TABLE ALAT”中的输入保留为空,那么只有在“TABLE BAHAN”中输入时才会插入/发布,我只想在表alat中插入/发布到数据库,反之亦然到数据库。

更新问题:这只是一个表单和一个提交按钮,并且同时插入到同一个表中。

+0

一个很好的方法来解决这个问题,就是要利用AJAX,因为使用php/html你只能提交每页一个表单,用ajax你可以保存到数据库而不需要刷新页面。 – 2014-09-19 04:05:25

+0

ahh对不起,请参阅编辑。 我只为这个页面使用一种形式。 :) – Shitprogrammers 2014-09-19 04:08:30

+0

您可以通过更改表单中的表名来实现此目的。 – 2014-09-19 04:11:04

回答

1

记住我添加了输入字段。因此在应用解决方案之前将其删除。因为您的原始表单中已经有了输入字段。

<table> 
    <tr> 
     <td>1.</td> 
     <td><input type='text' name='nama1' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='merk1' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='kemasan1' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='mhs1' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='jml1' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='hps1' style='width:100%;' autocomplete='off'> 
     <input type='hidden' name='jenis1' value='alat' autocomplete='off'></td> 
    </tr> 
    </table> 

    <table> 
    <tr> 
     <td>1.</td> 
     <td><input type='text' name='nama2' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='merk2' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='kemasan2' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='mhs2' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='jml2' style='width:100%;' autocomplete='off'></td> 
     <td><input type='text' name='hps2' style='width:100%;' autocomplete='off'> 
     <input type='hidden' name='jenis2' value='bahan' autocomplete='off'></td> 
    </tr> 
    </table> 


    <input type='submit' name="submit"> 
</form> 
</body> 

比你在哪里运行查询,只改变的那部分。

if(!empty($_POST['name1'])) 
    { 
     //Run First query 
    } 
    if(!empty($_POST['name2'])) 
    { 
     //run your second query 
    } 

该代码将执行的操作将检查该值。如果值不为空,比它会执行其他查询否则无法执行查询

和第二是当您使用的代码,你不会有任何阵列,所以你需要删除$ count变量。和你的foreach代码循环。

第三件事。如果(isset($ _ REQUEST ['submit'])){ include“../conf/koneksi.php”;你需要设置

之后的值。

对于每个费尔德像下面为我设置几个

$名1 = $ _ POST [ '名称1']; $ merk1 = $ _ post ['merk1'];

对两个表的每个值都做这件事。

以及东西您需要更改查询中的值部分,例如您的值将变为$ name1,以此类推对第一个查询和第二个查询$ name2等等。

希望我解释一下这一步。并在执行步骤之前。如果你不明白,在你开始使用它之前问我。

谢谢

+0

我使用$ count和for循环,因为我的表格行是动态的,所以如果我点击“+”(就像您在图片中看到的那样),它会添加一个新行。 – Shitprogrammers 2014-09-19 07:34:52

+1

@MuhammadFahmy如果你使用count,因为这个没关系。解决方案将保持不变。只是一些步骤将改变。你需要使用计数每个加号让$ count1和$ count2。和耶而不是删除你原来的代码中使用的for循环。因为你需要计数循环的意思,但是包括在你的两个循环中如果staement。如果你不知道我在说什么。让我知道我会更新我的答案。谢谢 – 2014-09-19 07:50:52

+0

是的,我想我明白你的意思,所以我必须让每个查询循环,对不对? – Shitprogrammers 2014-09-19 07:53:45

2

只是做你的for循环内检查。

for($i = 0; $i < $count; $i++) 
{ 
    //skip if nama is empty 
    if($_POST["nama"][$i] == ""){continue;} 

    $nama = mysql_real_escape_string($_POST['nama'][$i]); 
    $merk = mysql_real_escape_string($_POST['merk'][$i]); 
    $kemasan = mysql_real_escape_string($_POST['kemasan'][$i]); 
    $mhs = mysql_real_escape_string($_POST['mhs'][$i]); 
    $jml = mysql_real_escape_string($_POST['jml'][$i]); 
    $hps = mysql_real_escape_string($_POST['hps'][$i]); 
    $jenis = mysql_real_escape_string($_POST['jenis'][$i]); 
    $sql2= "ALTER TABLE tb_usulan AUTO_INCREMENT = 1"; 
    mysql_query($sql2); 
    $sql=mysql_query("INSERT INTO tb_usulan (nama,merk,kemasan,kebutuhan,jml_kebutuhan,hps,jenis,materi_praktikum) 
    VALUES ('$nama', '$merk', '$kemasan', '$mhs', '$jml', '$hps','$jenis','$materi')") or die(mysql_error()); 
} 
+0

再次阅读该问题。 – 2014-09-19 06:07:18

+0

这个问题很好。如果这个答案有什么问题,那么这已经是一个设计问题。如果OP只想POST 1行,他不应该共享表格,除非他在玩AJAX。 – 2014-09-19 06:15:22

+0

感谢您帮助我的朋友,但我的问题已经解决了,谢谢您花时间帮助我。 – Shitprogrammers 2014-09-19 09:17:28

1

一个简单的解决办法是将表分离的形式分离是这样的:

<form name=formOne> 
    <table><!-- Alat etc. --> 
    </table> 
    <input type=submit> 
</form> 

<form name=formTwo> 
    <table><!-- Behan etc. --> 
    </table> 
    <input type=submit> 
</form> 

则仅用于至极提交被推表将得到submited!

编辑 使它只与一个提交按钮(客户端)一起工作。 添加下面的jQuery:

var lastForm; 
$("form").click(function(){ 
    lastForm = this; 
}); 

$("input[type=submit]").click(function(){ 
    $(lastForm).submit(); 
}); 

然后添加在表单元素外的提交按钮。 但最好的解决方案是检查字段serverside。 (无论如何都应该这样做,因为你不能真正相信最终用户)。

但这已经在其他答案中提出!

+0

提交按钮只有一个,所以如果当我点击提交按钮时,表格bahan被填充并且表格alat为空,它将自动仅提交表格bahan并忽略表格alat。 – Shitprogrammers 2014-09-19 07:56:12

+0

您需要添加一个提交按钮,如上例所示! – 2014-09-19 08:02:25

+0

但是,它会降低效率,因为我的工作场所只需要一个sumbit按钮,无论如何它都插入到同一张表中。 – Shitprogrammers 2014-09-19 08:25:10