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.
<form method="post" action="<?=$_SERVER['PHP_SELF']?>?lid=<? echo $_GET['lid']; ?>">
<?php
include "sql.php";
if(isset($_POST['uitnodigengroep'])) //Als er op verzenden is geklikt
{
//sql om verzoeken op te halen
$uitnodigingen_nakijken = mysql_query("SELECT * FROM groepen_verzoeken WHERE eigenaar = '" . $_SESSION['gebruiker'] . "'");
//---- NAKIJKEN OF UITNODIGING VOOR DEZE GROEP AL IS VERSTUURD NAAR DEZE GEBRUIKER ----
// ALS type = aanvraag EN groep = POST groep EN lid = POST lid EN eigenaar = lid
while ($uitnodigingen = mysql_fetch_array($uitnodigingen_nakijken))
{
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
{
//sql leden van groep ophalen
$leden_groep = mysql_query("SELECT lid FROM groepen_leden WHERE groep ='" . $_POST['groep'] . "'");
while ($leden = mysql_fetch_array($leden_groep))
{
if(!(in_array($_POST['lid'], $leden))) //als deze persoon nog niet in de groep zit
{
$aanvraag = "INSERT INTO groepen_verzoeken (type, groep, lid, eigenaar)
VALUES ('uitnodiging','$_POST[groep]','$_GET[lid]','$_SESSION[gebruiker]')";
$aanvragen = mysql_query($aanvraag) or die(mysql_error());
echo "<script language=javascript>alert('Je hebt " . $_POST['lid'] . " uitgenodigd in " . $_POST['groep'] . "')</script>";
}
else{ //als persoon al in groep zit
echo "<script language=javascript>alert('Je kan " . $_POST['lid'] . " niet uitgenodigen in " . $_POST['groep'] . " omdat hij al lid is van deze groep.')</script>";
}
}
}
else{
echo "<script language=javascript>alert('Je kan " . $_POST['lid'] . " niet uitgenodigen in " . $_POST['groep'] . " omdat je al een uitnodiging hebt verstuurd.')</script>";
}
}
}
else
{
//Groepen oproepen die gebruiker bezit
$groepen = mysql_query ("SELECT naam FROM groepen_info WHERE eigenaar = '" . $_SESSION['gebruiker'] . "'");
echo "<font size = '+1'>" . $_GET['lid'] . " uitnodigen in </font>";
echo " <select name='groep'>";
while ($rij = mysql_fetch_array($groepen))
{
echo "<option value=" . $rij['naam'] . ">" . $rij['naam'] . "</option>";
}
echo " </select><br/>";
echo "<input type='hidden' name='lid' value='" . $_GET['lid'] . "'>";
echo "<input type='submit' name='uitnodigengroep' value='Uitnodigen'>";
echo "</form>";
}
?>
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
{
//sql leden van groep ophalen
$leden_groep=mysql_query("SELECT lid FROM groepen_leden WHERE groep ='".$_POST['groep']."'");
echo"<script language=javascript>alert('Je hebt ".$_POST['lid']." uitgenodigd in ".$_POST['groep']."')</script>";
}
else{//als persoon al in groep zit
echo"<script language=javascript>alert('Je kan ".$_POST['lid']." niet uitgenodigen in ".$_POST['groep']." omdat hij al lid is van deze groep.')</script>";
}
}
}
else{
echo"<script language=javascript>alert('Je kan ".$_POST['lid']." niet uitgenodigen in ".$_POST['groep']." omdat je al een uitnodiging hebt verstuurd.')</script>";
}
}
}
else
{
//Groepen oproepen die gebruiker bezit
$groepen=mysql_query("SELECT naam FROM groepen_info WHERE eigenaar = '".$_SESSION['gebruiker']."'");
echo"<font size = '+1'>".$_GET['lid']." uitnodigen in </font>";
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
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.
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.
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.
'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:
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
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).
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
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
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
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
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:
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..
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:
$query = "SELECT * FROM groepen_verzoeken WHERE eigenaar='". $_SESSION['eigenaar'] . "' AND bestemmeling='". $_POST['bestemmeling'] . "';";
$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:
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!
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
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!