Saroj Thapa Saroj Thapa - 3 months ago 18
PHP Question

Edit Form PHP PDO

I have a table in SQL Server database. I created an "edit.php" where we can update the database. The database connection is established using PDO.

I have a lot of

Null
values in the table. When I click "Edit" option, the form pops out. If I completely fill the records, the database gets updated. Otherwise I get this error message.


SQLSTATE[42000]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Error converting data type nvarchar to numeric.


The codes for my edit.php are included below:

require_once('database.php');
if (isset($_POST['btn_submit'])) {
$id = $_POST['txt_id'];
$site = $_POST['txt_site_code'];
$location = $_POST['txt_location_name'];

try {
$stmt = $conn->prepare("UPDATE MATRIX SET Site_Code=:site, Location_name=:location
WHERE OBJECTID =:id");
$stmt->execute(array(':site' => $site, ':location' => $location,':id' => $id));
if ($stmt) {


header('Location:index.php');

}
} catch (PDOException $e) {
echo $e->getMessage();
}
}

$object_id = '';
$site = '';
$location = '';

if (isset($_GET['id'])) {
$id = $_GET['id'];
$stmt = $conn->prepare("SELECT * FROM MATRIX WHERE OBJECTID=:id");
$stmt->execute(array(':id' => $id));
$row = $stmt->fetch();
$object_id = $row['OBJECTID'];
$site = $row['Site_Code'];
$location = $row['Location_name'];
}

?>
<h2>Edit the records</h2>

<form action="" method="post">
<table border="3px" cellpadding="5px">

<tr>
<td>Site Code</td>
<td><input type="text" name="txt_site_code" value="<?= $site; ?>"></td>
</tr>

<tr>
<td>Location Name</td>
<td><input type="text" name="txt_location_name" value="<?= $location; ?>"></td>
</tr>

<tr>
<td><input type="hidden" name="txt_id" value="<?= $object_id; ?>"></td>
<td><input type="submit" name="btn_submit" value="Submit"></td>
</tr>

</table>
</form>


I would appreciate your efforts to help.

Answer

You have to check if

    $_POST['txt_id']
    $_POST['txt_site_code']
    $_POST['txt_location_name']

have values (if you filled those in form) if you want them blank when you haven't filled anything then make them equal to empty string.

if (isset($_POST['txt_id'])) {
    $id = $_POST['txt_id'];
}else{
    $id = '';
}
if (isset($_POST['txt_site_code'])) {
    $site = $_POST['txt_site_code'];
}else{
    $site = '';
}
if (isset($_POST['txt_location_name'])) {
    $location = $_POST['txt_location_name'];
}else{
    $location = '';
}