Need to be able to UPDATE a MYSQL table with string data. Get errors no matter what I try, and I have researched and nothing suggested works in this situation.
'$soldout'
'"$soldout"'
{$soldout}
'{$soldout}'
'"{$soldout}"'
<?php
/**
 * Use an HTML form to edit an entry in the
 * consignitem table.
 *
 */
require "../config.php";
require "../common.php";
if (isset($_POST['submit'])) {
  if (!hash_equals($_SESSION['csrf'], $_POST['csrf'])) die();
  try {
    $connection = new PDO($dsn, $username, $password, $options);
$itemnumber = $_POST['itemnumber'];
    $item =[
      "itemnumber"        => $_POST['itemnumber'],
      "itemdescription"  => $_POST['itemdescription'],
      "reserve"  => $_POST['reserve'],
      "amount"  => $_POST['amount'],
      "qtyavail"  => $_POST['qtyavail'],
      "qtybought"  => $_POST['qtybought'],
      "buyernumber"  => $_POST['buyernumber'],
      "sold"  => $_POST['sold'],
    ];
/* following is manipulation section including debug lines as echo of data*/
$qtyav = $_POST['qtyavail'];
$qtybo = $_POST['qtybought'];
$amt = $_POST['amount'];
echo "Quan Avail $qtyav<br>";
echo "Quan Bou $qtybo<br>";
echo "AMT $amt<br>";
$amttot = $qtybo * $amt;
echo "AMTTOT $amttot<br>";
$newqty = $qtyav - $_POST['qtybought'];
echo "NewQty $newqty<br>";
if ($newqty < "1") {
$soldout = "y";
echo "soldout $soldout<br>";
} else {
$soldout = "n";
echo "soldout $soldout<br>";
}
/* End Manipulation. 
Try adding field for quantity available, then do math.
*/
    $sql = "UPDATE consignitem 
            SET itemnumber = :itemnumber, 
              itemdescription = :itemdescription, 
              reserve = :reserve, 
              amount = :amount, 
              qtyavail = {$newqty}, 
              qtybought = :qtybought, 
              buyernumber = :buyernumber, 
              sold = :sold
            WHERE itemnumber = :itemnumber";
  $statement = $connection->prepare($sql);
  $statement->execute($item);
  } catch(PDOException $error) {
      echo $sql . "<br>" . $error->getMessage();
  }
}
if (isset($_GET['itemnumber'])) {
  try {
    $connection = new PDO($dsn, $username, $password, $options);
    $itemnumber = $_GET['itemnumber'];
    $sql = "SELECT * FROM consignitem WHERE itemnumber = :itemnumber AND sold = 'n'";
    $statement = $connection->prepare($sql);
    $statement->bindValue(':itemnumber', $itemnumber);
    $statement->execute();
    $item = $statement->fetch(PDO::FETCH_ASSOC);
  } catch(PDOException $error) {
      echo $sql . "<br>" . $error->getMessage();
  }
} else {
    echo "Something went wrong!";
    exit;
}
?>
<?php require "templates/header.php"; ?>
<?php if (isset($_POST['submit']) && $statement) : ?>
    <blockquote><?php echo escape($_POST['itemnumber']); ?> successfully updated.</blockquote>
<?php endif; ?>
<h2>Sell an item</h2>
<form method="post">
<style>
table, th, td {
  border: 1px solid black;
}
</style>
<table>
    <input name="csrf" type="hidden" value="<?php echo escape($_SESSION['csrf']); ?>">
    <?php foreach ($item as $key => $value) : ?>
<tr><td><?php echo ucfirst($key); ?></td><td><input type="text" name="<?php echo $key; ?>" id="<?php echo $key; ?>" value="<?php echo escape($value); ?>" <?php echo ($key === 'serial' ? 'readonly' : null); ?><?php echo ($key === 'salenumber' ? 'readonly' : null); ?><?php echo ($key === 'itemnumber' ? 'readonly' : null); ?> <?php echo ($key === 'lotnumber' ? 'readonly' : null); ?><?php echo ($key === 'category' ? 'readonly' : null); ?><?php echo ($key === 'itemdescription' ? 'readonly' : null); ?><?php echo ($key === 'reserve' ? 'readonly' : null); ?><?php echo ($key === 'sellernumber' ? 'readonly' : null); ?><?php echo ($key === 'paid' ? 'readonly' : null); ?>></td></tr>
           <?php endforeach; ?> 
</table>
<?php echo ($key === 'itemnumber');?>
<br>
    <button type="submit" name="submit"><b><h3>Sell the Item</h3></b></button>
</form>
<br>
<a href="sellitem.php">Back to Item List</a><br>
<?php require "templates/footer.php"; ?>
UPDATED- - - Original post: In the section where sql = UPDATE SET: Where it says sold = :sold, I need it to take the variable $soldout and use it to update the field for sold in the table. The one above it for $newqty works fine but when I change the sold one from sold = :sold to sold = , I get an error about number of items doesn't match number of bound items or some such. And it doesn't update the table. Leaving it as sold = :sold works but just doesn't update the sold field. I have researched using a string in there but nothing I try works. I know my code is horrible, but this is the first time I have ever tried using PHP with a MYSQL database, and the first time ever to work with a MYSQL database at all. I know it is subject to injections and all that. . once I get it working, I can then figure out how to secure it better. Thank you in advance! UPDATED INFO - - - This script works perfectly for every thing except changing the sold from 'n' to 'y' in the table. The
qtyavail = {$newqty}, 
line works so why doesn't
sold = {$soldout}
work? It is the same format as the qtyavail one and the variable $soldout is set just a few lines from the qtyavail one but it is eluding me why it won't work. Thanks again for any insight!
 
     
    