【问题标题】:No value inserted into MySQL table using PHP没有使用 PHP 将值插入 MySQL 表
【发布时间】:2016-07-08 20:20:58
【问题描述】:

我尝试了很多不同的代码,但它仍然没有插入到我的MySQL 表中。到目前为止,这是我所拥有的:

<?php 
$con=mysqli_connect("localhost", "root", "","jpn") or die("Cannot connect to server.".mysqli_error($con)); 

$idkerja=@$_POST["ID Pekerja"];
$nama=@$_POST["nama"];
$unit=@$_POST["Unit"];
$pass=@$_POST["Password"];
$tel=@$_POST["Telefon"];

$insert_sql="INSERT INTO daftar VALUES('$idkerja', '$nama', '$unit', '$pass','$tel')";

$sql_result =mysqli_query($con,$insert_sql) or die("Error in inserting data due to".mysqli_error($con));

if($sql_result)
    echo "Succesfully insert new data.";
else
    echo "Error in inserting new data";
<?

这是我的表结构:

成功但没有插入数据

应该在 MySQL 表中插入的 HTML 表单:

<td><form method="post" action="daftar.php">
  <label for="textfield2">ID Pekerja:</label><br>
  <input type="text" name="textfield2" id="textfield2">
  <br/>
  <label for="textfield2">Nama:</label><br>
  <input type="text" name="textfield" id="textfield">
  <br/>
  <label for="textfield2">Unit:</label><br>
  <input type="text" name="textfield2" id="textfield2">
  <br/>
  <label for="textfield2">Password:</label><br>
  <input type="text" name="textfield2" id="textfield2">
  <br/>
  <label for="textfield2">Nombor Telefon:</label><br>
  <input type="text" name="textfield2" id="textfield2">
  <br/>
  </center>
</div>
</form>&nbsp;</td>

【问题讨论】:

  • 您是否看到任何类型的错误消息?
  • 参考mysqli-connect 并检查连接是否正确建立,以及打印错误
  • @DarwinvonCorax 没有错误消息。但结果没有显示在mysql表中。
  • 共享表结构;

标签: php mysqli html-table connect


【解决方案1】:

检查您的 HTML 表单代码

标签的name属性值应该作为POST变量

<input type="text" 
name="textfield2"
id="textfield2">

然后

$variable = $_POST['textfield2'];

【讨论】:

  • 检查我的帖子变量?哪个是?
【解决方案2】:

您的数据正在插入到您的表格中(您的屏幕截图显示了这一点),尽管值是空的。那是因为你的输入值不正确。

首先根据 PHP 脚本的要求正确正确的 html 字段名称:

<td>
  <form method="post" action="daftar.php">
    <label for="textfield2">Nama:</label><br>
    <input type="text" name="nama" id="name">
    <br/>
    <label for="textfield2">Unit:</label><br>
    <input type="text" name="Unit" id="Unit">
    <br/>
    <label for="textfield2">Password:</label><br>
    <input type="text" name="Password" id="Password">
    <br/>
    <label for="textfield2">Nombor Telefon:</label><br>
    <input type="text" name="Telefon" id="Telefon">
    <br/>
  </form>
</td>

然后在表单提交后验证用户提交的数据;确保所有字段都具有根据您的表结构的值所有字段都是必需的并且必须具有值;验证这样的事情:

使用以下代码:

$nama = @$_POST["nama"];
$unit = @$_POST["Unit"];
$pass = @$_POST["Password"];

/* casting to make sure integer value for this field(Telefon) */
$tel = (int) @$_POST["Telefon"];

/* validate data submitted by user */
$hasError = false;
$error = '';
if(empty($nama)){
  $error .= 'nama field required.';
  $hasError = true;
}
if(empty($unit)){
  $error .= 'unit field required.';
  $hasError = true;
}
if(empty($pass)){
  $error .= 'password field required.';
  $hasError = true;
}
if(empty($tel)){
  $error .= 'Telefon field required.';
  $hasError = true;
}

