2016-06-20 1 views
-2

내 문제는 내가 업데이트해야하지만 내 문제는 한 필드를 업데이트하면 모든 필드와 모든 데이터가 업데이트됩니다. 내 mysqli 데이터베이스 지금은 내 코드는 다음과 같습니다내 스크립트는 udpating 모든 필드를 편집 할 때 하나만 편집 할 때

<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> 

도움 주셔서 감사합니다!

+0

'cod = cod'는 항상 true입니다. 어떤 레코드를 정확하게 업데이트 하시겠습니까? –

+0

어디 cod = $ cod는 트릭을해야합니까 – rahul

답변

0

첫 페이지에는 $cod이라는 변수 ($_GET["cod"])가 있습니다. 두 번째 페이지에서 $cod 변수가 정의되지 않았습니다. 필드 cod의 값이 필드 cod의 값과 동일한 업데이 트 - 그래서 당신의 시도는

WHERE 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에 취약합니다. 준비된 명령문을 최대한 빨리 사용해야합니다.

+0

당신이 내게 말한대로했는데 문제는 그것을 업데이트하기 위해 버튼을 클릭 할 때 아무것도하지 않습니다. 예를 들어, 내 필드 "Tipo" 작동하지 않습니다, 같은 데이터를 유지합니다. –

+0

'$ sql'을 에코하세요. mysql에서 직접 구문을 확인하고 쿼리를 실행하십시오. –

+0

이미 그것을 했어, 나는 거의 3 시간 동안이 문제를 해결하려고 애쓰는 너무 화가났다. –

관련 문제