login  Naam:   Wachtwoord: 
Registreer je!
 Forum
Zoeken  Regels  Help
Categorieën > PHP & SQL

2x nakijken of waarde in array zit (Opgelost)

Skatelow – 06/09/2011 20:06
sorry voor jullie zo vaak lastig te vallen 
Maar ik zit weer met een probleempje.

Ik wil dat leden uitnodigingen kunnen versturen naar andere leden, om zich bij een groep aan te sluiten.
Vooraleer dit in de database komt te staan, wil ik eerst nakijken of de gebruiker al een uitnodiging heeft verstuurd naar die persoon en of hij al in de groep zit waarvoor hij een uitnodiging wil sturen.

Ik wil er ook nog bij voegen dat je jezelf niet kan uitnodigen, maar dat doe ik pas als mijn probleem is opgelost. 

  1. <form method="post" action="<?=$_SERVER['PHP_SELF']?>?lid=<? echo $_GET['lid']; ?>">
  2.  
  3. <?php
  4. include "sql.php";
  5.  
  6. if(isset($_POST['uitnodigengroep'])) //Als er op verzenden is geklikt
  7. {
  8. //sql om verzoeken op te halen
  9. $uitnodigingen_nakijken = mysql_query("SELECT * FROM groepen_verzoeken WHERE eigenaar = '" . $_SESSION['gebruiker'] . "'");
  10.  
  11. //---- NAKIJKEN OF UITNODIGING VOOR DEZE GROEP AL IS VERSTUURD NAAR DEZE GEBRUIKER ----
  12. // ALS type = aanvraag EN groep = POST groep EN lid = POST lid EN eigenaar = lid
  13.  
  14. while ($uitnodigingen = mysql_fetch_array($uitnodigingen_nakijken))
  15. {
  16.  
  17. if(!(in_array($uitnodigingen['groep'], $_POST['groep']) && in_array($uitnodigingen['lid'], $_POST['lid']) && in_array($uitnodigingen['eigenaar'], $_SESSION['gebruiker']) && $uitnodigingen['type'] == 'aanvraag')) //nakijken of eigenaar al uitnodiging heeft verstuurd
  18. {
  19. //sql leden van groep ophalen
  20. $leden_groep = mysql_query("SELECT lid FROM groepen_leden WHERE groep ='" . $_POST['groep'] . "'");
  21.  
  22. while ($leden = mysql_fetch_array($leden_groep))
  23. {
  24.  
  25. if(!(in_array($_POST['lid'], $leden))) //als deze persoon nog niet in de groep zit
  26. {
  27. $aanvraag = "INSERT INTO groepen_verzoeken (type, groep, lid, eigenaar)
  28. VALUES ('uitnodiging','$_POST[groep]','$_GET[lid]','$_SESSION[gebruiker]')";
  29.  
  30. $aanvragen = mysql_query($aanvraag) or die(mysql_error());
  31. echo "<script language=javascript>alert('Je hebt " . $_POST['lid'] . " uitgenodigd in " . $_POST['groep'] . "')</script>";
  32. }
  33. else{ //als persoon al in groep zit
  34. echo "<script language=javascript>alert('Je kan " . $_POST['lid'] . " niet uitgenodigen in " . $_POST['groep'] . " omdat hij al lid is van deze groep.')</script>";
  35. }
  36. }
  37. }
  38. else{
  39. echo "<script language=javascript>alert('Je kan " . $_POST['lid'] . " niet uitgenodigen in " . $_POST['groep'] . " omdat je al een uitnodiging hebt verstuurd.')</script>";
  40. }
  41. }
  42. }
  43. else
  44. {
  45. //Groepen oproepen die gebruiker bezit
  46. $groepen = mysql_query ("SELECT naam FROM groepen_info WHERE eigenaar = '" . $_SESSION['gebruiker'] . "'");
  47.  
  48. echo "<font size = '+1'>" . $_GET['lid'] . " uitnodigen in </font>";
  49.  
  50. echo " <select name='groep'>";
  51. while ($rij = mysql_fetch_array($groepen))
  52. {
  53. echo "<option value=" . $rij['naam'] . ">" . $rij['naam'] . "</option>";
  54. }
  55. echo " </select><br/>";
  56. echo "<input type='hidden' name='lid' value='" . $_GET['lid'] . "'>";
  57. echo "<input type='submit' name='uitnodigengroep' value='Uitnodigen'>";
  58.  
  59. echo "</form>";
  60. }
  61.  
  62. ?>



Ik heb momenteel een 2 keer een while die een array doorloopt, en telkens een if die nakijkt of die waarde in die array zit.
Maar het werkt niet 
Al bedankt op voorhand,
-Skatelow


