Thread Verfasser: GUL-Sonic
Thread ID: 320
Thread Info
Es gibt 7 Beiträge zu diesem Thema, und es wurde 3894 Mal angesehen.  Ausserdem wurden Dateien angehängt.
 Thema drucken
Speichern von veränderten Werten aus einer while Schleife
GUL-Sonic
Morning,
ich habe folgendes Problem, ich habe ein Formular erstellt, welches sich Daten aus 2 verschiedenen Datenbanken holt und diese in einer while Schleife auflistet. Das klappt auch alles wunderbar nun möchte ich das bei Änderungen und klick auf den "speichern" button jede einzelne Zeile aus der while Schleife in der Datenbank 2 abgespeichert wird.

Hier der Code des Formulars:
Code
opentable($locale['pocp003']);

echo "<form name='pocp_settings' method='post' action='".FUSION_SELF.$aidlink."'>\n";

$result = dbquery("SELECT * FROM " . DB_CUSTOM_PAGES . " ORDER BY page_title ASC");
if (dbrows($result) > 0) {
    echo"<table align='center' class='tbl-border' width='80%'>";
   echo"
      <tr>
      <td align='center'>Page Title</td>
      <td align='center' width='90px'>printing aktiv</td>
      <td align='center' width='250px'>position</td>
      </tr>";
    while ($data = dbarray($result)) {
      $result1 = dbquery("SELECT * FROM " . DB_PRINT_ON_CUSTOM_PAGES . " WHERE pocp_title ='".$data['page_title']."'");
      $data1 = dbarray($result1);
        $cell_color = ($i % 2 == 0 ? "tbl1" : "tbl2");
        $i++;
        echo "
      <tr>
      <td class='$cell_color' align='center'>" . $data['page_title'] . "</td>";
      if (!empty($data1['pocp_title'])) {
      echo "
      <td class='$cell_color' align='center'><input type='checkbox' " . (($data1['pocp_ckbox'] == 1) ? "checked='checked'" : "") . " name='pocp_ckbox' value='1' style='width:10px; text-align:center'></td>";
      } else {
      echo "
      <td class='$cell_color' align='center'><input type='checkbox' name='check' value='1' /></td>";
      }
      echo "
      <td class='tbl'><select name='position' class='textbox' style='width:100%'>\n";
      
      echo "
      <option".($data1['pocp_config'] == 0 ? " selected" : "")." value='0'>Bitte w&auml;hlen</option>\n
      <option".($data1['pocp_config'] == 3 ? " selected" : "")." value='3'>Position Tabellenkopf</option>\n
      <option".($data1['pocp_config'] == 4 ? " selected" : "")." value='4'>Position oben & unten</option>\n
      <option".($data1['pocp_config'] == 2 ? " selected" : "")." value='2'>Position oben</option>\n
      <option".($data1['pocp_config'] == 1 ? " selected" : "")." value='1'>Position unten</option>\n";
      
      echo "
      </select></td>
        </tr>";
    }
   echo "<td align='center' class='tbl2' colspan='0'><input type='submit' name='save' value='".$locale['pocp020']."' class='button' /></td>\n";
   echo "</table></form";
} else { echo " Keine Daten vorhanden";}

closetable();


