【问题标题】:PHP update several rows in MySQL with one submitPHP一次提交更新MySQL中的几行
【发布时间】:2016-05-04 21:32:45
【问题描述】:

我有一个 MySQL 数据库,分为三个表(tblmaincircles、tblsmallcircles、tbltabs)和一个更新这些表中数据的 PHP 文件。

tblmaincircles:

mcID | mcName
-------------
M1   | M1name
M2   | M2name
M3   | M3name
...  | ...

tblsmallcircles:

scID | scVisibleID | scVisible | mcID |scName
------------------------------------------------
M1s1 | M1s1v       | visible   | M1   | M1s1name
M1s2 | M1s2v       | visible   | M1   | M1s2name
M1s3 | M1s3v       | hidden    | M1   |
M2s1 | M2s1v       | visible   | M2   | M2s1name
...  | ...         | ...       | ...  | ...

tbltabs:

tabID  | scID | mcID | tabName    | tabURLID  | tabURL
-------------------------------------------------------------
M1s1t1 | M1s1 | M1   | M1s1t1name | M1s1t1url | M1s1t1urlname
M1s1t2 | M1s1 | M1   | M1s1t2name | M1s1t2url | M1s1t2urlname
M1s2t1 | M1s2 | M1   | M1s2t1name | M1s2t1url | M1s2t1urlname
...    | ...  | ...  | ...        | ...       | ...

我的 php 表单向用户显示所有当前值,其中包括来自所有三个表的信息以及来自 tblsmallcircles 和 tbltabs 的多行信息。我的表单的简化版本如下所示:

    <body>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
        <ul>
            <li>
                <label class="mctext">Main Circle:</label>
                <input type="text" class="textfield" id="MC" name="MC" value="<?php echo htmlspecialchars($M1); ?>"/>
            </li>
            <ul>
                <li class="sctext">
                    <img src="images/triangle_right.png" alt="none" class="tri" id="sc1tri">
                    <label>Small circle 1:</label>
                    <input type="text" class="textfield" id="SC1" name="SC1" value="<?php echo htmlspecialchars($M1s1); ?>"/>
                </li>
                <ul>
                    <div class="doit">
                    <li>
                        <label class="tabtext">Tab 1:</label>
                        <input type="text" class="textfield" id="SC1t1" name="SC1t1" value="<?php echo htmlspecialchars($M1s1t1); ?>"/>
                    </li>
                    <li>
                        <label class="urltext">Tab 1 URL/File:</label>
                        <input type="text" class="textfield" id="SC1t1url" name="SC1t1url" value="<?php echo htmlspecialchars($M1s1t1url); ?>"/>
                    </li>
                    <li>
                        <label class="pdftext">Tab 1 PDF:</label>
                        <input type="button" class="button" id="SC1t1pdf" name="SC1t1pdf" value="View" onclick="openM1s1t1url()"/>
                        <span>          </span>
                        <input type="file" name="SC1t1pdfup" id="SC1t1pdfup"/>
                    </li>
                    <li>
                        <label class="tabtext">Tab 2:</label>
                        <input type="text" class="textfield" id="SC1t2" name="SC1t2" value="<?php echo htmlspecialchars($M1s1t2); ?>"/>
                    </li>
                    <li>
                        <label class="urltext">Tab 2 URL/File:</label>
                        <input type="text" class="textfield" id="SC1t2url" name="SC1t2url" value="<?php echo htmlspecialchars($M1s1t2url); ?>"/>
                    </li>
                    <li>
                        <label class="pdftext">Tab 2 PDF:</label>
                        <input type="button" class="button" id="SC1t2pdf" name="SC1t2pdf" value="View" onclick="openM1s1t2url()"/>
                        <span>          </span>
                        <input type="file" name="SC1t2pdfup" id="SC1t2pdfup"/>
                    </li>
                    <li class="lipsace"></li>
                    </div>
                    <li>
                        <input type="submit"  class="button" name='submit' value="Submit"/>
                        <span>          </span>
                        <input type="button"  class="button" name='cancel' value="Cancel" onclick="history.go(0)"/>
                    </li>
                </ul>
            </ul>
        </ul>
    </form>
</body>

以下是 SQL 更新语句:

$usqlMC = "UPDATE tblmaincircles SET mcName= '".$_POST['mcName']."' WHERE mcID=???;"; 
$usqlSC = "UPDATE tblsmallcircles SET scVisible= '".$_POST['scVisible']."', scName= '".$_POST['scName']."' WHERE scID=???;"; 
$usqlt = "UPDATE tbltabs SET mcName= '".$_POST['mcName']."' WHERE tabID=???;"; 

我不知道应该在 ???对于 mcID=,因为它根据已完成的字段而有所不同。

希望我提供了足够的信息,这也不算太多!对此的任何帮助都会很棒。我是 PHP 和 MySQL 新手,欢迎任何 cmets。提前致谢!

更新

这是我所做的更新的代码行。这现在将所有 mcNames 更改为字段输入值,而不仅仅是 M1。

HTML

<input type="text" class="textfield" id="mcName" name="mcName" value="<?php echo htmlspecialchars($M1); ?>"/>

SQL

$usqlMC = "UPDATE tblmaincircles SET mcName= '".$_POST['mcName']."' WHERE mcID IN ('M1','M2','M3','M4','M5');";

我的目标是只更新 M1,但我目前在同一表单上还有 M2、M3 等的其他输入,因此可能需要同时更新这些输入。有没有办法在不为 M1、M2 等编写单独的 SQL 的情况下做到这一点。

我可以通过编写 5 个单独的 SQL 语句来实现这一点,如下所示:

$usqlM1 = "UPDATE tblmaincircles SET mcName= '".$_POST['mcNameM1']."' WHERE mcID='M1';";
$usqlM2 = "UPDATE tblmaincircles SET mcName= '".$_POST['mcNameM2']."' WHERE mcID='M2';";
$usqlM3 = "UPDATE tblmaincircles SET mcName= '".$_POST['mcNameM3']."' WHERE mcID='M3';";
$usqlM4 = "UPDATE tblmaincircles SET mcName= '".$_POST['mcNameM4']."' WHERE mcID='M4';";
$usqlM5 = "UPDATE tblmaincircles SET mcName= '".$_POST['mcNameM5']."' WHERE mcID='M5';";

但如果可能的话,我更喜欢一个。

【问题讨论】:

  • 您需要编写一些程序来确定那时的 mcID 是什么。这有什么问题?
  • @JayBlanchard 感谢您提供的信息。我还在学习,您能否详细说明为什么我的代码存在风险?
  • @Fallenreaper 问题是我是新手,我不确定这是如何完成的。你有什么建议可以让我朝着正确的方向前进吗?

标签: php mysql forms sql-update submit


【解决方案1】:

MySQL 有一个 'IN' 语法,因此如果您要更新具有相同属性的多行,您可以这样做:

$usqlMC = "UPDATE tblmaincircles SET mcName= '".$_POST['mcName']."' WHERE mcID IN ('M1', 'M2');"; 

【讨论】:

  • 这将每个 mcName 替换为 ""
  • 这意味着您的 POST 变量为空。请注意,您的表单不包含名为“mcName”的输入,因此这是预期行为。
  • 我将输入的 id 和名称更改为 = "mcName",它没有将所有字段都清空,而是将所有字段更改为一个字段。我已根据您的笔记将我刚刚尝试过的内容添加到我的原始帖子中。请帮助并感谢您对这个新手的耐心。
猜你喜欢
  • 2022-01-12
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 2014-04-05
  • 2023-03-12
  • 1970-01-01
  • 2017-05-27
相关资源
最近更新 更多