login  Naam:   Wachtwoord: 
Registreer je!
 Forum

2x nakijken of waarde in array zit (Opgelost)

Offline Skatelow - 06/09/2011 20:06
Avatar van SkatelowLid 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

13 antwoorden

Gesponsorde links
Offline larssy1 - 06/09/2011 20:57
Avatar van larssy1 MySQL beginner 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.
Bedankt door: Skatelow
Offline Skatelow - 06/09/2011 21:12
Avatar van Skatelow Lid
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.
Offline larssy1 - 06/09/2011 21:50 (laatste wijziging 06/09/2011 21:50)
Avatar van larssy1 MySQL beginner 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.
Offline WouterJ - 06/09/2011 22:06
Avatar van WouterJ HTML gevorderde '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".
Offline xSc - 06/09/2011 22:42 (laatste wijziging 06/09/2011 22:50)
Avatar van xSc Onbekend
Offline Dlol - 07/09/2011 00:32 (laatste wijziging 07/09/2011 00:32)
Avatar van Dlol Lid 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).
Offline larssy1 - 07/09/2011 08:57
Avatar van larssy1 MySQL beginner 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
Offline Dlol - 07/09/2011 12:36
Avatar van Dlol Lid @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')
Offline Skatelow - 07/09/2011 15:55
Avatar van Skatelow Lid 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..
Bedankt door: html_user
Offline Dlol - 07/09/2011 17:02
Avatar van Dlol Lid 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!
Offline Skatelow - 07/09/2011 17:38 (laatste wijziging 07/09/2011 17:39)
Avatar van Skatelow Lid Ik lees wel degelijk jullie antwoorden, en probeer ze zo goed mogelijk te begrijpen.
Enkel dit lukt niet altijd even goed.

Ik zal anders voor de makkelijkheid mijn tabelstructuur even geven.
---------------------------
-leden
___gebruikersnaam
___...
-groepen_info
___naam groep
___eigenaar
___info
___...
-groepen_leden
___groep
___gebruikersnaam
___type
-groepen_verzoeken
___type
___groep
___lid
___eigenaar
---------------------------

Ik heb het script over een hele andere boeg gegooid,
maar nu krijg ik telkens 2 zelfgemaakte errors:
-lid zit al in de groep
-je hebt al een uitnodiging verstuurd

Nieuwe Script:

  1. <form method="post" action="<?=$_SERVER['PHP_SELF']?>?lid=<? echo $_GET['lid']; ?>">
  2.  
  3. <?php
  4.  
  5. if(isset($_POST['uitnodigengroep'])) //Als er op verzenden is geklikt
  6. {
  7. //Velden Nakijken
  8.  
  9. $error = array();
  10.  
  11. //Nakijken of lid al in groep zit
  12. $leden_groep = mysql_query ("SELECT * FROM groepen_leden WHERE lid='".$_POST['lid']."'");
  13.  
  14. if( $leden_groep != "" ){
  15. $error[] = "<b>Je kan " . $_POST['lid'] . " niet uitgenodigen in " . $_POST['groep'] . " omdat hij al lid is van deze groep.</b><br/>";
  16. }
  17.  
  18. //Nakijken of uitnodiging al is verstuurd
  19. $uitnodigingen = mysql_query ("SELECT * FROM groepen_verzoeken WHERE eigenaar='". $_SESSION['gebruiker'] . "' AND lid='". $_POST['lid'] . "'");
  20.  
  21. if($uitnodigingen != ""){
  22. $error[] = "<b>Je kan " . $_POST['lid'] . " niet uitgenodigen in " . $_POST['groep'] . " omdat je al een uitnodiging hebt verstuurd.</b><br/>";
  23. }
  24. //Nakijken of uitnodiging naar jezelf wordt gestuurd
  25. if($_POST['lid'] == $_SESSION['gebruiker']){
  26. $error[] = "<b>Je kan jezelf niet uitnodigen in ". $_POST['groep'] . "</b><br/>";
  27. }
  28. $fouten = sizeof($error); // aantal errors tellen
  29. if($fouten != 0) { // Er is minstens 1 error
  30. $counter = "0";
  31. while ($counter <= $fouten){
  32. echo "$error[$counter]";
  33. $counter ++;
  34. }
  35. echo "<a class='linkje' href='profielpagina.html?lid=$_GET[lid];'>Opnieuw</a>";
  36. }
  37. else{
  38. //Lid uitnodigen in groep
  39. $aanvraag = "INSERT INTO groepen_verzoeken (type, groep, lid, eigenaar)
  40. VALUES ('uitnodiging','$_POST[groep]','$_GET[lid]','$_SESSION[gebruiker]')";
  41.  
  42. $aanvragen = mysql_query($aanvraag) or die(mysql_error());
  43. echo "<script language=javascript>alert('Je hebt " . $_POST['lid'] . " uitgenodigd in " . $_POST['groep'] . "')</script>";
  44. }
  45. }
  46. else
  47. {
  48. //Groepen oproepen die gebruiker bezit
  49. $groepen = mysql_query ("SELECT naam FROM groepen_info WHERE eigenaar = '" . $_SESSION['gebruiker'] . "'");
  50.  
  51. echo "<font size = '+1'>" . $_GET['lid'] . " uitnodigen in </font>";
  52.  
  53. echo " <select name='groep'>";
  54. while ($rij = mysql_fetch_array($groepen))
  55. {
  56. echo "<option value=" . $rij['naam'] . ">" . $rij['naam'] . "</option>";
  57. }
  58. echo " </select><br/>";
  59. echo "<input type='hidden' name='lid' value='" . $_GET['lid'] . "'>";
  60. echo "<input type='submit' name='uitnodigengroep' value='Uitnodigen'>";
  61.  
  62. echo "</form>";
  63. }
  64.  
  65. ?>


Offline Dlol - 07/09/2011 18:31
Avatar van Dlol Lid Regel 14:

  1. if( $leden_groep != "" ){


Zoals ik zei, je moet tellen hoeveel rijen je terugkrijgt van mysql. Dit doe je door de functie mysql_num_rows($leden_groep) en niet door een mysql resultaat te gaan vergelijken met een lege string, dat is onzin. Zelfde geldt voor de rest.
Een kleine opfrissing van MySQL gebruiken met PHP kan geen kwaad denk ik!
Bedankt door: Skatelow
Offline Skatelow - 07/09/2011 19:09
Avatar van Skatelow Lid met wat proberen is het opgelost geraakt, bedankt allemaal! 
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.303s