Pagina:

13 antwoorden

Gesponsorde links

larssy1 – 06/09/2011 20:57
ik snap niet precies waarom je het zo moeilijk wilt doen.

Waarom niet een aparte tabel maken, waarin de groepverzoeken worden vastgelegt.

Inplaats van lid naar lid, zou het handiger zijn om van groep naar lid,
zo hebben andere leden in de groep ook niet de mogelijkheid om nog naar hetzelfde lid een uitnodiging te versturen.

Daarnaast, je hoeft enkel te kijken in de records of de groepnaam of id met de lidid of naam overeenkomt, en dan een result printen op het beeldscherm.

Ook is het probleem hier simpel opgelost, waarom zou je je zelf uitnodigen als je al in de bewuste groep zit? dit is zeersimpel afgehandeld in php.

Skatelow – 06/09/2011 21:12
larssy1 schreef:
ik snap niet precies waarom je het zo moeilijk wilt doen.

Waarom niet een aparte tabel maken, waarin de groepverzoeken worden vastgelegt.

Inplaats van lid naar lid, zou het handiger zijn om van groep naar lid,
zo hebben andere leden in de groep ook niet de mogelijkheid om nog naar hetzelfde lid een uitnodiging te versturen.

Daarnaast, je hoeft enkel te kijken in de records of de groepnaam of id met de lidid of naam overeenkomt, en dan een result printen op het beeldscherm.

Ook is het probleem hier simpel opgelost, waarom zou je je zelf uitnodigen als je al in de bewuste groep zit? dit is zeersimpel afgehandeld in php.


Het is de bedoeling dat enkel de eigenaar van een groep nieuwe leden kan uitnodigen, die nog niet in die groep zitten.
En er is een aparte tabel voor groepen_verzoeken.

larssy1 – 06/09/2011 21:50 (Laatst gewijzigd op 06/09/2011 21:50)
dan snap ik helaas je probleem niet helemaal.. als je eventueel (voor mijn doen) duidelijker kunt zijn, aub. en anders zal ik morgen even kijken naar wat het zou moeten zijn, ik ga nu eerst mijn serie FarScape kijken 

---
indien er niemand anders met je oplossing komt ondertusse ofc.

WouterJ – 06/09/2011 22:06
'Het werkt niet' is altijd zo'n eindeloos en irritant vaag begrip:
- Wat werkt er niet?
- Wat zie je?
- Krijg je errors?
- Hoe weet je dat het niet werkt?
- Waar denk je dat het aan ligt?
- Wat zijn jou bedachte oplossingen hiervoor?

En verder:
- Je script is lek, oftewel toegankelijk voor hackers, gebruik PHP.net: mysql_real_escape_string bij elke variabele van de user ($_POST, $_GET, $_SESSION, $_COOKIE).
- Gebruik voor HTML dubbele quotes om de attribute values. Daarom is het verstandig om de HTML code met enkele quotes te omringen. Dit is ook sneller:
  1. echo '<div id="box"></div>'


- Gebruik voor javascript type="text/javascript" i.p.v. language="JavaScript".

xSc – 06/09/2011 22:42 (Laatst gewijzigd op 06/09/2011 22:50)

Dlol – 07/09/2011 00:32 (Laatst gewijzigd op 07/09/2011 00:32)
Bij de eerste overlezing van je code vallen me enkele dingen op:

Regel 17:
  1. if(!(in_array($uitnodigingen['groep'], $_POST['groep']) && in_array($uitnodigingen['lid'], $_POST['lid']) && in_array($uitnodigingen['eigenaar'], $_SESSION['gebruiker']) && $uitnodigingen['type'] == 'aanvraag')) //nakijken of eigenaar al uitnodiging heeft verstuurd



in_array gebruikt als tweede argument een array, nu is het voor mij lang geleden dat ik nog eens deftig met forms gewerkt heb, maar volgens mij worden er via forms nooit arrays verstuurd via $_POST (maar ik kan me hier vergissen, en ik ben te lui om het even op te zoeken). Zelfde geldt voor $_POST['lid']...

Verder huiver ik gewoon echt van dit soort codes. PHP die javascript echoot vermengd in html-pagina's... Het kan snel onduidelijk en onoverzichtelijk worden.
Ik weet natuurlijk niet hoe veel je van PHP kent, maar indien je redelijk gevorderd bent en je van plant bent deze applicatie waar je aan bezig bent serieus verder uit te bouwen, raad ik je aan kennis te nemen van OOP (Object Oriented Programming) en hierna voor de structuur eens een kijkje neemt ivm het MVC pattern. Je zal zien dat eens je dit door dit een geweldige versoepeling zal betekenen.
Maar ik zeg het, dat is vooral voor als je echt van plan bent iets te doen met de applicatie (en omdat ik gróte fan ben van OOP in PHP en van MVC).

