Willkommen in der Webstatt
User-1 am 04.08.06 21:17

Ich verzweifel hier gerade ein wenig :/

Also folgendes:

Ich möchte Berechtigungen für mein Forum setzen. Ich wähle eine xyz-19utzergruppe aus und sehe dann alle Foren aufgelistet.
xyz-48n kann ich mit DropDown-Menüs die Berechtigungen setzen.

Beispiel:

+-----------+-------+----------------+-----------+
| Forenname | Lesen | Thema eröffnen | Antworten |
+-----------+-------+----------------+-----------+
| Forum 1 | Ja | Nein | Ja |
+-----------+-------+----------------+-----------+
| Forum 2 | Ja | Nein | Nein |
+-----------+-------+----------------+-----------+


Das ist natürlich dann -theoretisch- unendlich viele Einträge lang.

Ich lese das dann wie folgt ein:
foreach($_POST['inhaltid'] as $id => $value) {
mysql_query("UPDATE gruppenberechtigung SET lesen = '{$_POST['lesen'][$id]}',
neuesthema = '{$_POST['neuesthema'][$id]}',
neuerbeitrag = '{$_POST['neuerbeitrag'][$id]}'
WHERE inhaltid = '".$value."' && gruppenid = '".$_POST['gruppenid']."'") || die( mysql_error());
}


Die Gruppenid ist bei jedem Eintrag gleich (wird ja auch nur für diese eine Gruppe gerade bearbeitet).

Alle anderen Werte kommen definitiv (!) korrekt an. Habe mir die Arrays schon ausgeben lassen. Bei der Eingabe in die Datenbank läuft dann aber was schief:

z.B. wenn ich "Lesen" überall auf "Ja" habe, und ich änder dann irgendwo auf "Nein", werden alle nachfolgenden Einträge bei "Lesen" auch automatisch auf "Nein" gesetzt. ...wie gesagt: In den Arrays kommt es aber korrekt an!

netcup.de Warum gibt es hier Werbung?
User-2 am 04.08.06 21:25

moment mal...du schreibst aber nicht wirklich "ja" bzw. "nein" so in die db...oder?

ersetz dein && durch ein AND

User-1 am 04.08.06 21:30

Ich speicher eine 0 für "Nein" und eine 1 für "Ja"

z.B.:
echo "<select name=\"lesen[]\">";
echo "<option value=\"1\" $sel11>Ja</option>\n";
echo "<option value=\"0\" $sel12>Nein</option>\n";
echo "</select>";


Ob && oder AND macht keinen Unterschied :/

User-3 am 04.08.06 21:33

lesen = '{$_POST['lesen'][$id]}',

äähhhm...schreib mal das ein bisschen anders...also alles *fg*

du machst da ein ' und dann beim $_POST auch ein ' da kann das ja net funzen....

entweder du schreibst es raus:
lesen = '".$_POST['lesen'][$id]."',


oder steht ich auf dem schlaucht und das macht mit den {...} kein unterschied?

edit: oder so wie snake gesagt hat mit `

User-2 am 04.08.06 21:33

gut. dann setz die feldnamen in `


xyz-161, dank den { } kannst du strings in array keys auch mit ' ausstatten

User-1 am 04.08.06 21:42

Habe auch schon diverse Möglichkeiten ausprobiert. Macht aber alles keinen Unterschied, auch so nicht:

foreach($_POST['inhaltid'] as $id => $value) {
mysql_query("UPDATE `gruppenberechtigung` SET `lesen` = '".$_POST['lesen'][$id]."', `neuesthema` = '".$_POST['neuesthema'][$id]."', `neuerbeitrag` = '".$_POST['neuerbeitrag'][$id]."' WHERE `inhaltid` = '".$value."' AND `gruppenid` = '".$_POST['gruppenid']."'") || die( mysql_error());
}



Ich lad das mal hoch, dann könnt ihr euch das selber mal anschauen ;)

User-2 am 04.08.06 21:56

foreach($_POST['inhaltid'] as $id => $value) {
echo("UPDATE `gruppenberechtigung` SET `lesen` = '".$_POST['lesen'][$id]."', `neuesthema` = '".$_POST['neuesthema'][$id]."', `neuerbeitrag` = '".$_POST['neuerbeitrag'][$id]."' WHERE `inhaltid` = '".$value."' AND `gruppenid` = '".$_POST['gruppenid']."'".chr(10));
}

poste mal davon die ausgabe

User-1 am 04.08.06 21:59

xyz-48n kommt folgende Meldung:

Quote

UPDATE `gruppenberechtigung` SET `lesen` = '1', `neuesthema` = '0', `neuerbeitrag` = '0' WHERE `inhaltid` = '3' AND `gruppenid` = '2' UPDATE `gruppenberechtigung` SET `lesen` = '0', `neuesthema` = '0', `neuerbeitrag` = '0' WHERE `inhaltid` = '4' AND `gruppenid` = '2' UPDATE `gruppenberechtigung` SET `lesen` = '0', `neuesthema` = '0', `neuerbeitrag` = '0' WHERE `inhaltid` = '5' AND `gruppenid` = '2' UPDATE `gruppenberechtigung` SET `lesen` = '0', `neuesthema` = '0', `neuerbeitrag` = '0' WHERE `inhaltid` = '6' AND `gruppenid` = '2'
Warning: Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\user\admin\index.php:64) in D:\xampp\htdocs\user\admin\index.php on line 66