/* after data validation check that can we insert data or not */
if($hasError){
  /* notify user that this field is required. */
  die($error);
}else{
  /* here we go user inserted data as required */

  /* connect to db */
  $con = mysqli_connect("localhost", "root", "", "jpn") or die("Cannot connect to server." . mysqli_error($con));

  $insert_sql = "INSERT INTO daftar VALUES(NULL, ?, ?, ?, ?)";
  if($stmt = mysqli_prepare($con, $insert_sql)){
    mysqli_stmt_bind_param($stmt, "sssi", $nama, $unit, $pass, $tel);
    mysqli_stmt_execute($stmt);

    if(mysqli_affected_rows($con)){
      echo "Succesfully insert new data.";
    }else{
      echo "Error in inserting new data" . mysqli_error($con);
    }
  }else{
    die("Error in inserting data due to" . mysqli_error($con));
  }
}

阅读更多关于SQL injectionprepared statement 的信息以防止这种情况发生

【讨论】:

  • 这个!这是问题的答案
  • @SalmanA 我使用强制转换来确保Telefon field 的整数值;
  • @itzmukeshy7 好吧,呵呵。抱歉,我没有注意到。
【解决方案3】:

您的帖子名称错误。使​​用名称作为输入类型 ex。输入 type="text" name="id" id="textfield2" 然后在输入类型 $idkerja=@$_POST["id"];

【讨论】:

    【解决方案4】:

    您正在将 NULL 值添加到数据库中,因为您的 form input 共享相同的 name 属性,而 $_POST['nama'] 甚至不存在。至于电话,验证并确保用户输入是int,不包括+等字符。

    您的表单应如下所示:

    <td><form method="post" action="daftar.php">
      <label for="textfield2">ID Pekerja:</label><br>
      <input type="text" name="id" id="textfield2">
      <br/>
      <label for="textfield2">Nama:</label><br>
      <input type="text" name="nama" id="textfield">
      <br/>
      <label for="textfield2">Unit:</label><br>
      <input type="text" name="Unit" id="textfield2">
      <br/>
      <label for="textfield2">Password:</label><br>
      <input type="text" name="Password" id="textfield2">
      <br/>
      <label for="textfield2">Nombor Telefon:</label><br>
      <input type="text" name="Telefon" id="textfield2">
      <br/>
      </center>
    </div>
    </form>&nbsp;</td>
    

    为什么要输入ID?。这当然不是必需的,建议单独使用并自行增加。

    使用最佳做法。列出所有需要的列及其值。即:

    INSERT INTO daftar(nama, unit, pass, tel)VALUES('$_POST[name]','$_POST[Unit]','$_POST[Password]',$_POST[Telefon])
    

    此外,您的代码对 SQL 注入是开放的。使用准备好的语句来避免这种情况。你可以了解更多here

    【讨论】:

      【解决方案5】:

      试试这个

       $insert_sql = "INSERT INTO daftar(add column names here )VALUES('$_POST[ID]','$_POST[name]','$_POST[Unit]','$_POST[Password]',$_POST[Telefon])"; 
      

      【讨论】:

      • 我试过了。但是这个错误弹出解析错误:语法错误,意外''(T_ENCAPSED_AND_WHITESPACE),期待']'
      • ID Pekerja 将其更改为仅 ID
      • 永远不要在任何查询中使用未过滤的后值。您的应用程序将对任何形式的 SQL 注入开放。
      【解决方案6】:

      你应该重新检查你的语法。

      按照这个:

      INSERT INTO table_name (column1, column2, column3,...)
      VALUES (value1, value2, value3,...)
      

      我建议你遵循上面的语法。

      另外,检查数据库表字段的数据类型。

      希望这会有所帮助。

      和平! xD

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-18
        • 1970-01-01
        相关资源
        最近更新 更多