【问题标题】:PHP echo all data from database based on inputPHP根据输入回显数据库中的所有数据
【发布时间】:2018-09-06 15:25:28
【问题描述】:

我想了解如何根据单个键从数据库中输出数据,例如我的数据库列是:

kodeDosen(PrimaryKey),namaDosen,email,telepon,password

和我的登录屏幕用户只能输入密码和密码,我想显示其他数据exept密码,这是我的注册php:

<?php 
    include 'connectdb.php';

    $data = json_decode(file_get_contents('php://input'), true);

    $kodeDosen =$data["kodeDosen"];
    $namaDosen  = $data["namaDosen"];
    $email = $data["email"];
    $telepon = $data["telepon"];
    $password= $data["password"];

    $message = array("message"=>"Success");
    $failure = array("message"=>"Failure,kodeDosen already used");

    $sql = "INSERT INTO tbl_dosen (kodeDosen, namaDosen, email, telepon, password) VALUES ('$kodeDosen', '$namaDosen', '$email', '$telepon','$password')";



    if (mysqli_query($conn, $sql)) {
        echo json_encode($message);
    } else {
        echo json_encode($failure) ;
    }

?>

这是我的登录 php:

    <?php 
    include 'connectdb.php';

    $data = json_decode(file_get_contents('php://input'), true);

    $kodeDosen =$data["kodeDosen"];
    $password = $data["password"];

    $message = array("message"=>"Data found");
    $failure = array("mesage"=>"Data not found");

    if ($stmt = mysqli_prepare($conn, "SELECT kodeDosen, namaDosen, email, telepon FROM tbl_dosen WHERE kodeDosen =? and password = ?")) {

       /* bind parameters for markers */
       mysqli_stmt_bind_param($stmt, "ss", $kodeDosen,$password);

       /* execute query */
       mysqli_stmt_execute($stmt);

       /* store result */
       mysqli_stmt_store_result($stmt);

       if(mysqli_stmt_num_rows($stmt) > 0) {
          echo json_encode($row);
       }else {
          echo json_encode($failure);
       }

    }

?>

【问题讨论】:

  • 请解释一下你到底想要什么?

标签: php arrays database


【解决方案1】:

由于 SQL 注入,直接在 SQL 查询中插入变量不是一个好主意。

我建议对这两个查询都使用准备好的语句。要使用准备好的语句从数据库中提取结果,类似于:

OOP 风格:

$stmt = $db->prepare("SELECT kodeDosen, namaDosen, email, telepon FROM tbl_dosen WHERE kodeDosen = ? and password = ?");
$stmt->bind_param('ss', $kodeDosen, $password);
$stmt->execute();

$result = $stmt->get_result();

while ($row = $result->fetch_assoc()) {
        //result is in row
        var_dump($row);
}

程序风格:

$stmt = mysqli_prepare($conn, "SELECT kodeDosen, namaDosen, email, telepon FROM tbl_dosen WHERE kodeDosen = ? and password = ?");
mysqli_stmt_bind_param($stmt, 'ss', $kodeDosen, $password);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);

while ($row = $result->fetch_assoc()) {
        //result is in row
        var_dump($row);
}

【讨论】:

    【解决方案2】:

    您可以在 login.php 中更改 sql SELECT 语句

    $sql = "SELECT kodeDosen, namaDosen, email, telepon FROM tbl_dosen WHERE kodeDosen ='$kodeDosen' and password = '$password'";
    

    在 SELECT * 中表示返回所有列。

    【讨论】:

      【解决方案3】:

      我认为你想要echo json_encode($row); 而不是echo json_encode($message);

      试试:

      <?php 
          include 'connectdb.php';
      
          $data = json_decode(file_get_contents('php://input'), true);
      
          $kodeDosen =$data["kodeDosen"];
          $password = $data["password"];
      
          $message = array("message"=>"Data found");
          $failure = array("mesage"=>"Data not found");
      
          if ($stmt = mysqli_prepare($conn, "SELECT kodeDosen, namaDosen, email, telepon FROM tbl_dosen WHERE kodeDosen =? and password = ?")) {
      
             /* bind parameters for markers */
             mysqli_stmt_bind_param($stmt, "ss", $kodeDosen,$password);
      
             /* execute query */
             mysqli_stmt_execute($stmt);
      
             /* store result */
             $result = mysqli_stmt_get_result($stmt);
             $row = mysqli_fetch_assoc( $result );
      
             if(mysqli_num_rows($result) > 0) {
                echo json_encode($row);
             }else {
                echo json_encode($failure);
             }
      
          }
      
      ?>
      

      【讨论】:

      • 我编辑了登录 php 以便它使用准备好的语句,那么如何使它与它一起工作?
      • 得到这个错误
        警告:mysqli_fetch_assoc() 期望参数 1 是 mysqli_result,在 C:\xampp\htdocs\test\DosenPublikasi 中给出的布尔值\registerDosen.php 在第 22

        警告:mysqli_num_rows() 期望参数 1 为 mysqli_result,布尔值在 C:\xampp\htdocs\test\DosenPublikasi\registerDosen.php24 行
        {"mesage":"Data not found"}
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      相关资源
      最近更新 更多