Wäre dies nun eine Tabelle ohne while Schleife wäre der "speichern" Code folgender:
Code
if (isset($_POST['save'])) {
   $result = dbquery("SELECT * FROM " . DB_CUSTOM_PAGES . " ORDER BY page_title ASC");
   $data = dbarray($result);
   $result1 = dbquery("SELECT * FROM " . DB_PRINT_ON_CUSTOM_PAGES . " WHERE pocp_title ='".$data['page_title']."'");
   $data1 = dbarray($result1);
   if (!empty($data1['pocp_title'])) {
    dbquery("UPDATE " . DB_PRINT_ON_CUSTOM_PAGES . " SET
   pocp_config = '" . stripinput((isset($_POST['position']) ? $_POST['position'] : "")) . "',
   pocp_ckbox = '" . stripinput((isset($_POST['pocp_ckbox']) ? 1 : 0)) . "' WHERE pocp_title='".$data['page_title']."'");
   } else {
   dbquery("INSERT " . DB_PRINT_ON_CUSTOM_PAGES . " SET
   pocp_title = '".$data['page_title'] . "',
   pocp_config = '" . stripinput((isset($_POST['position']) ? $_POST['position'] : "")) . "',
   pocp_ckbox = '" . stripinput((isset($_POST['pocp_ckbox']) ? 1 : 0)));
   }
   redirect(FUSION_SELF.$aidlink);
    }


Wie aber bekomme ich es hin, dass es auch unter der Verwendung der while Schleife möglich ist die Werte der einzelnen Zeilen zu speichern?

Ich denke ich sehe hier den Wald vor lauter Bäumen nicht, daher die Bitte um Unterstützung.
M.f.G.
GUL-Sonic

Merke:
Wirklichkeit ist niemals so konsistent wie ein solider Wahn!
Wink
 
firemike
Hi,
holst Du deine Daten aus zwei verschiedenen Datenbanken oder aus zwei verschiedenen Datenbank Tabellen?

So wie dein Code aussieht könnte man davon ausgehen du holst Du die Daten im Formular aus einer Datenbank aber aus zwei verschiedenen Tabellen (DB_CUSTOM_PAGES und DB_PRINT_ON_CUSTOM_PAGES) oder haben die einen unterschiedlichen Präfix?

Haben beide Tabellen dieselben Datenbankfelder?
Wenn ja dann mach den INSERT oder das UPDATE erst bei der einen dann bei der anderen Datenbanktabelle.
In deinem speichern Code schreibst Du ja nur in die Tabelle DB_PRINT_ON_CUSTOM_PAGES

Mike
Bearbeitet von firemike am 23.08.2014 um 20:47
 
GUL-Sonic
Sorry, da habe ich mich falsch ausgedrückt. natürlich hole ich die Daten aus einer Datenbank mit 2 unterschiedlichen Tabellen.
Die Custom_Pages enthält alle Seitennamen in der PRINT_ON_CUSTOM_PAGES ist hinterlegt ob die Druckoption für die Custom Page aktiviert ist.

Nun soll in dem Formular welches aus einem Vergleich dieser beiden Tabellen mittels Auflistung (while Schleife) besteht noch eingestellt werden ob die Druckoption auch für andere Custom Pages aktiviert werden soll und wenn ja an welcher Position (1,2,3 oder 4) sich das Druckersymbol befinden soll. Wenn der User seine Eingaben in dem Formular gemacht hat und auf speichern klickt sollen diese Änderungen in der Tabelle PRINT_ON_CUSTOM_PAGES abgespeichert werden.

Und genau da liegt das Problem. Ich gehe davon aus das ich den Speicherungsbefehl mit foreach erstellen muß allerdings habe ich keine Ahnung wie.

Im Anhang befindet sich ein Screenshot von dem Formular um das es geht:
GUL-Sonic hat folgende Datei angehängt:
Du hast nicht die Berechtigung die Anhäge dieses Themas zu sehen.

M.f.G.
GUL-Sonic

Merke:
Wirklichkeit ist niemals so konsistent wie ein solider Wahn!
Wink
 
John Doe
Dazu musst du den Formularfeldern einen Array fähigen Namen geben, ich weis gar nicht wie das genau heißt!?

Formular, wichtig sind die eckigen klammern!
Code
<input type='checkbox' name='pocp_ckbox[]' value='1' style='width:10px; text-align:center'>


Diese Werte kannst du dann mit einer for Schleife in die DB kloppen:
Code
for ($i = 0; $i < count($pocp_ckbox) && is_array($pocp_ckbox); $i++) {
                $result = dbquery("UPDATE " . DB_TEST . " SET name='$pocp_ckbox[$i]', WHERE id='$id' ");
            }
 
GUL-Sonic
Danke an globeFrEak :YAHOO:
Durch Deine Tatkräftige Unterstützung nun hier der fertige Code:
Code
$pocp_ckbox = (isset($_POST['pocp_ckbox']) && !empty($_POST['pocp_ckbox']) ? filter_var_array($_POST['pocp_ckbox'], FILTER_SANITIZE_STRING) : 0);
$pocp_title = (isset($_POST['pocp_title']) && !empty($_POST['pocp_title']) ? filter_var_array($_POST['pocp_title'], FILTER_SANITIZE_STRING) : 0);
$pocp_config = (isset($_POST['pocp_config']) && !empty($_POST['pocp_config']) ? filter_var_array($_POST['pocp_config'], FILTER_SANITIZE_STRING) : 0);

if (isset($_POST['save'])) {
var_dump($pocp_title);
echo "<hr>";
var_dump($pocp_config);
echo "<hr>";
var_dump($_POST['pocp_ckbox']);

for ($i = 0; $i < count($pocp_ckbox) && is_array($pocp_ckbox); $i++) {
$result0 = dbquery("SELECT * FROM " . DB_PRINT_ON_CUSTOM_PAGES . " WHERE pocp_title ='" . $pocp_title[$i] . "'");
$data0 = dbarray($result0);
if(empty($data0['pocp_title'])) {
$result = dbquery("INSERT " . DB_PRINT_ON_CUSTOM_PAGES . " SET
pocp_title = '$pocp_title[$i]',
pocp_config = '$pocp_config[$i]',
pocp_ckbox = '$pocp_ckbox[$i]'");
} else {
$result = dbquery("UPDATE " . DB_PRINT_ON_CUSTOM_PAGES . " SET
pocp_title = '$pocp_title[$i]',
pocp_config = '$pocp_config[$i]',
pocp_ckbox = '$pocp_ckbox[$i]' WHERE pocp_title='$pocp_title[$i]'");;
}
}
redirect(FUSION_SELF);
}

opentable($locale['pocp003']);
echo "<form name='pocp_settings' method='post' action='" . FUSION_SELF . $aidlink . "'>\n";
$result = dbquery("SELECT * FROM " . DB_CUSTOM_PAGES . " ORDER BY page_title ASC");
if (dbrows($result) > 0) {
echo"<table align='center' class='tbl-border'>";
echo"
<tr>
<td align='center'>Seitentitel</td>
<td align='center'>Druckoption an?</td>
<td align='center'>Druckersymbol</td>
</tr>";
$iii = 0;
while ($data = dbarray($result)) {
$result1 = dbquery("SELECT * FROM " . DB_PRINT_ON_CUSTOM_PAGES . " WHERE pocp_title ='" . $data['page_title'] . "'");
$data1 = dbarray($result1);
$cell_color = ($iii % 2 == 0 ? "tbl1" : "tbl2");
echo "<tr>";
echo "<td class='$cell_color' align='center' width='60%'>";
echo "<input type='hidden' name='pocp_title[]' value='" . $data['page_title'] . "'>" . $data['page_title'] . "</td>";
echo "<td class='tbl'><select name='pocp_ckbox[]' style='width:100%' class='textbox'>\n";
echo "<option" . ($data1['pocp_ckbox'] == 0 ? " selected" : "") . " value='0'>Nein</option>\n"
. "<option" . ($data1['pocp_ckbox'] == 1 ? " selected" : "") . " value='1'>Ja</option>\n";
echo "</select></td>";
echo "<td class='tbl'><select name='pocp_config[]' style='width:100%' class='textbox'>\n";
echo "<option" . ($data1['pocp_config'] == 0 ? " selected" : "") . " value='0'>Bitte w&auml;hlen</option>\n"
. "<option" . ($data1['pocp_config'] == 3 ? " selected" : "") . " value='3'>Position Tabellenkopf</option>\n"
. "<option" . ($data1['pocp_config'] == 4 ? " selected" : "") . " value='4'>Position oben & unten</option>\n"
. "<option" . ($data1['pocp_config'] == 2 ? " selected" : "") . " value='2'>Position oben</option>\n"
. "<option" . ($data1['pocp_config'] == 1 ? " selected" : "") . " value='1'>Position unten</option>\n";
echo "</select></td>"
. "</tr>";
$iii++;
}
echo "<td align='center' class='tbl2' colspan='0'><input type='submit' name='save' value='" . $locale['pocp020'] . "' class='button' /></td>\n";
echo "</table></form";
} else {
echo " Keine Daten vorhanden";
}
closetable();


Nur als Hinweis aus der checkbox wurde ein Dropdownfeld gemacht, da es ansonsten Fehler bei der Übergabe der Werte in die Datenbank gab.

Werde noch ein Feintuning vornehmen und dann die fertige Infusion "Print on Custom Pages" für Interessenten online stellen.
M.f.G.
GUL-Sonic

Merke:
Wirklichkeit ist niemals so konsistent wie ein solider Wahn!
Wink
 
John Doe
Du solltest die var_dump()'s noch löschen! B)
Code
var_dump($pocp_title);
echo "<hr>";
var_dump($pocp_config);
echo "<hr>";
var_dump($_POST['pocp_ckbox']);

Dieses Mitglied wurde gelöscht!
 
GUL-Sonic
Ups Wink jo habe ich gemacht.

Ich danke Dir! Smile
M.f.G.
GUL-Sonic

Merke:
Wirklichkeit ist niemals so konsistent wie ein solider Wahn!
Wink
 
Springe ins Forum: