【问题标题】:How to show only one record at a time using PHP and Mysql?如何使用 PHP 和 Mysql 一次只显示一条记录?
【发布时间】:2020-10-21 13:11:59
【问题描述】:

我正在尝试为用户创建一个选项来编辑我使用 PHP 和 MySQL 创建的表中的信息。我设法创建了这个函数并且正在修改数据,唯一的问题是当我单击表的一条记录上的“编辑”按钮时,编辑屏幕总是显示表中的所有记录,而不是只显示数据我想修改,请问如何解决?

这是我的代码:

<?php
ini_set('default_charset','UTF-8');

$host="localhost"; 
$username="********";  
$password="********"; 
$db_name="*********"; 

$con=mysqli_connect("$host", "$username", "$password", "$db_name")or die("cannot connect"); 

mysqli_set_charset($con,"utf8");

$sql = "SELECT `ID`, `carro`, `datasaida` , `horasaida` , `datachegada`, `horachegada`, `kminicial`, `kmfinal`, `destino`, `motorista` FROM `carro`";
$query = $con->query($sql);
while ($dados = $query->fetch_assoc()) {
  $id = $dados["ID"];
  $carro = $dados["carro"];
  $datasaida = $dados["datasaida"];
  $horasaida = $dados["horasaida"];
  $datachegada = $dados["datachegada"];
  $horachegada = $dados["horachegada"];
  $kminicial = $dados["kminicial"];
  $kmfinal = $dados["kmfinal"];
  $destino = $dados["destino"];
  $motorista = $dados["motorista"];

  echo "
  <form id=\"form1\" name=\"form1\" method=\"post\" action=\"salvar_edicao.php\">
  ID: <input name=\"id\" type=\"text\" readonly=\"readonly\" id=\"id\" value=\"$id\" size=\"35\"/><br>
  CARRO: <input name=\"carro\" type=\"text\" id=\"id\" value=\"$carro\" size=\"35\"/><br>
  DATA DE SAIDA: <input name=\"datasaida\" type=\"text\" id=\"id\" value=\"$datasaida\" size=\"35\"/><br>
  HORA DE SAIDA: <input name=\"horasaida\" type=\"text\"  id=\"id\" value=\"$horasaida\" size=\"35\"/><br>
    DATA DE CHEGADA: <input name=\"datachegada\" type=\"text\"  id=\"id\" value=\"$datachegada\" size=\"35\"/><br>
    HORA DE CHEGADA: <input name=\"horachegada\" type=\"text\"  id=\"id\" value=\"$horachegada\" size=\"30\"/><br>
    KM INICIAL: <input name=\"kminicial\" type=\"text\"  id=\"id\" value=\"$kminicial\" size=\"35\"/><br>
    KM FINAL: <input name=\"kmfinal\" type=\"text\"  id=\"id\" value=\"$kmfinal\" size=\"35\"/><br>
    DESTINO: <input name=\"destino\" type=\"text\"  id=\"id\" value=\"$destino\" size=\"35\"/><br>
    MOTORISTA: <input name=\"motorista\" type=\"text\"  id=\"id\" value=\"$motorista\" size=\"35\"/><br>
  <input type=\"submit\" onclick=\"return confirm('Deseja mesmo editar esse registro?');\" name=\"Submit\" value=\"SALVAR ALTERAÇÕES\" class=\"btnNew\"/>
  </form>
  ";    
}
?>

【问题讨论】:

  • 提示:LIMIT 1.
  • 提示:如果你有一个像$x 这样的字符串,并且你想将它用作参数,你可以使用f($x),不需要f("$x")。 PHP 不是 shell 脚本。
  • 如果您不使用 PHP 输出所有 HTML,您的代码看起来会更干净。
  • 你应该使用ID来限制你的查询:WHERE ID = $id

标签: php mysql


【解决方案1】:

在您的编辑按钮上,您还应该设置他们想要编辑的所有信息中的哪些信息。这里的常见步骤是提供将被编辑的行 ID:

<a href="edit.php?id=<?php echo $fieldId; ?>">edit</edit>

在您的编辑脚本中,您使用$_GET['id'] 读取id 参数并将其设置在您的查询中:

$sql = "SELECT `ID`, `carro`, `datasaida` , `horasaida` , `datachegada`, `horachegada`, `kminicial`, `kmfinal`, `destino`, `motorista` FROM `carro` WHERE `ID` = '$id'";

