Webstatt.org - Community seit 2006 - 2012 (2024?)

Multi-UPDATE funzt net richtig

user-210
04.08.2006 19:17

Ich verzweifel hier gerade ein wenig :/

Also folgendes:

Ich möchte Berechtigungen für mein Forum setzen. Ich wähle eine user-129utzergruppe aus und sehe dann alle Foren aufgelistet.
user-158n 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']."'"zwinkern || 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!

Sie haben soeben die Position Ihres Mauszeigers auf dem Monitor verändert. Bitte starten sie Windows neu damit die Änderungen wirksam werden.
user-303
04.08.2006 19:25

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

ersetz dein && durch ein AND

user-210
04.08.2006 19: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 :/

Sie haben soeben die Position Ihres Mauszeigers auf dem Monitor verändert. Bitte starten sie Windows neu damit die Änderungen wirksam werden.
Avatar user-271
04.08.2006 19: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 `

#!/bin/bash
traurig){ neutral:& };:
user-303
04.08.2006 19:33

gut. dann setz die feldnamen in `


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

user-210
04.08.2006 19: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']."'"zwinkern || die( mysql_error());
}



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

Sie haben soeben die Position Ihres Mauszeigers auf dem Monitor verändert. Bitte starten sie Windows neu damit die Änderungen wirksam werden.
user-303
04.08.2006 19: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-210
04.08.2006 19:59

Dann kommt folgende Meldung:


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

Sie haben soeben die Position Ihres Mauszeigers auf dem Monitor verändert. Bitte starten sie Windows neu damit die Änderungen wirksam werden.
Avatar user-255
04.08.2006 20: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).. lächeln

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
user-210
04.08.2006 20:20

Ist leider genau das gleiche Problem traurig

Sie haben soeben die Position Ihres Mauszeigers auf dem Monitor verändert. Bitte starten sie Windows neu damit die Änderungen wirksam werden.
user-303
04.08.2006 20:24

Original von user-210
Dann kommt folgende Meldung:


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'


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

user-210
04.08.2006 20: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...

Sie haben soeben die Position Ihres Mauszeigers auf dem Monitor verändert. Bitte starten sie Windows neu damit die Änderungen wirksam werden.
user-303
04.08.2006 20:32

langsam wirds lustig lächeln

hat noch jemand neue ideen?


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

user-210
04.08.2006 20: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 [3] => 1 )
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.

Sie haben soeben die Position Ihres Mauszeigers auf dem Monitor verändert. Bitte starten sie Windows neu damit die Änderungen wirksam werden.
user-210
04.08.2006 21: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 user-158k euch zwinkern

Sie haben soeben die Position Ihres Mauszeigers auf dem Monitor verändert. Bitte starten sie Windows neu damit die Änderungen wirksam werden.
Avatar user-255
04.08.2006 21:49

Held... ^^

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
user-303
04.08.2006 22:06

peinlich peinlich