Проблема цикла PHP Foreach с mySQL INSERT INTO - PullRequest
0 голосов
/ 03 мая 2011

У меня большая проблема.Это первый раз, когда я подаю в суд на foreach, и я даже не знаю, правильно ли это использовать.У меня есть текстовая область, где мои участники могут добавить текст.У них также есть все аккаунты, куда отправлять размещенный текстСчета имеют два типа F и T. Они отображаются в виде флажков.Поэтому, когда член вводит «отправить», текст должен быть вставлен в определенную таблицу для КАЖДОГО из выбранных учетных записей.Я думал, что PHP Foreach был правильным.Но я не уверен больше.Пожалуйста, помните, что я ничего не знаю о foreach и массивах.Поэтому, пожалуйста, помогая мне, подумайте о предоставлении модового кода = D.Большое вам спасибо!

<?php
require_once('dbconnection.php');
$MembID = (int)$_COOKIE['Loggedin'];
?>
<form action="" method="post">
    <p align="center"><textarea id="countable1" name="addit" cols="48" rows="10" style="border-color: #ccc; border-style: solid;"></textarea>
    <br>
<?
$DB = new DBConfig();
$DB -> config();
$DB -> conn();
$on="on";
    $queryF ="SELECT * FROM `TableF` WHERE `Active`='$on' AND `memberID`='$MembID' ORDER BY ID ASC";
    $result=mysql_query($queryF) or die("Errore select from TableF: ".mysql_error());
$count = mysql_num_rows($result); 
if ($count > 0)
    {
    while($row = mysql_fetch_array($result)) {
    ?><div style="width:400px; height:100px;margin-bottom:50px;"><?
    $rowid = $row['ID'];
    echo $row['Name'] . '</br>';
    $checkit = "checked";
    if ($row['Main'] == "")
    $checkit = "";
    if ($row['Locale'] =="")
    $row['Locale'] ="None" . '</br>';
    echo $row['Locale'] . '</br>';
    if ($row['Link'] =="")
    $row['Link'] ="javaScript:void(0);";
    ?>
    <!-- HERE WE HAVE THE "F" CHECKBOXES. $rowid SHOULD BE TAKEN AND INSERTED IN THE FOREACH BELOW FOR ANY SELECTED CHECKBOX IN THE FIELD "Type".SEE BELOW -->
    <input type="checkbox" name="f[<?php echo $rowid?>]" <?php echo $checkit;?>>
    </div>
    <?
}//END WHILE MYSQL
}else{
echo "you do not have any Active account";
}
$DB = new DBConfig();
$DB -> config();
$DB -> conn();
    $queryTW ="SELECT * FROM `TableT` WHERE `Active`='$on' AND `memberID`='$MembID' ORDER BY ID ASC";
    $result=mysql_query($queryTW) or die("Errore select TableT: ".mysql_error());
$count = mysql_num_rows($result); 
if ($count > 0)
    {
    while($row = mysql_fetch_array($result)) {
    ?><div style="width:400px; height:100px;margin-bottom:50px;"><?
    $rowid = $row['ID'];
    echo $row['Name'] . '</br>';
    $checkit = "checked";
    if ($row['Main'] == "")
    $checkit = "";
    if ($row['Locale'] =="")
    $row['Locale'] ="None" . '</br>';
    echo $row['Locale'] . '</br>';
    if ($row['Link'] =="")
    $row['Link'] ="javaScript:void(0);";
    ?>
        <!-- HERE WE HAVE THE "T" CHECKBOXES. $rowid SHOULD BE TAKEN AND INSERTED IN THE FOREACH BELOW FOR ANY SELECTED CHECKBOX IN THE FIELD "Type".SEE BELOW -->
    <input type="checkbox"  name="t[<?php echo $rowid?>]" <?php echo $checkit;?> >
    </div>
    <?
}//END 2° WHILE MYSQL
}else{
echo "you do not have any Active account";
}
?>
<input type="submit" value="submit">
</form>
<?
//WHEN CHECKBOXES "F" ARE FOUND, FOR EACH CHECKBOX IT SHOULD INSERT INTO TableG THE VALUES BELOW, FOR EACH SELECTED "F" CHECKBOX
if(!empty($_POST['addit']) && !empty($_POST['f'])){
$thispostF = $_POST['f'];
$f="F";
foreach ($thispostF as $valF)
//THE MOST IMPORTANT FIELD HERE IS "Type". THE ARRAY INSERT "on", I NEED INSTEAD THE VALUE $rowid AS ABOVE
$queryaddF="INSERT INTO TableG (ID,memberID,Type,IDAccount,Tuitting) VALUES (NULL,".$MembID.",'".$f."','".$valF."', '".$_POST['addit']."')";
$resultaddF=mysql_query($queryaddF) or die("Errore insert G: ".mysql_error());
}
//WHEN CHECKBOXES "T" ARE FOUND, FOR EACH CHECKBOX IT SHOULD INSERT INTO TableG THE VALUES BELOW, FOR EACH SELECTED "T" CHECKBOX
if(!empty($_POST['addit']) && !empty($_POST['t'])){
$thispostT = $_POST['t'];
$t="T";
foreach ($thispostT as $valF)
//THE MOST IMPORTANT VALUE HERE IS "Type". THE ARRAY GIVES "on", I NEED INSTEAD THE VALUE $rowid AS ABOVE
$queryaddT="INSERT INTO TableG (ID,memberID,Type,IDAccount,Tuitting) VALUES (NULL,".$MembID.",'".$t."','".$valF."', '".$_POST['addit']."')";
$resultaddF=mysql_query($queryaddF) or die("Errore insert G: ".mysql_error());
}
?>

Ответы [ 3 ]

6 голосов
/ 03 мая 2011
 foreach ($thispostT as $valF)
{

$queryaddT="INSERT INTO TableG (ID,memberID,Type,IDAccount,Tuitting) VALUES (NULL,".$MembID.",'".$t."','".$valF."', '".$_POST['addit']."')";
$resultaddF=mysql_query($queryaddF) or die("Errore insert G: ".mysql_error());
}

пожалуйста, поставьте начальную и конечную скобки в вашем цикле foreach и попытайтесь, я не прочитал весь код, но только что обнаружил, что вы пропустили скобки.надеюсь, что это поможет вам.

1 голос
/ 03 мая 2011

Я думаю, я знаю, что вы делаете ...

Вам нужно будет сделать:

foreach($_POST as $key => $value) {
   $type = substr($key,0,1);
   $id = substr($key,1);
   if($type == 't') {
      // do insert for t table here
   } else if($type == 'f') {
      // do insert for f table here
   }
}

Я не проверял это, но это должно быть что-токак это.

0 голосов
/ 03 мая 2011

Мое предложение

создать имя поля как t [] (массив) проверенное значение будет передано на следующей странице

поле флажка формы должно быть таким

<input type="checkbox"  name="t[]" value="< ?php echo $rowid?>" <?php echo $checkit;? > >

и при отправке формы

GET THE VALUE and insert in to database;
< ?
if($_POST['t'])
{
foreach($_POST['t'] as $v)
{
queryaddT="INSERT INTO TableG (ID,memberID,Type,IDAccount,Tuitting) VALUES (NULL,".$MembID.",'".$t."','".$valF."', '".$_POST['addit']."')";
$resultaddF=mysql_query($queryaddF) or die("Errore insert G: ".mysql_error());


}

}
? >
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...