admin-pagina

Status
Niet open voor verdere reacties.

yveshessels

Gebruiker
Lid geworden
9 jun 2007
Berichten
51
Ik ben bezig met een zelf gemaakt login-script met admin-pagina, alleen heb ik een vraagje bij mijn adminpagina:

adminpagina:

PHP:
<?php
include_once('config.php');
session_start();
if (!isset($_SESSION['admin'])) {
	print ("FOUT: Deze pagina is enkel voor admins");
	print ("<br /><a href=\"index.php\">login</a>");
} else {
?>
<html>
<head>
	<title>admin</title>
</head>
<body>
<?php
$query = "select naam, email from gebruiker";
$resultaat = mysql_query($query);
?>
<h2>de admin pagina</h2>
<h4>Welkom <?= $_SESSION['naam'] ?></h4>
<table border="1">
<?php
print ("<tr><th colspan=\"2\">aantal gebruikers:" . mysql_num_rows($resultaat) . "</th></tr>");

while (list($naam, $email) = mysql_fetch_row($resultaat)) {
	print ("<tr><td>" . $naam . "</td><td>" . $email . "</td></tr>");
}
?>
</table>
<a href="loguit.php">uitloggen</a>
</body>
</html>
<?php
}
?>

Op deze pagina krijg ik dus een tabel te zien met al de gebruikers en hun gegevens.
Wat ik nog wil bijmaken is, per rij een knop om een gebruiker te bewerken en te wissen. Hoe weet "de knop" telkens met welke gebruiker hij te maken heeft? M.a.w. hoe weet de wis-knop in rij 3 dat hij de gebruiker uit die rij moet wissen?
Ik weet hoe ik moet wissen en bewerken, maar ik weet niet hoe ik aan die knop wijsmaak welk record gewist moet worden.

Ik hoop dat ik het een beetje goed uitleg :p

Kan er mij iemand verder op weg helpen?
 
Laatst bewerkt:
Je zou een pagina delete_user.php kunnen maken met de volgende inhoud:
PHP:
$sql = "DELETE FROM gebruiker WHERE naam = '" .  $_GET['naam'] . "'";
if(mysql_query($sql, $connection)){
 header('Location: ' . $_SERVER['HTTP_REFERER'] . ')';
 exit;
} else {
 echo "Er is een probleem opgetreden met de query.";
}

Nu hoef je in je code alleen:
PHP:
print ("<tr><td>" . $naam . "</td><td>" . $email . "</td></tr>");

// te veranderen in:

print ("<tr><td>" . $naam . "</td><td>" . $email . "</td><td><a href=\"delete_user.php?naam=\"" . $naam . "\"><button>Verwijder</button></a></td></tr>");

Nu heb je als het goed is bij elke gebruiker de mogelijk deze te verwijderen met de klik op een link.

Eventueel is het nog te perfectioneren door er een beetje ajax in te mengen, maar dat is van ondergeschikt belang lijkt me.
 
Laatst bewerkt:
Ik hoop dat je voor elke gebruiker in de database ook een uniek nummer hebt. Deze zou ik hiervoor ook opvragen...

Vervolgens wil je in je output een formulier om elke rij heen hebben...
PHP:
<tr><form method='post' action='[de pagina]'>... </tr>
In het formulier zet je of in een hidden input de id van de user weer. Die kan je dan op de volgende pagina opvragen met (uitgaande van de naam van het input veldje == id)
PHP:
$_POST['id']

Anders kan je deze ook in de action kwijt, dan moet je hem opvragen met $_GET['id']
PHP:
<form action='verwerk.php?id=...'>

Binnen het formulier zet je dan natuurlijk een submit-knop neer met de volgende code (voor de verwijderknop)
PHP:
<input type='submit' name='action' value='verwijder'/>

Omdat de submit-knoppen binnen het formulier zitten, en je dit formulier post, 'weet' de volgende pagina welke gebruiker je aanroept...

Dit werkt beter dan de oplossing hierboven, omdat je naam waarschijnlijk niet uniek is in de database =)
Ten tweede, je kan zo ook meerdere submit-knoppen binnen het formulier hebben, die je op de verwerk.php pagina kan uitlezen...

