PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ausgabe individuell verarbeiten


Maede
07.11.2009, 16:27:13
Hallo zusammen

Ich habe folgende PhP-Ausgabe:


$MTdb3 = mysql_query("SELECT * FROM metatags");
while ($MTTrow = mysql_fetch_assoc($MTdb3)) {
echo "<tr>";
echo "<td class=\"db_code\">";
echo $_POST['MTTid'] = $MTTrow['MTT_ID'];
echo "</td>";
echo "<td class=\"db_code\">";
echo $MTTrow['MTT_code'];
echo "</td>";
echo "<td class=\"db_status\">";
echo "<select name=\"MTT_select\" onchange=\"this.form.submit();\">";
if ($MTTrow['MTT_status'] == 'aktiviert') {
echo "<option>aktiviert</option>";
echo "<option>deaktiviert</option>";
} else {
echo "<option>deaktiviert</option>";
echo "<option>aktiviert</option>";
}
echo "</select>";
echo "</td>";
echo "<tr>";
}


Soweit sogut. Ich möchte jedoch, wenn man im SELECT-Tag avtiviert oder deaktiviert auswählt ein mysql_query("UPDATE metatags SET MTT_status = '$_POST[MTT_select]' WHERE MTT_ID = '$_POST[MTTid]'");-Abfrage stattfindet, damit sich der bereits vorhandene Wert in der DB durch den im SELECT-Tag ausgewählten Wert ersetzt.

Ebenfalls zu beachten, in der DB sind mehrere Datensätze vorhanden, dass heisst es werden mehrere SELECT-Felder generiert, da ich Datensatz für Datensatz auslese. Sollte man den Wert in einem SELECT-Feld ändern, sollten die restlichen jedoch nicht davon betroffen sein.

Das ganze sollte z.b. so ausehen, ganz grob:

-------------------------------
|ID| Meta |Status | //Überschrift
-------------------------------
|22| author |aktiviert | //Datensatz 1
|32| title |deaktiviert | //Datensatz 2
|24| language |deaktiviert | //Datensatz 3
|28| description |aktiviert | //Datensatz 4
-------------------------------

Ich war leider bis jetzt erfolglos mit meinem Vorhaben, kann mir jemand helfen?

mfg: Maede

urvater
07.11.2009, 16:57:46
Du sendest das Formular ja per Javascript ab. Ich kann allerdings nicht erkennen welches "action" ausgeführt wird. Dort müsste dann natürlich eine entsprechende Formularauswertung stattfinden.

Im dann folgenden UPDATE musst du nur das Feld updaten, welches zur passenden ID übergeben wurde.

Maede
07.11.2009, 17:23:39
die form-action befindet sich nicht im codebereich, welchen ich gepostet habe, aber ist vorhanden.

desweiteren habe ich mit folgender abfrage erfolglos versucht die datensätze zu aktualisieren:


if (isset($_POST['MTT_select'])) {
mysql_query("UPDATE metatags SET MTT_status = '$_POST[MTT_select]' WHERE MTT_ID = '$_POST[MTTid]'");
}


mfg: Maede

vt1816
07.11.2009, 17:30:42
die form-action befindet sich nicht im codebereich, welchen ich gepostet habe, aber ist vorhanden.


Dann zeige es uns bitte.


[...]
desweiteren habe ich mit folgender abfrage erfolglos versucht die datensätze zu aktualisieren:


Welche Fehlermeldung erhältst Du? Verwende mysql_error()!

Maede
07.11.2009, 17:37:28
also hier mal den gesamten php code:


<?php
if (isset($_POST['metatag_add'])) {
$MTT_code_db = htmlentities($_POST['metatag_new']);
mysql_query("INSERT INTO metatags VALUES('', '$MTT_code_db', 'aktiviert')");
if (mysql_affected_rows > '0') {
echo "ok";
} else {
echo "not ok";
}
}

$string_del = $_POST['metatag_db'];
$part_1 = explode(")", $string_del);
$MTT_part = $part_1[0];
$part_2 = explode("(", $MTT_part);
$MTT_id = $part_2[1];