这将确保您只获得一条记录而不是整个表格。

【讨论】:

    【解决方案2】:

    PHP 内置了格式化/模板,您可以使用它来改进代码的格式:

    <?php
    ini_set('default_charset','UTF-8');
    
    $host     = "localhost"; 
    $username = "********";  
    $password = "********"; 
    $db_name  = "*********"; 
    
    $con = mysqli_connect("$host", "$username", "$password", "$db_name")or die("cannot connect"); 
    
    mysqli_set_charset($con,"utf8");
    
    $sql   = "SELECT `ID`, `carro`, `datasaida` , `horasaida` , `datachegada`, `horachegada`, `kminicial`, `kmfinal`, `destino`, `motorista` FROM `carro`";
    $query = $con->query($sql);
    
    while($dados = $query->fetch_assoc()){
        $id = $dados["ID"];
        $carro = $dados["carro"];
        $datasaida = $dados["datasaida"];
        $horasaida = $dados["horasaida"];
        $datachegada = $dados["datachegada"];
        $horachegada = $dados["horachegada"];
        $kminicial = $dados["kminicial"];
        $kmfinal = $dados["kmfinal"];
        $destino = $dados["destino"];
        $motorista = $dados["motorista"];
    
        // we can make use of PHP's built formatting/templating functionality here
        ?>
        <form id="form1" name="form1" method="post" action="salvar_edicao.php">
            ID: <input name="id" type="text" readonly="readonly" id="id" value="<?php echo $id; ?>" size="35"/><br>
            CARRO: <input name="carro" type="text" id="carro" value="<?php echo $carro; ?>" size="35"/><br>
            DATA DE SAIDA: <input name="datasaida" type="text" id="datasaida" value="<?php echo $datasaida; ?>" size="35"/><br>
            HORA DE SAIDA: <input name="horasaida" type="text" id="horasaida" value="<?php echo $horasaida; ?>" size="35"/><br>
            DATA DE CHEGADA: <input name="datachegada" type="text" id="datachegada" value="<?php echo $datachegada; ?>" size="35"/><br>
            HORA DE CHEGADA: <input name="horachegada" type="text" id="horachegada" value="<?php echo $horachegada; ?>" size="30"/><br>
            KM INICIAL: <input name="kminicial" type="text" id="kminicial" value="<?php echo $kminicial; ?>" size="35"/><br>
            KM FINAL: <input name="kmfinal" type="text" id="kmfinal" value="<?php echo $kmfinal; ?>" size="35"/><br>
            DESTINO: <input name="destino" type="text" id="destino" value="<?php echo $destino; ?>" size="35"/><br>
            MOTORISTA: <input name="motorista" type="text" id="motorista" value="<?php echo $motorista; ?>" size="35"/><br>
    
            <input type="submit" onclick="return confirm('Deseja mesmo editar esse registro?');" name="Submit" value="SALVAR ALTERAÇÕES" class="btnNew"/>
        </form>
        <?php
    }
    

    提交表单后,位于salvar_edicao.php 的代码应如下所示:

    <?php 
    ini_set('default_charset','UTF-8');
    
    $host     = "localhost"; 
    $username = "********";  
    $password = "********"; 
    $db_name  = "*********"; 
    
    $con = mysqli_connect("$host", "$username", "$password", "$db_name")or die("cannot connect"); 
    
    mysqli_set_charset($con,"utf8");
    
    // check that the data has been posted
    if(!isset($_POST["id"])){
        // No `id` found in post data
        die;
    }
    
    $sql   = "SELECT `ID`, `carro`, `datasaida` , `horasaida` , `datachegada`, `horachegada`, `kminicial`, `kmfinal`, `destino`, `motorista` FROM `carro` WHERE `ID` = ?";
    $statement = $con->prepare($sql);
    $statement->bind_param('i', $_POST['id']);
    $statment->execute();
    
    $query = $statement->get_result();
    
    $dados = $query->fetch_assoc();
    if(is_null($dados)){
        // No rows exist for this ID
        die;
    }
    
    // $dados = row in database
    // $_POST = data submitted from form
    

    【讨论】:

      猜你喜欢
      • 2013-12-30
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      相关资源
      最近更新 更多