if($_POST['action'] == 'verwijder'){ } else if(..){ enz...
 
Laatst bewerkt:
Ik had het met de naam gedaan aangezien ik de tabel-structuur niet ken. Je hebt gelijk over het feit dat de naam meerdere malen kan voorkomen. Dat is eigenlijk een heel groot probleem dat ik over het hoofd gezien heb.

Verder denk ik wel dat je beter gewoon met de $_GET in een link kan werken. Scheelt een hoop werk en tijd voor de pagina om te parsen en downloaden. Misschien moet de verwijderpagina nog wel beveiligd worden, maar dat is aan de gebruiker om te bepalen. Als de verwijder-pagina vanuit een beveiligde omgeving wordt aangeroepen en de link naar de pagina niet bekend gemaakt wordt bij 'het publiek' is daar geen probleem.

Ik zou echter NIET met allemaal aparte formulieren werken.
 
Ik doe het dan altijd weer anders:


PHP:
define('DEBUG_MODE', TRUE);

if(isset($_GET['user']) && ctype_digit($_GET['user']) && isset($_GET['delete']) && $_GET['delete'] == 1){

  $sQuery = "DELETE FROM users WHERE id_user = ".$_GET['user'];

  $rResult = mysql_query($rResult);

  if(!$rResult && DEBUG_MODE === TRUE){

      echo 'Iets is fout gegaan met de query, de query is: <br />'.$sQuery.' en de error de volgende: '.mysql_error();

  }else if(!$rResult && DEBUG_MODE === FALSE){

     echo 'Uw bewerking kon niet worden uitgevoerd.';
 
  }
}

// Hier de tabel en de rest van de rotzooi. Je verwijst in de tabel gewoon naar dezelfde pagina (overzicht.php, ofzo) maar dan met de toevoeging '?user=x&delete=1'.

Werkt erg praktisch. Je klikt, de pagina wordt herladen, de bewerking wordt uitgevoerd en het resultaat is direct zichtbaar.

Succes.
 
Inderdaad, dat is wel handig. Normaal gesproken werk ik met ajax, dan kun je het gewoon op een andere pagina uitvoeren en zonder de pagina te herladen toch het resultaat zien. Maar dit is inderdaad ook een prima oplossing.
 
ok, laten we stellen dat al de namen uniek zijn.

ik wil eens proberen met een link naar dezelfde pagina: (de methode van svu vind ik te complex, ik begrijp het nog niet helemaal)

PHP:
<?php
include_once('config.php');
session_start();
if (!isset($_SESSION['admin'])) {
	print ("FOUT: Deze pagina is enkel voor admins");
	print ("<br /><a href=\"index.php\">login</a>");
} else {
?>
<html>
<head>
	<title>admin</title>
</head>
<body>
<?php
$sql = "DELETE FROM gebruiker WHERE naam = '" .  $_GET['naam'] . "'";
if(mysql_query($sql)){
 header('Location: ' . $_SERVER['HTTP_REFERER']);
 exit;
} else {
 echo "Er is een probleem opgetreden met de query.";
}  

$query = "select naam, email from gebruiker";
$resultaat = mysql_query($query);
?>
<h2>de admin pagina</h2>
<h4>Welkom <?= $_SESSION['naam'] ?></h4>
<table border="1">
<?php
print ("<tr><th colspan=\"2\">aantal gebruikers:" . mysql_num_rows($resultaat) . "</th></tr>");

while (list($naam, $email) = mysql_fetch_row($resultaat)) {
	print ("<tr><td>" . $naam . "</td><td>" . $email . "</td><td><a href=\"admin.php?naam=\"" . $naam . "\"><button>Verwijder</button></a></td></tr>");
}
?>
</table>
<a href="loguit.php">uitloggen</a>
</body>
</html>
<?php
}
?>

dan krijg ik een error :

PHP:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\php-oefeningen\inlogsysteem\admin.php:14) in C:\xampp\htdocs\php-oefeningen\inlogsysteem\admin.php on line 17

Ik ben nog niet aan headers gekomen in mijn cursus, dus ik weet niet juist wat ermee moet gebeuren :p

Een header moet altijd boven staan in de pagina lees ik net, dus kan ik geen header gebruiken in mijn voorbeeld? kan het ook anders?
 
Laatst bewerkt:
Headers moeten verzonden worden voor álle output. Zelfs een spatie aan het begin van je document of iets dergelijks kan deze error oproepen.

In jouw geval output je:

HTML:
<html>
<head>
    <title>admin</title>
</head>
<body>

En daarna stuur je de header. Er zijn dan al andere headers verstuur (buiten jou om) en dan krijg je een probleem.

Het is heel eenvoudig op te lossen door:

PHP:
<html>
<head>
    <title>admin</title>
</head>
<body>
<?php
$sql = "DELETE FROM gebruiker WHERE naam = '" .  $_GET['naam'] . "'";
if(mysql_query($sql)){
 header('Location: ' . $_SERVER['HTTP_REFERER']);
 exit;
} else {
 echo "Er is een probleem opgetreden met de query.";
}  

$query = "select naam, email from gebruiker";
$resultaat = mysql_query($query);
?>

te vervangen door:

PHP:
<?php
$sql = "DELETE FROM gebruiker WHERE naam = '" .  $_GET['naam'] . "'";
if(mysql_query($sql)){
 header('Location: ' . $_SERVER['HTTP_REFERER']);
 exit;
} else {
 echo "Er is een probleem opgetreden met de query.";
}  