if (isset($_POST['metatag_del'])) {
mysql_query("DELETE FROM metatags WHERE MTT_ID = '$MTT_id'");
if (mysql_affected_rows > '0') {
echo "ok";
} else {
echo "not ok";
}
}
?>
<form action="admin.php?page=design" method="post">
<div id="metatag">
<table class="tbl_1">
<thead>
<tr>
<th class="add" colspan="3">Metatag hinzuf&uuml;gen</th>
</tr>
<tr class="add_con">
<td class="add_input" colspan="2"><input type="text" name="metatag_new" /></td><td><input type="submit" class="submit" name="metatag_add" value="anlegen" /></td>
</tr>
<tr>
<th class="del" colspan="3">Metatag l&ouml;schen</th>
</tr>
<tr class="del_con">
<td class="del_input" colspan="2">
<select name="metatag_db">
<option></option>
<?php
$MTdb2 = mysql_query("SELECT * FROM metatags");
while ($MTTrow = mysql_fetch_assoc($MTdb2)) {
$MTT_code_length = strlen($MTTrow['MTT_code']);
if ($MTT_code_length > '100') {
$MTT_code_short = substr($MTTrow['MTT_code'], 0, 80);
echo "<option>(" . $MTTrow['MTT_ID'] . ") $MTT_code_short...</option>";
} else {
echo "<option>(" . $MTTrow['MTT_ID'] . ") " . $MTTrow['MTT_code'] . "</option>";
}
}
?>
</select>
</td><td><input type="submit" class="submit" name="metatag_del" value="l&ouml;schen" /></td>
</tr>
</table>
<table class="tbl_2">
<tr>
<th class="info">ID</th><th class="info">Metatag</th><th class="info">aktivieren</th>
</tr>
<?php
/*--------------------------------------------*/
$MTdb3 = mysql_query("SELECT * FROM metatags");
while ($MTTrow = mysql_fetch_assoc($MTdb3)) {
echo "<tr>";
echo "<td class=\"db_code\">";
echo $_POST['MTTid'] = $MTTrow['MTT_ID'];
echo "</td>";
echo "<td class=\"db_code\">";
echo $MTTrow['MTT_code'];
echo "</td>";
echo "<td class=\"db_status\">";
echo "<select name=\"MTT_select\" onchange=\"this.form.submit();\">";
echo "<option>" . $MTTrow['MTT_status'] . "</option>";
if ($MTTrow['MTT_status'] == 'aktiviert') {
echo "<option>deaktiviert</option>";
} else {
echo "<option>aktiviert</option>";
}
/*if ($MTTrow['MTT_status'] == 'aktiviert') {
echo "<option>aktiviert</option>";
echo "<option>deaktiviert</option>";
} else {
echo "<option>deaktiviert</option>";
echo "<option>aktiviert</option>";
}*/
echo "</select>";
echo "</td>";
echo "<tr>";
}
if (isset($_POST['MTT_select'])) {
mysql_query("UPDATE metatags SET MTT_status = '$_POST[MTT_select]' WHERE MTT_ID = '$_POST[MTTid]'");
}
/*--------------------------------------------*/
?>
</table>
</div>
</form>


*der betreffende bereich ist markiert mit /*-----*/

das problem ist, das ich nicht den ausgewählten datensatz wie ich zu beginn des posts beschrieben, updaten kann.

ich bekomme kein fehlermeldung im eigenliche sinne sondern das script funktioniert einfach bei der SELECT-aktualisierung nicht.

also wenn ich in der tabelle einen datensatz auswähle und den status von aktiviert auf deaktiviert setze, funktioniert es einfach nicht.

mfg: Maede

feuervogel
07.11.2009, 18:38:00
bitte das hier lesen und beachten: http://www.selfphp.de/forum/showthread.php?t=8195

urvater
07.11.2009, 18:41:24
Wenn dein Update funktionieren soll müsste das Feld metatag_db Verwendung finden. In deinem UPDATE verwendest du aber $_POST[MTTid]. Dieses Feld wird nicht übermittelt. Ist somit nicht vorhanden.
Aus diesem Grund kann der Update auch nicht funktionieren, da es keinen Wert mit dieser ID in der DB gibt.

