Ben net begonnen met mysql, en ben nu bezig met een klein gastenboekje.

Mijn probleem:

Waarom mislukt deze query steeds:


<?php
		$insert = "INSERT INTO gastenboek
				   VALUES (NULL,
				   		   '".$onderwerp."',
						   NOW(),
						   '".$naam."',
						   '".$email."',
						   '".$bericht."')";
						   
		$voerin = mysql_query($insert) or die(mysql_error());
		
		if($voerin)
		{
        	$melding2 = 'Succesvol toegevoegd';
        }
		else 
		{
        	$melding2 = 'Door een technische storing kon het bericht niet worden toegevoegd';
        }
?>


de error:
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

		$insert = "INSERT INTO
						gastenboek(
							onderwerp,
							datum,
							naam,
							email,
							bericht)
				   VALUES (
				   		'".$onderwerp."',
						NOW(),
						'".$naam."',
						'".$email."',
						'".$bericht."')
					UNIQUE (
						bericht)";


Dit werkt dus niet

en is dit een goede methode om de berichten te weergeven:

<?php
$selecteer = "SELECT * FROM gastenboek ORDER BY id DESC";
$res = mysql_query($selecteer);

if (mysql_num_rows($res) >= 1)
{
while ($row = mysql_fetch_array($res))
{
$output['naam'] = htmlentities($row['naam']);
$output['email'] = htmlentities($row['email']);
$output['datum'] = htmlentities($row['datum']);
$output['onderwerp'] = htmlentities($row['onderwerp']);
$output['bericht'] = htmlentities($row['bericht']);
$output['bericht'] = nl2br($output['bericht']);

echo '<br /><b>'.$output['onderwerp'].'</b><br />';

if($output['email'] == 'niet opgegeven')
{
echo '<nolink>'.$output['naam'].'</nolink> ('.$output['datum'].')';
}
else
{
echo '<a href="mailto:'.$output['email'].'">'.$output['naam'].'</a> ('.$output['datum'].')<br />';
}

echo $output['bericht'].'<br />';
}
}
?>
UNIQUE is een eigenschap van een kolom. Dat is niet iets wat de ene keer wel van toepassing is en de andere keer niet. Je gebruikt dit dus bij het aanmaken van de kolom of het wijzigen van de kolom. En niet bij het toevoegen van gegevens.

Opmerking: gebruik htmlentities() daar waar je het nodig hebt. En niet om nog een nieuw setje variabelen aan te maken, dat is volkomen overbodig. Vreet alleen maar geheugen.
<?php
echo htmlentities($row['onderwerp']);
?>
Vergeet die $output.
Ah zo, oke, thx Frank,

Maar hoe krijg ik die unique nu in mijn database?

Ik heb in PHPMyAdmin al UNIQUE bericht geprobeerd, maar toen had ik een error in mijn mysql syntax

[edit]
gelukt:

ALTER TABLE gastenboek ADD UNIQUE (
bericht
)
[/edit]
Allemaal leuk en aardig die UNIQUE, maar als ik nou deze tabel aan maak:

<?php
CREATE TABLE blaat (
id int(11) auto_increment primary key,
naam varchar(200) not null,
leeftijd int(3) not null,
unique key naam);
?>

En iemand geeft later een naam op die al bestaat hoe vang ik die error op? Moet dat zo:

<?php
$sql = mysql_query("INSERT INTO blaat (naam) VALUES (".$_POST['naam'].")") OR DIE("Deze naam bestaat al!");
?>

Ik zou niet weten hoe het anders moet.. :)
Nee, dan krijg je een error terug van mysql met een nummertje erbij.

Deze kun je opvangen met een functie, en een gepaste error geven
Ik heb nu dit:

<?php
$voerin = mysql_query($insert) or die(mysql_error());

if(mysql_errno($voerin) == 1062)
{
$melding2 = 'Precies ditzelfde bericht is al eerder gepost, dit kan geen toeval zijn.';
}
elseif($voerin)
{
$melding2 = 'Succesvol toegevoegd';
unset($_SESSION['contactform']);
}
else
{
$melding2 = 'Door een technische storing kon het bericht niet worden toegevoegd';
}
?>

maar als ik een dubbel bericht invoer krijg ik:

Duplicate entry 'Dit is een test om te kijken of alles werkt' for key 'bericht'

en geen nette error...
Logisch...

Regel 2: or die(mysql_error());

Jouw script komt dus nooit toe aan de nette foutafhandeling, alleen de brute 'or die()'.

Het is al laat ;)
Zonder die or die, krijg ik: Door een technische storing....

Reageren