$query = "select naam, email from gebruiker";
$resultaat = mysql_query($query);
?> 
<html>
<head>
    <title>admin</title>
</head>
<body>
 
Het kan wel.. =)

Headers kunnen enkel VOOR de output op je scherm gebruikt worden. Dit is dus voor elke print/echo die je in je php-code zet EN voor elke HTML code die je al geplaatst hebt...

maak van jouw bovenkant het volgende maar eens...
PHP:
<?php
include_once('config.php');
session_start();
if (!isset($_SESSION['admin'])) {
    print ("FOUT: Deze pagina is enkel voor admins");
    print ("<br /><a href=\"index.php\">login</a>");
} else {

$sql = "DELETE FROM gebruiker WHERE naam = '" .  $_GET['naam'] . "'";
if(mysql_query($sql)){
 header('Location: ' . $_SERVER['HTTP_REFERER']);
} else {
 echo "Er is een probleem opgetreden met de query.";
}
?>
<html>
<head>
    <title>admin</title>
</head>
<body>

Hier voer je de HTML pas uit nadat de gebruiker wel/niet is gedelete...
De print bovenin maakt natuurlijk niet uit, deze wordt niet uitgevoerd als er gewoon als admin is ingelogd =)
 
Haha, boeit ook niet... Ben blij dat je dezelfde oplossing geeft als ik. Helpt m'n zelfvertrouwen...;):p
 
nu heb ik dus:

PHP:
<?php 
include_once('config.php'); 
session_start(); 
if (!isset($_SESSION['admin'])) { 
    print ("FOUT: Deze pagina is enkel voor admins"); 
    print ("<br /><a href=\"index.php\">login</a>"); 
} else { 

$sql = "DELETE FROM gebruiker WHERE naam = '" .  $_GET['naam'] . "'"; 
if(mysql_query($sql)){ 
 header('Location: ' . $_SERVER['HTTP_REFERER']); 
} else { 
 echo "Er is een probleem opgetreden met de query."; 
} 
?> 
<?php 
$query = "select naam, email from gebruiker"; 
$resultaat = mysql_query($query); 
?> 
<h2>de admin pagina</h2> 
<h4>Welkom <?= $_SESSION['naam'] ?></h4> 
<table border="1"> 
<?php 
print ("<tr><th colspan=\"2\">aantal gebruikers:" . mysql_num_rows($resultaat) . "</th></tr>"); 

while (list($naam, $email) = mysql_fetch_row($resultaat)) { 
    print ("<tr><td>" . $naam . "</td><td>" . $email . "</td><td><a href=\"admin.php?naam=\"" . $naam . "\"><button>Verwijder</button></a></td></tr>"); 
} 
?> 
</table> 
<a href="loguit.php">uitloggen</a> 
</body> 
</html> 
<?php 
} 
?>

als ik nu naar mijn adminpagina ga, kom ik terecht op mijn verwerk.php waar het inloggen wordt gecontroleerd: :(

PHP:
<?php session_start() ?>
<?php include_once('config.php'); ?>
<html>
	<head><title>verwerk</title></head>
	<?php
		$naam = $_POST['naam'];
		$pw = $_POST['pw'];
		$query_admin = "select naam from admin where naam = '$naam'";
		$admin = mysql_query($query_admin);
		$nu = $date = date( "d/m/Y", time() );
		//$query = mysql_query("select * from gebruiker where naam = \"$naam\"");
		//$query2 = mysql_query("select pw from gebruiker where naam = \"$naam\"");
		$query = mysql_query("select naam, pw from gebruiker where naam = '$naam' and pw = '$pw'");
		if (mysql_num_rows($query)==0) {
				print ("<h3>Het inloggen is mislukt</h3>");
		} else {
			$row = mysql_fetch_assoc($query);
			$_SESSION['naam'] = $naam;
			if (mysql_num_rows($admin)==0) {
			} else {
				print ("Welkom admin<br />");
				print ("<a href=\"admin.php\">admin pagina</a>");
				$_SESSION['admin'] = $naam;
			}
	?>
	<body>
	<h3>Welkom <?= $naam ?></h3>
	<a href="bewerk.php">bewerk</a>
	<a href="loguit.php">loguit</a>
	<br /><br />
	<a href="test.php">test</a>
	</body>
	<?php
		}
		?>
</html>

dus op de een of andere manier (de header denk ik ) keer ik een pagina terug ipv op dezelfde pagina te blijven ...
 
Laatst bewerkt:
admin.php
bewerk.php
config.php
index.php
logout.php
registreer.php
test.php
verwerk.php
verwerk2.php

zo noemen mijn paginas

in bijlage zitten ze allemaal

Het is nog lang niet af, ik ben nog niet zo lang bezig met php...

Nu zit ik nog steeds met mijn probleem :s
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan