当我编辑一个

时间:2016-06-20 19:45:43

标签: php mysqli

我的问题是我正在尝试开发一个我需要更新的后端,但我的问题是,当我更新一个字段时,我的脚本会更新我的mysqli数据库的所有字段和所有数据。 我现在的代码是:

<html>
<body>
<?php

  ini_set('display_errors', 1);
   error_reporting(~0);

   $serverName = "localhost";
   $userName = "root";
   $userPassword = "";
   $dbName = "hotel_vaniet";

   $strCustomerID = null;

   if(isset($_GET["cod"]))
   {
       $cod = $_GET["cod"];
   }


   $serverName = "localhost";
   $userName = "root";
   $userPassword = "";
   $dbName = "hotel_vaniet";

   $conn = mysqli_connect($serverName,$userName,$userPassword,$dbName);

   $sql = "SELECT * FROM quartos WHERE cod=$cod";

   $query = mysqli_query($conn,$sql);

   $result=mysqli_fetch_array($query,MYSQLI_ASSOC);

?>
<div id="main">
<form action="editar_quartos_final.php" name="frmAdd" method="post">
<br><h1>Página de Edição</h1>
<br><hr/>
<div id="login2">
<table width="284" border="1">
  <tr>
    <th width="120">Tipo</th>
    <td width="238"><input type="text" name="tipo" size="50" value="<?php echo $result["tipo"];?>"></td>
    </tr>
  <tr>
    <th width="120">Capacidade</th>
    <td><input type="text" name="capacidade" size="50" value="<?php echo $result["capacidade"];?>"></td>
    </tr>
  <tr>
    <th width="120">Preço p/ Noite</th>
    <td><input type="text" name="preco" size="50" value="<?php echo $result["preco"];?>"></td>
    </tr>
  <tr>
    <th width="120">Reservado</th>
    <td><input type="text" name="reservado" size="50" value="<?php echo $result["reservado"];?>"></td>
    </tr>
  </table>
  <br><input id="submitbuttoneditar" type="submit" value=" Editar " name="submit"/><br />
  </div>
</form>

<?php
mysqli_close($conn);
?>
</body>
</html>

这是第一页,这个页面将我发送到另一个进行所有更改的地方。第二页:

<html>
<head>
<title>Página de Edição do Cliente</title>
</head>
<body>
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "hotel_vaniet";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "UPDATE quartos SET 
            tipo = '".$_POST["tipo"]."' ,
            capacidade = '".$_POST["capacidade"]."' ,
            preco = '".$_POST["preco"]."' ,
            reservado = '".$_POST["reservado"]."'
            WHERE cod=cod";

if ($conn->query($sql) === TRUE) {
    echo "Dados actualizados com sucesso!";
    header("Location: quartos.php");
} else {
    echo "Erro na edição dos dados! " . $conn->error;
    header("Location: quartos.php");
}

$conn->close();
?>
</body>
</html> 

1 个答案:

答案 0 :(得分:0)

在您的第一页上,您有$cod变量,等于$_GET["cod"]。 在您的第二页$cod变量未定义。所以你尝试更新

WHERE cod=cod

表示 - 更新字段cod的值与字段cod的值相同的位置。并且所有记录都是如此 - 所有记录都会更新。

因此,解决方案是将$cod值传递给第二个脚本。

例如,您可以使用第一个表单中的隐藏字段来执行此操作:

<form action="editar_quartos_final.php" name="frmAdd" method="post">
<br><h1>Página de Edição</h1>
<br><hr/>
<input type="hidden" name="cod" value="<?php echo $cod?>" />
<div id="login2">
<table width="284" border="1">
  <tr>
    <th width="120">Tipo</th>
    <td width="238"><input type="text" name="tipo" size="50" value="<?php echo $result["tipo"];?>"></td>
    </tr>
  <tr>

请使用hidden类型?

查看此字段

在第二个脚本中使用$_POST['cod']

$sql = "UPDATE quartos SET 
        tipo = '".$_POST["tipo"]."' ,
        capacidade = '".$_POST["capacidade"]."' ,
        preco = '".$_POST["preco"]."' ,
        reservado = '".$_POST["reservado"]."'
        WHERE cod=" . $POST['cod'];

当然,您的代码容易受到sql injections的攻击。 所以你应该开始使用预备语句asap。