【问题标题】:UPDATING database after SELECT on the php site在 php 站点上 SELECT 后更新数据库
【发布时间】:2021-06-23 19:08:35
【问题描述】:

我尝试做一个 php 站点,您可以在其中从 select 中选择组件。选择的组件应由数据库中的 SELECT 返回。接下来,您可以通过 UPDATE 更改此表中的值。每行的最后一条记录是一个输入,其中显示组件的价格和按钮(输入提交)。我的问题是如何使用此按钮在输入中设置值并更新表格。以下是我的数据库和网站的屏幕截图。我尝试了很多东西,现在我可以了:

    <form method="GET" action="sklep2.php">
    <font>Lista aktualnie dostępnych podzespołów</font>
<select id="selekt" name="selekt">
    <option value="1">Procesory</option>
    <option value="2">Ram</option>
    <option value="5">Karty graficzne</option>
    <option value="6">Dyski</option>
    </select>
    <input type="submit" value="zatwierdź" name="submit">
    <table id="tabela">
    <tr id="first"><td>NAZWA PODZESPOŁU</td><td>OPIS</td><td>CENA</td></tr>
    <?php
    $conn = mysqli_connect('localhost', 'root', '', 'sklep');
    if(isset($_GET['submit'])){
    $typy_id = $_GET['selekt'];
    $sql = "SELECT nazwa, opis, cena, id FROM podzespoly WHERE typy_id = $typy_id";
    $result = mysqli_query($conn, $sql);
    echo '<form action="sklep2.php" method="GET">';
    if (mysqli_num_rows($result) > 0){
        while($row = mysqli_fetch_assoc($result)){
            echo '<tr><td>'.$row['nazwa'].'</td><td>';
            echo $row['opis'].'</td><td>';
            echo '<input id="new_price" type="number" value="'.$row['cena'].'">';
            echo '<input style="display:none" id="id" value="'.$row['id'].'">';
            echo '<input type="submit" id="submit1" name="submit1">';           
        }
    }
    echo '</form>';
    if(isset($_GET['submit1'])){
        $id = $_GET['id'];
        $price = $_GET['new_price'];
        $upd = "UPDATE podzespoly SET cena = $price WHERE id = $id";
        if (mysqli_query($conn, $upd)) {                  
                echo "successfully updated";
                          }
    }
    }
    mysqli_close($conn)
    ?>
    </table>
    </form>

My php site My Database

【问题讨论】:

  • 您对 SQL 注入持开放态度。参数化您的查询并使用准备好的语句。您的inputs 缺少names...form 中的form 可能会导致问题。
  • @user3783243 表单中的表单确实会导致问题。 HTML 中不允许嵌套表单。内部形式根本行不通。

标签: php html sql select


【解决方案1】:

正如评论者所说,表单中的表单是不允许的。而且,它是一种旨在混淆的结构。您似乎也将您的演示与您的功能混淆了。

您的两个表单都指向同一个端点,这也是造成混淆的原因。

建议:在引入所需的 PHP 变量之前,让您的网站使用 HTML 静态变量。

建议:研究 PDO 和 SQL 注入。

【讨论】:

    【解决方案2】:

    感谢您的回答。我改变了我的代码,现在它更好了。当我尝试更改输入值时,只有最后一行有效。我不知道为什么,但我认为这是因为

    $row['id']
    

    在循环中。我不知道我可以更改什么来更新每一行中的值。

    <form method="GET" action="sklep2.php">
    <font>Lista aktualnie dostępnych podzespołów</font><select id="selekt" name="selekt">
    <option value="1">Procesory</option>
    <option value="2">Ram</option>
    <option value="5">Karty graficzne</option>
    <option value="6">Dyski</option>
    </select>
    <input type="submit" value="zatwierdź" name="submit">
    <table id="tabela">
    <tr id="first"><td>NAZWA PODZESPOŁU</td><td>OPIS</td><td>CENA</td></tr>
    <?php
    $conn = mysqli_connect('localhost', 'root', '', 'sklep');
    if(isset($_GET['submit'])){
    $typy_id = $_GET['selekt'];
    $sql = "SELECT nazwa, opis, cena, id FROM podzespoly WHERE typy_id = $typy_id";
    $result = mysqli_query($conn, $sql);
    
    if (mysqli_num_rows($result) > 0){
        while($row = mysqli_fetch_assoc($result)){
            echo '<tr><td>'.$row['nazwa'].'</td><td>';
            echo $row['opis'].'</td><td>';
            echo '<input id="new_price" type="number" name="new_price" value="'.$row['cena'].'">';
            echo '<input style="display:block" id="id" name="id" value="'.$row['id'].'">';
            echo '<input type="submit" id="submit1" name="submit1">';           
        }
    }
    }
    
    if(isset($_GET['submit1'])){
        $id = $_GET['id'];
        $price = $_GET['new_price'];
        $upd = "UPDATE podzespoly SET cena = $price WHERE id = $id";
        if (mysqli_query($conn, $upd)) {                  
                echo "successfully updated";
                          }
                          }
    
    
    mysqli_close($conn)
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多