2016-01-27 3 views
0

У меня есть база данных 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';"; 

, но я предпочел бы один, если что возможно.

+0

[. Ваш скрипт находится в опасности для SQL Injection атак] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –

+0

Вам нужно написать некоторое программирование, чтобы определить, каким будет mcID. В чем проблема? – Fallenreaper

+0

@JayBlanchard благодарит за информацию. Я все еще участвую, поэтому не могли бы вы объяснить, почему мой код подвержен риску? –

ответ

0

MySQL имеет синтаксис «IN», так что если вы обновляете несколько строк с тем же свойством, что вы можете сделать так, как это:

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

Это заменило каждое mcName на "" –

+0

Это означает, что ваша POST-переменная была пуста.Обратите внимание, что ваша форма не содержит входов с именем «mcName», поэтому это ожидаемое поведение. – Richthofen

+0

Вы совершенно правы !!! Я не могу поверить, что я этого не заметил. Благодаря! –

Смежные вопросы