У меня есть база данных MySQL, разбитая на три таблицы (tblmaincircles, tblsmallcircles, tbltabs) и файл PHP, который обновляет данные в этих таблицах.PHP обновляет несколько строк в MySQL с помощью одного представления
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 для любых комментариев. Заранее спасибо!
UPDATE
Вот обновленные строки кода, которые я сделал. Теперь это изменило все 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 и т.д. на одной и той же форме, так что те, возможно, потребуется для обновления в одно и то же время. Есть ли способ сделать это без написания отдельного SQL для M1, M2 и т.д.
я могу добиться этого, написав 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';";
, но я предпочел бы один, если что возможно.
[. Ваш скрипт находится в опасности для SQL Injection атак] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –
Вам нужно написать некоторое программирование, чтобы определить, каким будет mcID. В чем проблема? – Fallenreaper
@JayBlanchard благодарит за информацию. Я все еще участвую, поэтому не могли бы вы объяснить, почему мой код подвержен риску? –