So sieht das im Moment aus. Funzt aber auf meinem Webspace noch weniger ^^ Hab jetzt aber auch keine Lust das dafür anzupassen. Jedenfalls wisst ihr schonmal wie es ungefähr aussieht.
http://juliankraemer.de/php/index.php


EDIT:

Das Online-Script funzt doch. spielt mal was mit den berechtigungen rum, dann seht ihr den fehler ganz schnell!!

User-4 am 04.08.06 22:14

Es könnte daran liegen, dass du Zahlenwerte in Strings steckst..
foreach($_POST['inhaltid'] as $id => $inhaltid) {
mysql_query(
"UPDATE
`gruppenberechtigung`
SET
`lesen` = ".intval($_POST['lesen'][$id]).",
`neuesthema` = ".intval($_POST['neuesthema'][$id]).",
`neuerbeitrag` = ".intval($_POST['neuerbeitrag'][$id])."
WHERE
`inhaltid` = ".intval($inhaltid)."
AND
`gruppenid` = ".intval($_POST['gruppenid'])
) or die(mysql_error());
}

Hab das ganze noch sicherheitstechnisch verbessert (intval).. :)

User-1 am 04.08.06 22:20

Ist leider genau das gleiche Problem :(

User-2 am 04.08.06 22:24

Quote
Original von xyz-100
xyz-48n kommt folgende Meldung:

[QUOTE]
UPDATE `gruppenberechtigung` SET `lesen` = '1', `neuesthema` = '0', `neuerbeitrag` = '0' WHERE `inhaltid` = '3' AND `gruppenid` = '2'

UPDATE `gruppenberechtigung` SET `lesen` = '0', `neuesthema` = '0', `neuerbeitrag` = '0' WHERE `inhaltid` = '4' AND `gruppenid` = '2'

UPDATE `gruppenberechtigung` SET `lesen` = '0', `neuesthema` = '0', `neuerbeitrag` = '0' WHERE `inhaltid` = '5' AND `gruppenid` = '2'

UPDATE `gruppenberechtigung` SET `lesen` = '0', `neuesthema` = '0', `neuerbeitrag` = '0' WHERE `inhaltid` = '6' AND `gruppenid` = '2'
[/quote]

hast du wirklich bis auf das erste, alle anderen "lesen" auf nein gestellt?

User-1 am 04.08.06 22:30

Jap, das ist alles korrekt. Habe mir die ganzen Arrays auch schon einzeln ausgeben lassen. Alle Daten sind vorhanden und auch richtig. Egal welche Einstellungen man vorgenommen hat.

Das ist ja gerade das seltsame...

User-2 am 04.08.06 22:32

langsam wirds lustig :)

hat noch jemand neue ideen?


ansonsten würd ich gerne mal deine tabellenstruktur sehen...also im phpmyadmin auf export und die tabellenstruktor exportieren

User-1 am 04.08.06 22:33

CREATE TABLE `gruppenberechtigung` (
`inhaltid` int(11) default NULL,
`gruppenid` int(11) default NULL,
`neuesthema` tinyint(1) default '0',
`neuerbeitrag` tinyint(1) default '0',
`lesen` tinyint(1) default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;



Edit:


Habe mir nochmal die einzelnen Arrays ausgeben lassen:
print_r($_POST['inhaltid']);
print_r($_POST['lesen']);
print_r($_POST['neuesthema']);
print_r($_POST['neuerbeitrag']);


Array ( [0] => 3 [1] => 4 [2] => 5 [3] => 6 )
Array ( [0] => 1 [1] => 1 [2] => 0 [COLOR=red] [3] => 1 [/COLOR] )
Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 )
Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 )

Die rotmarkierte 1 wird als 0 in die Tabelle eingetragen, obwohl sie im Array doch sehr deutlich nach einer 1 ausschaut -.-

Also nochmal zusammenfassend: Sobald ich irgendwo die Berechtigung auf "Nein" gesetzt habe, werden alle nachfolgenden auch automatisch auf "Nein" gesetzt, obwohl sie im Array den korrekten Wert haben.

User-1 am 04.08.06 23:20

ARGH

...Ich hab den Fehler entdeckt.
Einerseits ja erfreulich, aber der ist mal extrem peinlich :O

Der Fehler liegt nicht am SQL-Query, sondern an der Ausgabe ...

Die Ausgabe sind ja die Dropdown-Menüs, die Ihren Wert durch "selected" anzeigen. Und da hab ich die Variablen nicht mehr geleert.
GNAG :/ Naja, Fehler gefunden.

Vielen xyz-48k euch ;)

User-4 am 04.08.06 23:49

Held... ^^

User-2 am 05.08.06 00:06

peinlich peinlich

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt