Dubbele invoer melding
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
/******************
*Initialisatie
*******************/
$_srv = $_SERVER['PHP_SELF'];
/******************
* autoload
******************/
function __autoload($className) {
require_once "../klassen/$className.class.php";
}
include("../connections/pdo.inc.php");
include("../php_lib/menu.inc.php");
try
{
// toon formulier
if (! isset($_POST["submit"])) // geen formulier
{
// titel
$_output .= "<form id='club' method='post' action='$_srv' enctype='multipart/form-data'><fieldset><legend>Club toevoegen</legend><ol><li>";
// veld stamnummer
$_output.= "
<label>Stamnummer</label><input type='text' name='Stamnummer' size='10' placeholder='AA-0000' autofocus='autofocus' required/></li><li>";
// veld naam
$_output.= "
<label>Naam</label><input type='text' name='Naam' size='45' placeholder='Officiële clubnaam' required/></li><br>";
$_output.= "<button type='submit' name='submit'>Toevoegen</button>
</fieldset>
</form>";
}
else
{
if (!isset($_POST["$_srv"])){
$_stamnummer = addslashes($_POST["Stamnummer"]);
$_naam = addslashes($_POST["Naam"]);
// query
{
$_resultOK = $_PDO -> query("INSERT INTO t_club(d_stamnummer, d_naam) VALUES ('$_stamnummer','$_naam');");
$_output = htmlentities("$_POST[Naam] toegevoegd");
}
}
}
// Object instantieren
$_smarty = new My_smarty();
// We kennen de variabelen toe
$_smarty->assign('menuh',menu('H'));
$_smarty->assign('menuv',menu(1));
$_smarty->assign('inhoud', $_output);
// display it
$_smarty->display('test.tpl');
}
catch (myException $e)
{
log("../log/logfile.csv");
errorMessage();
}
?>
/******************
*Initialisatie
*******************/
$_srv = $_SERVER['PHP_SELF'];
/******************
* autoload
******************/
function __autoload($className) {
require_once "../klassen/$className.class.php";
}
include("../connections/pdo.inc.php");
include("../php_lib/menu.inc.php");
try
{
// toon formulier
if (! isset($_POST["submit"])) // geen formulier
{
// titel
$_output .= "<form id='club' method='post' action='$_srv' enctype='multipart/form-data'><fieldset><legend>Club toevoegen</legend><ol><li>";
// veld stamnummer
$_output.= "
<label>Stamnummer</label><input type='text' name='Stamnummer' size='10' placeholder='AA-0000' autofocus='autofocus' required/></li><li>";
// veld naam
$_output.= "
<label>Naam</label><input type='text' name='Naam' size='45' placeholder='Officiële clubnaam' required/></li><br>";
$_output.= "<button type='submit' name='submit'>Toevoegen</button>
</fieldset>
</form>";
}
else
{
if (!isset($_POST["$_srv"])){
$_stamnummer = addslashes($_POST["Stamnummer"]);
$_naam = addslashes($_POST["Naam"]);
// query
{
$_resultOK = $_PDO -> query("INSERT INTO t_club(d_stamnummer, d_naam) VALUES ('$_stamnummer','$_naam');");
$_output = htmlentities("$_POST[Naam] toegevoegd");
}
}
}
// Object instantieren
$_smarty = new My_smarty();
// We kennen de variabelen toe
$_smarty->assign('menuh',menu('H'));
$_smarty->assign('menuv',menu(1));
$_smarty->assign('inhoud', $_output);
// display it
$_smarty->display('test.tpl');
}
catch (myException $e)
{
log("../log/logfile.csv");
errorMessage();
}
?>
In m'n php my admin heb ik aangegeven dat het stamnummer uniek moet zijn als ik echter een stamnummer probeer in te geven dat er al in staat krijg ik volgende melding
Serverfout
Er is een fout opgetreden toen de website http://bert.sna-webo.be/scripts/club_toevoegen.php probeerde op te halen. De server kan offline zijn wegens onderhoud of kan onjuist zijn geconfigureerd.
Hier zijn enkele suggesties:
Laad deze webpagina later opnieuw.
Het record wordt uiteraard niet toegevoegd aan de database maar ik wil dit om een deftige manier laten tonen aan m'n gebruiker met bv. als melding.
Stamnummer bestaat al, gelieve een correct stamnummer in te voeren.
Hoe doe ik dit?
Voeg bovenaan eens toe:
Ik raad deze code niet aan in productieomgeving, maar in de logfiles kan je de fouten ook vinden. Of je kan deze code alleen uitvoeren als je een beeld IP-adres hebt.
Gewijzigd op 02/06/2013 09:34:27 door - Ariën -
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'AA-0127' for key 'd_stamnummer'' in /home/sna/domains/sna-webo.be/public_html/bert/scripts/club_toevoegen.php:49 Stack trace: #0 /home/sna/domains/sna-webo.be/public_html/bert/scripts/club_toevoegen.php(49): PDO->query('INSERT INTO t_c...') #1 {main} thrown in /home/sna/domains/sna-webo.be/public_html/bert/scripts/club_toevoegen.php on line 49
M'n vraag is hoe ik in http://bert.sna-webo.be/scripts/club_toevoegen.php gewoon een melding zelf kan maken
Stamnummer bestaat al, gelieve een correct stamnummer in te voeren. indien er een stamnummer wordt ingegeven dat al bestaat of nog beter vooraleer er op de knop toevoegen wordt gedrukt ineens wordt weergegeven indien dit stamnummer al voorkomt in de database.
Op regel 48 roep jij de functie PDO:query() aan. In jouw code ga je er van uit dat deze functie altijd slaagt en dat je een geldig 'PDOStatement object' terug krijgt.
als je nu eens op http://php.net/manual/en/pdo.query.php kijkt onder het kopje 'Return Values' dan kun je daar lezen dat er twee dingen terug gegeven kunnen worden.
je kunt je script dus heel eenvoudig uitbreiden door $_resultOK die ik dan maar liever $result zou noemen eerst te testen op false:
Als je dus met exceptions werkt zal je het zo moeten doen:
Ok, ik wist dat PDO zelf een exception genereerde. bedankt voor je aanvulling.
is die errormode eenvoudig te wijzigen?