Your-pMF
     registrieren     benutzer     suche     team     kalender     hilfe     index    
Chat     downloads     link us     gästebuch     supportforum    
 

if-Abfrage über mehrere Spalten

original Thema anzeigen

25.11.09, 17:44:21

siebi

Hallo Habe folgende Tabelle in meiner Datenbank: [code] I id I group_id I ----------------- I 1 I 1 I I 2 I 3 I [/code] Nun möchte ich folgende if-Abfrage realisieren, stehe aber gerade mal wieder ein bisschen auf dem Schlauch :rolleyes: [PHP]if (($To['group_id'] == $group_id)[/PHP] Es sollen natürlich alle Einträge in der Spalte "group_id" greifen. Wenn ich eine normale Abfrage mache, funzt das natürlich nicht. Vielleicht kann mir hier jemand helfen?!
25.11.09, 18:09:45

pip

willst du diese if-bedingung in die abfrage integrieren (als where bedingung) oder soll es nachträglich per php geschehen (warum soll das denn so nicht funktionieren bzw wie sieht deine abfrage dazu aus)?
25.11.09, 18:22:57

siebi

So sieht meine Abfrage im Moment aus: [PHP] $result_unblock = $_db->query('SELECT * FROM `'.$_cfg['DB_PREFIX'].'hack_pn_unblock` '); $unblock = $_db->fetch_array($result_unblock); $To = get_user_info( user_id( gpc_stripslashes($_POST['pn_block_name']))); $result_block_user = $_db->query('SELECT * FROM `'.$_cfg['DB_PREFIX'].'hack_pn_block` WHERE user_id = '.$_user['id'].' '); $block_user = $_db->fetch_array($result_block_user); if (($To['group_id'] == $unblock) OR (!$To['id']) OR ($To['id'] == $block_user['user_id_block'])) { msg('error_user_pn_block_fault', 'user.php?action=pn_block'); } else {[/PHP] Wenn allerdings zwei Zeilen eingetragen sind, gibt er mir nur die erste aus. Muss da irgendwo eine Schleife rein? Wo und wie?
25.11.09, 18:38:07

pip

geändert von: pip - 25.11.09, 18:38:35

[php]$result = $_db->query('...'); while ($Daten = $_db->fetch_array($result)) { ... }[/php]
25.11.09, 18:45:17

siebi

So sieht es jetzt aus. Wie gesagt, so nimmt er immer nur den ersten eintrag aus der Tabelle. Kontrolliert aber nicht, ob beide group_id´s passen. [PHP] $result = $_db->query('SELECT * FROM `'.$_cfg['DB_PREFIX'].'hack_pn_unblock` '); while ($Daten = $_db->fetch_array($result)) { $To = get_user_info( user_id( gpc_stripslashes($_POST['pn_block_name']))); $result_block_user = $_db->query('SELECT * FROM `'.$_cfg['DB_PREFIX'].'hack_pn_block` WHERE user_id = '.$_user['id'].' '); $block_user = $_db->fetch_array($result_block_user); if (($To['group_id'] == $Daten['group_id']) OR (!$To['id']) OR ($To['id'] == $block_user['user_id_block'])) { msg('error_user_pn_block_fault', 'user.php?action=pn_block'); } else { $_db->query('INSERT INTO `'.$_cfg['DB_PREFIX'].'hack_pn_block` (`user_id_block`,`user_id`,`date`) VALUES (\''.addslashes($To['id']).'\',\''.addslashes($_user['id']).'\',\''.time().'\')' ); msg('error_user_pn_block', 'user.php?action=pn_block'); } }[/PHP]
26.11.09, 21:23:56

siebi

Muss hier leider noch mal nachhaken, da ich nicht weiter komme :wall: Mit ner einfachen Abfrage funzt das net. Habe nun mal was anderes probiert, funzt aber auch nicht. Vielleicht ist ja nur ein relativ kleiner Fehler drin, vielleicht funzt es so aber auch überhaupt nicht. Vielleicht könntest du (oder jemand anderes) mir ja noch mal nen Tipp geben?! [PHP] //für if-group_id $result_unblock = $_db->query('SELECT `group_id` FROM `'.$_cfg['DB_PREFIX'].'hack_pn_unblock` '); $groups = array(); while ($Daten = $_db->fetch_array($result_unblock)) { $groups[] = $Daten['group_id']; //user_namen zur user_id $To = get_user_info( user_id( gpc_stripslashes($_POST['pn_block_name']))); //geblockte user $result_block_user = $_db->query('SELECT * FROM `'.$_cfg['DB_PREFIX'].'hack_pn_block` WHERE user_id = '.$_user['id'].' '); $block_user = $_db->fetch_array($result_block_user); if (($To['group_id'] == implode ( ' OR ', $groups)) OR (!$To['id']) OR ($To['id'] == $block_user['user_id_block'])) { msg('error_user_pn_block_fault', 'user.php?action=pn_block'); } else {[/PHP]
26.11.09, 21:45:35

pip

sorry, ich versteh irgendwie nicht was du genau willst...
26.11.09, 22:14:36

siebi

Wenn ich die if-Abfrage ohne Variablen schreibe, um die Benutzergruppen zu überprüfen klappt das: [PHP]($To['group_id'] == 1 OR 2 OR ...)[/PHP] Anstatt die Benutzergruppen aber nun von Hand einzutragen hätte ich die gerne aus einer Tabelle Namens pmf_hack_pn_unblock / user_group. Bei der Abfrage, die du gepostet hast, bekomme ich immer nur den ersten User in der Spalte user_group angezeigt. Nun habe ich versucht mit der Funktion "[URL="http://www.selfphp.de/funktionsreferenz/string_funktionen/implode.php"]implode[/URL]" die Benutzergruppen so zusammenzusetzen, als wenn ich das von Hand mache. Ich weiß, ich kann es schlecht erklären, hoffe nun aber, dass du mir folgen kannst ;)
26.11.09, 23:34:38

pip

geändert von: pip - 27.11.09, 11:40:00

glaub jetzt hab ichs verstanden :D [php]while($Daten = $_db->fetch_array($result_unblock)) { $groups[] = $Daten['group_id']; }[/php] das reicht für die schleife erstmal schon. damit würdest du alle group_ids in das array $groups packen. die user abfrage muss nicht mehr mit in die schleife da du die sonst mehrmals durchführst... deine if bedinung könnte so aussehen: [php]if(in_array($To['group_id'], $groups)) { ... }[/php] /edit in der in_array fkt muss es natürlich $groups heißen...
27.11.09, 09:15:51

siebi

geändert von: siebi - 27.11.09, 09:21:23

Moin pip Ne, so funzt es leider auch net :( Habs auch so probiert, da es meiner Meinung nach so sein müsste, oder?! [PHP] if ((in_array($To['group_id'], $groups))[/PHP] Die if-Bedingung grift hier auch wieder nur bei der group_id 1, alle anderen nicht, obwohl noch 2 und 3 in die DB eingetragen sind. Habe mir die Funktion mal angeschaut. Muss aber auch funktionieren. Habe nochmal was mit der Funktion Implode versucht. Habe mal probiert ob ich was aus dieser Funktion rausquetschen kann. Funzt auch, nur nicht in der if-Bedingung :wall: [PHP] while ($Daten = $_db->fetch_array($result_unblock)) { $groups[] = $Daten['group_id']; $test = implode(" OR ", $groups); }[/PHP] "$test" gibt mir dann "1 OR 2 OR 3" aus, wie es sein soll. Und wenn ich "1 OR 2 OR 3" von Hand in die if-Bedingung eingebe, greift sie doch auch bei allen drei Benutzergruppen. Wenn ich das nun mit der Variablen "$test" tausche funztz nun wieder nur "1". Ist irgendwie immer das selbe. Oder soll ich woanders den Fehler haben? Aber dann würde das doch auch nicht funzen, wenn ich die Benutzergruppen von Hand eingebe, oder?!
27.11.09, 11:43:40

pip

das mit dem in_array muss funktionieren :D deine implode funktioniert so nicht da deine zweite bedingung immer greift da sie nur 2 heißt. du hast im prinzip ($x == 1) OR (2) OR (3) geschrieben...
27.11.09, 17:24:37

siebi

[quote="pip"]das mit dem in_array muss funktionieren :D[/quote] Das sag mal nicht mir :rolleyes: [quote]eine implode funktioniert so nicht da deine zweite bedingung immer greift da sie nur 2 heißt. du hast im prinzip ($x == 1) OR (2) OR (3) geschrieben...[/quote] Ah, ok, dann ist das ja klar ;) Funktionieren tut es aber trotzdem nicht. Ich schreibe nochmal den kompletten Code. Vielleicht findest du ja doch noch einen Fehler, wenn du noch mal gucken würdest?! [PHP] ### PN Blocker case 'pn_block': //für if-group_id $result_unblock = $_db->query('SELECT `group_id` FROM `'.$_cfg['DB_PREFIX'].'hack_pn_unblock` '); while ($Daten = $_db->fetch_array($result_unblock)) { $groups[] = $Daten['group_id']; //user_namen zur user_id $result_user = $_db->query('SELECT id, group_id FROM `'.$_cfg['DB_PREFIX'].'user` WHERE name = \''.gpc_addslashes($_POST['pn_block_name']).'\' '); $user = $_db->fetch_array($result_user); //geblockte user $result_block_user = $_db->query('SELECT * FROM `'.$_cfg['DB_PREFIX'].'hack_pn_block` WHERE user_id = '.$_user['id'].' '); $block_user = $_db->fetch_array($result_block_user); if ((in_array($user['id'], $groups)) OR (!$user['id']) OR ($user['id'] == $block_user['user_id_block'])) { msg('error_user_pn_block_fault', 'user.php?action=pn_block'); } else { $_db->query('INSERT INTO `'.$_cfg['DB_PREFIX'].'hack_pn_block` (`user_id_block`,`user_id`,`date`) VALUES (\''.addslashes($user['id']).'\',\''.addslashes($_user['id']).'\',\''.time().'\')' ); msg('error_user_pn_block', 'user.php?action=pn_block'); } } break;[/PHP]
28.11.09, 12:19:14

siebi

Hab grad festgestellt, dass es auch funktionieren müsste. Aber mit der Abfrage stimmt meiner Meinung nach was nicht. Wenn ich das array nicht von der DB hole, sondern von Hand eintrage funktioniert das auch mit dem in_array. [PHP]$groups = array(1, 2, 3);[/PHP] Nur weiß ich nun nicht, wieso das nicht funktioniert, wenn ich die Daten aus der DB hole. Finde da auch nichts wirklich brauchbares im Internet, obwohl ich schon einiges probiert habe. Ist echt zum verzweifeln, sonst läuft der Hack eigentlich ganz gut, und ich muss nur noch den Installer basteln.
28.11.09, 13:05:14

pip

ich habe doch in einem meiner vorigen beiträge geschrieben, dass du die while schleife nach [i]$groups[] = $Daten['group_id'];[/i] schließen sollst :D dann sollte es auch funktionieren...
28.11.09, 13:16:34

siebi

Danke, pip. Jetzt scheint es zu funktionieren. Manchmal hab ich echt ein Brett vor dem Kopf :wall: Mal schauen, ob ich jetzt die feinheiten und den Installer hinbekomme. Werde mal wieder einen von dir benutzen, wenns OK ist?!
28.11.09, 13:54:10

pip

geändert von: pip - 28.11.09, 13:54:41

hehe, kein problem. habe ich auch manchmal ;-) meinen installer darfste natürlich gerne verwenden...
28.11.09, 13:57:21

siebi

[quote="pip"]meinen installer darfste natürlich gerne verwenden...[/quote] Danke dir, pip! Auch für deine Hilfe!!!
 
Powered by: phpMyForum 4.2.1 © Christoph Roeder
SQL Error