Willkommen in der Webstatt Zum Webstatt Blog und Stories
Julian 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 Benutzergruppe aus und sehe dann alle Foren aufgelistet.
Dann 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?
Snake 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

Julian 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 :/

nuit nuit 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 `

Snake am 04.08.06 21:33

gut. dann setz die feldnamen in `


nuit, dank den { } kannst du strings in array keys auch mit ' ausstatten

Julian 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 ;)

Snake 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

Julian am 04.08.06 21:59

Dann 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!!

milahu milahu 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).. :)

Julian am 04.08.06 22:20

Ist leider genau das gleiche Problem :(

Snake am 04.08.06 22:24

Quote
Original von Julian
Dann 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?

Julian 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...

Snake 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

Julian 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.

Julian 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 Dank euch ;)

milahu milahu am 04.08.06 23:49

Held... ^^

Snake 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