Hoi PHPers 8-).
Ik heb een tijdje niks van me laten horen, dit omdat ik even ben wezen expirimenteren met PHP (zonder MySQL).

Ik ben nu echter bezig met iets, en heb een vraag:
Als je een registreersysteem hebt, hoe laat je dan de 3 nieuwste gebruikers zien?
Ik weet dat je de hoogste IDs nodig hebt (bijv. 5, 4 en 3) en dat het waarschijnlijk met de COUNT functie (DSC ofzo) moet doen.
Want hij moet de IDs van hoog naar laag tellen.
Maar als je dan gebruikt:

<?php
$sql = "
    SELECT COUNT(id) DSC id
    FROM gebruikers
";

if(!$res = mysql_query($sql))
{
    trigger_error(mysql_error().'<br />In query: '.$sql);
}
else
{
    $row = mysql_fetch_assoc($res);
    echo $row['naam'];
}
?> 


Wat moet ik doen dat de hoogste 3 IDs (5, 4, 3) worden weeergegeven?

Alvast bedankt,
Jeroen
@Lode
Ik heb dat stuk uit een PHP boek gehaald (PHP 5 voor gevorderden).


En nu dit probleem, geen errors maar hij voegt niks toe aan de database:
Dit is m'n script:
<html>
<head>
<title>Gastenboek</title>
</head>
<body>
<center>
Welkom bij mijn Gastenboek!
<hr>
[code]<?php
error_reporting(E_ALL);

$db = mysql_connect("localhost","********","********");
mysql_select_db("**********", $db);

if (isset($_POST['verzonden'])) { 				// afhandelen

        $fouten = array(); // fouten opslaan in een array

if (!isset($_POST["naam"]) OR empty($_POST["naam"])) {		// naam valideren
		$fouten[] = 'naam';
		} else {
			$sql = "INSERT INTO
				gastenboek (naam)
			VALUES ('".mysql_real_escape_string($_POST["naam"])."')
";
		}

if (!eregi('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})
$', $_POST['email'])) {					// email valideren
		$fouten[] = 'email';
} else { 
	$sql1 = "INSTERT INTO
		gastenboek (email)
	VALUES ('".mysql_real_escape_string($_POST["email"])."')
";
}

if (!isset($_POST['bericht']) OR empty($_POST["bericht"])) {	// bericht valideren
		$fouten[] = 'bericht';
} else {
	$sql2 = "INSTERT INTO
		gastenboek (bericht)
	VALUES ('".mysql_real_escape_string($_POST["bericht"])."'))
";
}

if (empty($fouten)) { 						// dus als de array met de fouten leeg is
								// willen we dat graag POSITIEF laten weten
			echo "Bericht verzonden!<br>Klik hier om terug te gaan";
} else { 							// en als het niet gelukt is willen we dat ook laten weten!
			echo "Er zijn problemen gevonden voor de volgende velden:<ul>";

			foreach ($fouten as $fout) {
			echo "<li>$fout</li>\n";
}
			echo "</ul>";
}

} 								// einde van afhandeling
?>

<table>
<form method="post">
<tr><td>Naam:</td><td><input type="text" name="naam"></td></tr>
<tr><td>E-mail:</td><td><input type="text" name="email"></td></tr>
<tr><td>Bericht:</td><td><input type="text" width="50" rows="10" name="bericht"></td></tr>
<tr><td><center><input type="submit" name="verzenden"><input type="reset" name="reset"></center></td></tr>
</form>
</table>
<hr>
<small>Je IP-adress word ook weergegeven bij je bericht!</small>
</center>
</body>
</html>[/code]

Hulp van de Pro's? :)
Je stelt wel query's op, maar je voert ze niet uit.
Hoe voor ik ze dan uit?
(Sorry, beetje stomme vraag maar ben laatste beetje minder gaan PHPen en probeer ut nu weer op te pakken + incl veel bij te leren..)
Je doet bijvoorbeeld dit:

<?php
     $sql = "INSERT INTO
                gastenboek (naam)
            VALUES ('".mysql_real_escape_string($_POST["naam"])."')
?>

maar daarna zou je nog moeten doen:

<?php
    if (!mysql_query ($sql)) {
        // foutmelding
    }
?>
Mensen op andere forums zeggen dat er niks klopt van mijn scriptje, dus heb ik een nieuwe gemaakt (die waarschijnlijk nog fouter is):

<html>
<head>
<title>Gastenboek</title>
</head>
<body>
<center>
Welkom bij mijn Gastenboek!
<hr>
[code]<?php
error_reporting(E_ALL);

$db = mysql_connect("localhost","*******","*******");
mysql_select_db("*******", $db);