larssy1 – 07/09/2011 08:57
zoals Dlol al zei, je $_POST['groep'] is geen array.

De tweede waarde in 'in_array' moet een array type zijn.

Daarom aangezien mysql_fetch_array wel van een array type is, zou het zeer gebruikelijk zijn, om deze twee waardes om te 'switchen'.

dus inplaats van:
  1. if(!(in_array($uitnodigingen['groep'], $_POST['groep']) && in_array($uitnodigingen['lid'], $_POST['lid']) && in_array($uitnodigingen['eigenaar'], $_SESSION['gebruiker']) && $uitnodigingen['type'] == 'aanvraag')) //nakijken of eigenaar al uitnodiging heeft verstuurd



word het
  1. if(!(in_array($_POST['groep'], $uitnodigingen['groep']) && in_array($_POST['lid'], $uitnodigingen['lid']) && in_array($_SESSION['gebruiker'], $uitnodigingen['eigenaar']) && $uitnodigingen['type'] == 'aanvraag')) //nakijken of eigenaar al uitnodiging heeft verstuurd


Dlol – 07/09/2011 12:36
@larssy1:

mysql_fetch_array geeft inderdaad een array, maar dat wil dus zeggen dat $uitnodigingen een array is. Daarom is $uitnodigingen['groep'] nog geen array.
Het zou handig zijn als we de tabelstructuur wisten eigenlijk, al vermoed ik dat hij eigenlijk gewoon wil checken of de geselecteerde groep (= $_POST['groep']) niet voorkomt in de uitnodigingen, dus volgens mij bedoelt hij iets van:

  1. if ($_POST['groep'] != $uitnodigingen['groep'] && $_POST['lid'] != $uitnodigingen['lid'] && $_SESSION['gebruiker'] == $uitnodigingen['eigenaar'] && $uitnodigingen['type'] == 'aanvraag')


Skatelow – 07/09/2011 15:55
Wat ik dus wil doen (op een zo simpel mogelijke manier) is:
-Nakijken of eigenaar al uitnodiging heeft verstuurd naar lid
-Nakijken of lid al in groep zit
-Nakijken of eigenaar zichzelf niet uitnodigd
Als deze checklist goed is, dan steek je iets nieuw in de database.

Het probleem is dat ik niet echt weet hoe ik dit goed, en zo simpel mogelijk doe..

Dlol – 07/09/2011 17:02
Lees je onze posts wel vraag ik me af? We reiken je hier enkele mogelijke suggesties aan waar het probleem zou kunnen zitten, laat ons dan ook weten of het probleem zich inderdaad daar situeert, of dat er nog andere problemen zijn.

Wat betreft je 3 puntjes, dit is allemaal redelijk gemakkelijk te controleren, maar ik zeg het, we weten niets van hoe je database structuur eruit ziet ed. zodat het moeilijk is exact te zeggen hoe het moet.
- Probeer alle uitnodigingen van de eigenaar verstuurd naar een bepaald lid op te vragen. Indien er een resultaat is gevonden, dan moet er een foutmelding gegeven worden aangezien dit wil zeggen dat er al een uitnodiging verstuurd is. Dit wordt iets in de aard van:

  1. $query = "SELECT * FROM groepen_verzoeken WHERE eigenaar='". $_SESSION['eigenaar'] . "' AND bestemmeling='". $_POST['bestemmeling'] . "';";



- Dit is een moeilijke. Hiervoor moeten we echt je tabel-structuur kennen. Het simpelste is gewoon een tabel "lidmaatschappen" maken volgens mij, met daarin dan als rows het id van het lid, en het id van de groep. Dan kan je makkelijk volgende query uitvoeren om te zien of het lid in een groep zit:
  1. $query = "SELECT * FROM lidmaatschappen WHERE lid='".$_POST['lid']."';";



- De laatste is de makkelijkste, en doe je best eerst:
  1. if ($_POST['bestemmeling'] == $_SESSION['gebruiker'])



Ik zeg het, neem niet deze code nu klakkeloos over, want dat gaat niet werken. Lees onze posts, probeer ze te begrijpen, en je zou al een stap dichter bij de oplossing moeten geraken!

Gesponsorde links


Pagina:

Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten:

© 2002-2012 Sitemasters.be - Regels - Gehost door: Vircon - Laadtijd: 0.325s