преобразование sql в SQLi pull id и повторная вставка в таблицу с помощью php

Я искал и пытался в течение последних нескольких часов без успеха. Пытаясь сделать это. У меня есть веб-система заказов на покупку. Он использует mysql, который явно устарел. Это простой код, я вытягиваю идентификатор последнего понумера, +1 к нему, и снова вставляю его. Я также показываю новый номер в форме. Это позволяет моей системе отображать номер PO перед отправкой и гарантирует, что никто другой не получит тот же номер дважды. Вот мой старый код. В заголовке есть раздел подключения, но он такой же, как conn, ниже которого все, что я не добавил.

$row = mysql_fetch_array($result);
$ID = $row['ID'] +1 ;
?>
<?php
$con = mysql_connect("localhost","username","password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("purchaseorder", $con);

$sql="INSERT INTO ponumber (ID)
VALUES
('$ID')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}

?> 
<form action="submit.php" method="post" name="form" id="form" accept-    charset="utf-8">
<div class="form-all">
<ul class="form-section">
  <li id="cid_1" class="form-input-wide">
    <div class="form-header-group">
      <h2 id="header_1" class="form-collapse-table">
        Jillian Builders Purchase Order #:</h2><center><font size="9"> 
 <?php echo $ID ?>
      </h1></center></font></div>

Это работает просто хорошо, кроме раздражающего sql является устаревшим предупреждением, которое im пытается изменить. Я не могу для жизни меня выяснить, как получить идентификационный номер, используя mysqli. Я пробовал множество способов с fetch assoc, с array, но по какой-то причине я не могу заставить его работать. Я уверен, что есть лучший способ сделать это, чем то, что я делаю. Я открыт для предложений. В форме. Сотрудник должен дать номер заказа поставщику. После того, как он нажимает отправить на форме он отправляет номер в. Поэтому мне нужен номер, прежде чем он отправит данные в базу данных, чтобы он мог дать его. Поэтому я использовал +1. Я получаю старый ID +1 к нему, чтобы показать номер только в форме. Это не относится к фактической БД. Когда он передает PO, он передает номер в него,и все выстраивается. Все, что мне нужно сделать, это найти способ снять ID.

Это то, что я пытался до сих пор безрезультатно

<?php 
$data = mysqli_query($conn,"SELECT ID FROM ponumber ORDER BY ID DESC LIMIT 1");
while ($row = mysqli_fetch_assoc ($data)) {
extract ($row);
echo "
ID=$ID +1 
";
}

Надеюсь, это поможет прояснить, где я нахожусь
Спасибо заранее.

1 ответ

  1. Прежде всего, я должен сказать вам, что ваш этот код -( согласно моему пониманию, если вы не используете две базы данных)

    $row = mysql_fetch_array($result);
    $ID = $row['ID'] +1 ;
    

    должно быть после этого кода:

    <?php
    $con = mysql_connect("localhost","username","password");
    if (!$con)
    {
    die('Could not connect: ' . mysql_error());
    }
    
    mysql_select_db("purchaseorder", $con);
    

    Пожалуйста, никогда не делайте $row['ID'] +1 ;

    //just insert 
    $sql="INSERT INTO ponumber (ID)
    VALUES
    (NULL)";
    

    И столбец ID ponumber должен быть auto_incremented
    Затем получите последний идентификатор вставки (автоматически увеличенный)

    $po_id = mysqli_insert_id($con); 
    

    в вашей форме

    <?php echo $po_id ?>
    

    и один скрытый вход, как

    <input type="hidden" name="po_id" value="<?php echo $po_id; ?>"/>
    

    И после отправки формы вы должны обновить форму с этими значениями.
    И если вы не хотите, чтобы таблица была пустой (если пользователь пропускает полный процесс заполнения формы), просто добавьте created_atстолбец. После того, как вы обновили таблицу, проверьте, существует ли какая-либо строка, созданная один день назад, просто удалите ее.
    Для проверки, что если строка пуста или не добавить flag columnи играть с ним, когда собирается обновить или удалить строку -(означает, если столбец с именем 'rec_inserted'false, то эта строка должна быть удалена через 1 день. И этот столбец должен быть установлен в true при первом обновлении записи.