Maede
07.11.2009, 19:35:21
die metatag_db variable ist nicht relevant für mein problem, desweiteren kann ich mit der antwort von feuervogel nicht viel anfangen.

mfg: Maede

urvater
07.11.2009, 19:47:43
die metatag_db variable ist nicht relevant für mein problem, desweiteren kann ich mit der antwort von feuervogel nicht viel anfangen.

mfg: Maede
Das sehe ich etwas anders. Immerhin ist dies das einzige Formularfeld, welches die MTT_ID übergibt.
<select name="metatag_db">
<option></option>
<?php
$MTdb2 = mysql_query("SELECT * FROM metatags");
while ($MTTrow = mysql_fetch_assoc($MTdb2)) {
$MTT_code_length = strlen($MTTrow['MTT_code']);
if ($MTT_code_length > '100') {
$MTT_code_short = substr($MTTrow['MTT_code'], 0, 80);
echo "<option>(" . $MTTrow['MTT_ID'] . ") $MTT_code_short...</option>";
} else {
echo "<option>(" . $MTTrow['MTT_ID'] . ") " . $MTTrow['MTT_code'] . "</option>";
}
}
?>
</select>

Dein Update soll ja immerhin auch zu einer DB ID vorgenommen werden. An welcher Stelle zeigst du denn sonst zu welchem DB Eintrag das ausgewählte UPDATE vorgenommen werden soll?

EDIT: $_POST[MTT_ID] existiert allerdings auch nicht. Notfalls dieses Feld noch ins Formular einbinden.

Maede
07.11.2009, 19:57:39
aso, aber das bezieht sich auf die falsche SELECT-Abfrage, die richtige SELECT-Abfrage habe ich mit /*-----------*/ gekennzeichnet.

mfg: Maede

feuervogel
07.11.2009, 20:00:28
die metatag_db variable ist nicht relevant für mein problem, desweiteren kann ich mit der antwort von feuervogel nicht viel anfangen.

mfg: Maede

wieso kannst du damit nichts anfangen? ich dachte, ich hätte es recht verständlich formuliert. guck dir mal punkt 1 genauer an, punkt 7 hat ja vt1816 angesprochen, und punkt 8 halte ich eigentlich für selbstverständlich.

Maede
07.11.2009, 21:28:31
ja ich habe es auch gelesen, dennoch finde ich keine antwort auf mein problem.

mfg: Maede

feuervogel
07.11.2009, 21:37:02
gib mal bitte das sql-statement mit echo aus anstatt es mit mysql_query auszuführen und zeit uns was da steht.

Maede
07.11.2009, 22:00:22
der gibt ne 1 aus, aber wenn ich beim datensatz mit der id 2 von status deaktiviert auf aktiviert update, ändert sich nichts, ändere ich den status in einem weiteren datensatz z.B. mit der id 9 dan ändert sich dieser.

komisch ist auch, dass die id, welche in die db übernommen wird immer die id 9 ist, auch wenn ich z.b. die id 2 update.

ich weiss nicht wie ich das interpretieren soll.

mfg: Maede

vt1816
07.11.2009, 22:35:42
der gibt ne 1 aus, aber wenn ich beim datensatz mit der id 2 von status deaktiviert auf aktiviert update, ändert sich nichts, ändere ich den status in einem weiteren datensatz z.B. mit der id 9 dan ändert sich dieser.



Sorry, aber was hat das mit der Aufforderung von feuervogel - sql-statement mit echo ... (ausgeben) anstatt es mit mysql_query auszuführen - zu tun?

urvater
08.11.2009, 15:11:29
aso, aber das bezieht sich auf die falsche SELECT-Abfrage, die richtige SELECT-Abfrage habe ich mit /*-----------*/ gekennzeichnet.

mfg: Maede

Nun dann fehlt dir erst recht der Bezug zur ID, die dem UPDATE unterliegen soll. Als eine Möglichkeit könnte man dem Option ein VALUE mitgeben und dieses entsprechend nach dem Versenden des Formulars auswerten.