if (isset($_POST['verzonden'])) { 				// afhandelen

        $fouten = array(); // fouten opslaan in een array

if (!isset($_POST["naam"]) OR empty($_POST["naam"])) {		// naam valideren
		$fouten[] = 'naam';
		} 

if (!eregi('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})
$', $_POST['email'])) {					// email valideren
		$fouten[] = 'email';
} 

if (!isset($_POST['bericht']) OR empty($_POST["bericht"])) {	// bericht valideren
		$fouten[] = 'bericht';
}

if (empty($fouten)) { 						// dus als de array met de fouten leeg is
								// willen we dat graag POSITIEF laten weten
			echo "Bericht verzonden!<br>Klik hier om terug te gaan";
} else { 							// en als het niet gelukt is willen we dat ook laten weten!
			echo "Er zijn problemen gevonden voor de volgende velden:<ul>";

			foreach ($fouten as $fout) {
			echo "<li>$fout</li>\n";
}
			echo "</ul>";
}
 								// einde van afhandeling
?>

<table>
<form method="post">
<tr><td>Naam:</td><td><input type="text" name="naam"></td></tr>
<tr><td>E-mail:</td><td><input type="text" name="email"></td></tr>
<tr><td>Bericht:</td><td><input type="text" width="50" rows="10" name="bericht"></td></tr>
<tr><td><center><input type="submit" name="verzenden"><input type="reset" name="reset"></center></td></tr>
</form>
</table>
<hr>
<small>Je IP-adress word ook weergegeven bij je bericht!</small>
</center>
<?php
} else {
			$sql = "INSERT INTO
				gastenboek (naam, email, bericht)
			VALUES ('".mysql_real_escape_string($_POST["naam"])."', '".mysql_real_escape_string($_POST["email"]).", '".mysql_real_escape_string($_POST["bericht"])."'')";
		}
	?>

<table>
<form method="post">
<tr><td>Naam:</td><td><input type="text" name="naam"></td></tr>
<tr><td>E-mail:</td><td><input type="text" name="email"></td></tr>
<tr><td>Bericht:</td><td><input type="text" width="50" rows="10" name="bericht"></td></tr>
<tr><td><center><input type="submit" name="verzenden"><input type="reset" name="reset"></center></td></tr>
</form>
</table>
<hr>
<small>Je IP-adress word ook weergegeven bij je bericht!</small>
</center>
</body>
</html>
[/code]
Ik ben er even ingedoken en heb je script herschreven, nu wat netter:

<?php
	ini_set ('display_errors', 1);
	error_reporting (E_ALL);

	$errors = array ();
	$messages = array ();
	$required = array ('naam', 'email', 'bericht');
	
	function show_info ($array) {
		if (!is_array ($array)) return;
		$html = '';
		if (!empty ($array)) {
			$html .= '<ul>';
			foreach ($array as $value) {
				$html .= '<li>' . $value . '</li>';
			}
			$html .= '</ul>';
		}
		return $html;
	}
	
	if ($_SERVER['REQUEST_METHOD'] == 'POST') {
		foreach ($required as $field) {
			$value = trim ($_POST[$field]);
			if (empty ($value)) {
				array_push ($errors, 'U bent ' . $field . ' vergeten in te vullen');
			}
			if ($field == 'email') {
				if (!preg_match ('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/', $_POST[$field])) {
					array_push ($errors, 'Ongeldig e-mailadres: ' . $_POST['email']);
				}
			}
		}
		if (empty ($errors)) {
			$sql = "
				INSERT INTO gastenboek
				(
					naam,
					email,
					bericht
				)
				VALUES
				(
					'" . mysql_real_escape_string ($_POST['naam']) . "',
					'" . mysql_real_escape_string ($_POST['email']) . "',
					'" . mysql_real_escape_string ($_POST['bericht']) . "'
				)
				";
			if (mysql_query ($sql)) {
				if (mysql_affected_rows () == 1) {
					array_push ($messages, 'Bericht geplaatst');
				}
				else {
					array_push ($errors, 'Bericht niet geplaatst');
				}
			}
			else {
				array_push ($errors, 'Fout bij het uitvoeren van de query:');
				array_push ($errors, '<pre>' . htmlentities ($sql) . '<pre>');
			}
		}
	}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Jan Koehoorn | Verbeterd script voor Jeroen</title>
	<style type="text/css" media="screen">
		div#container	{margin: 0 auto; width: 800px; background: #fd9; padding: 10px;}
		label,
		input,
		li				{font: 12px Verdana, Arial, Helvetica, sans-serif;}
		form p			{overflow: hidden; width: 100%;}
		label			{float: left; width: 100px; text-align: right; padding-right: 10px; cursor: pointer;}
	</style>
</head>

<body>
	<div id="container">
		<?php
			echo show_info ($errors);
			echo show_info ($messages);
		?>
		<form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
			<p>
			<label for="naam">Naam:</label>
			<input type="text" id="naam" name="naam" value="<?php if (isset ($_POST['naam'])) echo $_POST['naam']; ?>" />
			</p>
			<p>
			<label for="email">E-mail:</label>
			<input type="text" id="email" name="email" value="<?php if (isset ($_POST['email'])) echo $_POST['email']; ?>" />
			</p>
			<p>
			<label for="bericht">Bericht:</label>
			<input type="text" id="bericht" name="bericht" value="<?php if (isset ($_POST['bericht'])) echo $_POST['bericht']; ?>" />
			<input type="submit" value="verzenden">
			</p>
		</form>
	</div>
</body>
</html>
Hey,
bedankt :)

Maar wat betekend dit:
Warning: ini_set() has been disabled for security reasons in /usr/export/www/vhosts/funnetwork/hosting/frosting/form.php on line 2
?
Dat je host geen ini_set toestaat. Dat is overigens wel de eerste keer dat ik dat meemaak. Maar goed, haal die regel 2 maar weg, dan werkt het ook wel.

Reageren