stored procedure selectbox
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
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
<?php
error_reporting(-1);
ini_set('display_errors', 1);
include '/verbinding.php';
include '/logincheck.php';
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
<html>
<form method="post" action="adresversturen.php">
<p>land:
<select name="landid">
<?php
$sql = "{CALL spOpdrachtgeverBox (@Opdrachtgeverid=:opdrachtgever)}";
$stmt = $db->prepare($sql);
$opdrachtgeverid = $_SESSION['relatie'];
$stmt->bindParam(':opdrachtgever',$opdrachtgeverid, PDO::PARAM_STR);
$stmt->execute();
foreach ($db->query($sql) as $row) {
echo printf('<option value="%d">%s</option>', $row['id'], $row['naam']);
}
?>
</select>
</p>
<p><input type="submit" value="verzenden" ></p>
</form>
</html>
error_reporting(-1);
ini_set('display_errors', 1);
include '/verbinding.php';
include '/logincheck.php';
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
<html>
<form method="post" action="adresversturen.php">
<p>land:
<select name="landid">
<?php
$sql = "{CALL spOpdrachtgeverBox (@Opdrachtgeverid=:opdrachtgever)}";
$stmt = $db->prepare($sql);
$opdrachtgeverid = $_SESSION['relatie'];
$stmt->bindParam(':opdrachtgever',$opdrachtgeverid, PDO::PARAM_STR);
$stmt->execute();
foreach ($db->query($sql) as $row) {
echo printf('<option value="%d">%s</option>', $row['id'], $row['naam']);
}
?>
</select>
</p>
<p><input type="submit" value="verzenden" ></p>
</form>
</html>
stored procedure is:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
- =============================================
ALTER PROCEDURE [dbo].[spOpdrachtgeverBox]
-- Add the parameters for the stored procedure here
@Opdrachtgeverid int=0
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT id, naam FROM contactpersonen where opdrachtgever_id = @Opdrachtgeverid
order by naam
END
ALTER PROCEDURE [dbo].[spOpdrachtgeverBox]
-- Add the parameters for the stored procedure here
@Opdrachtgeverid int=0
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT id, naam FROM contactpersonen where opdrachtgever_id = @Opdrachtgeverid
order by naam
END
nu heb ik er ook eentje gemaakt met een gewone select query er in en zonder paramater voor een andere select box maar deze werkt perfect deze execute ik dan ook inplaats van hem een call te laten doen daar gebruik ik dit script voor.
Code (php)
1
2
3
4
5
2
3
4
5
$sql = "execute spLandBox";
foreach ($db->query($sql) as $row) {
echo printf('<option value="%d">%s</option>', $row['id'], $row['naam']);
}
foreach ($db->query($sql) as $row) {
echo printf('<option value="%d">%s</option>', $row['id'], $row['naam']);
}
maar nu wil ik die graag werken hebben die met die call het hoeft van mij geen call te wezen mag ook execute maar dan zit je met de bindparam na mijn weten.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)");
$value = 'hello';
$stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000);
// call the stored procedure
$stmt->execute();
print "procedure returned $value\n";
?>
$stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)");
$value = 'hello';
$stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000);
// call the stored procedure
$stmt->execute();
print "procedure returned $value\n";
?>
[Bron: http://php.net/manual/en/pdo.prepared-statements.php (Voorbeeld #5)]
Gewijzigd op 12/04/2012 12:10:52 door Jurgen B
dat weet ik het kan op meerdere maniers je kan namelijk ook op naam koppelen. dat heb ik bij deze gedaan maar dan krijg je hem nog niet de uitslag in sellectbox en daar gaat het om
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$sql = "{CALL spOpdrachtgeverBox (@Opdrachtgeverid=:opdrachtgever)}";
$stmt = $db->prepare($sql);
//dit is ook overbodig overigens, kan je direct in de bindparam zetten...
$opdrachtgeverid = $_SESSION['relatie'];
$stmt->bindParam(':opdrachtgever',$opdrachtgeverid, PDO::PARAM_STR);
$stmt->execute();
foreach ($db->query($sql) as $row) {
echo printf('<option value="%d">%s</option>', $row['id'], $row['naam']);
}
?>
$sql = "{CALL spOpdrachtgeverBox (@Opdrachtgeverid=:opdrachtgever)}";
$stmt = $db->prepare($sql);
//dit is ook overbodig overigens, kan je direct in de bindparam zetten...
$opdrachtgeverid = $_SESSION['relatie'];
$stmt->bindParam(':opdrachtgever',$opdrachtgeverid, PDO::PARAM_STR);
$stmt->execute();
foreach ($db->query($sql) as $row) {
echo printf('<option value="%d">%s</option>', $row['id'], $row['naam']);
}
?>
$db is een PDO object. Daar doe je een prepare op en die geeft een PDOStatement terug. Met dat PDOStatement object ($stmt) voer je de rest uit (bindparam en execute), maar dan opeens probeer je de gegevens uit het PDO object te halen... dat gaat niet werken. Wat je zou moeten doen is
PHP Warning: Illegal string offset 'id' in C:\inetpub\wwwroot\login1\test.php on line 28
PHP Warning: Illegal string offset 'naam' in C:\inetpub\wwwroot\login1\test.php on line 28
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<select name="landid">
<?php
$sql = "{CALL spOpdrachtgeverBox (@Opdrachtgeverid=:opdrachtgever)}";
$stmt = $db->prepare($sql);
$opdrachtgeverid = $_SESSION['relatie'];
$stmt->bindParam(':opdrachtgever',$opdrachtgeverid, PDO::PARAM_STR);
$stmt->execute();
foreach ($stmt->fetch(PDO::FETCH_ASSOC) as $row) {
echo printf('<option value="%d">%s</option>', $row['id'], $row['naam']);
}
?>
</select>
<?php
$sql = "{CALL spOpdrachtgeverBox (@Opdrachtgeverid=:opdrachtgever)}";
$stmt = $db->prepare($sql);
$opdrachtgeverid = $_SESSION['relatie'];
$stmt->bindParam(':opdrachtgever',$opdrachtgeverid, PDO::PARAM_STR);
$stmt->execute();
foreach ($stmt->fetch(PDO::FETCH_ASSOC) as $row) {
echo printf('<option value="%d">%s</option>', $row['id'], $row['naam']);
}
?>
</select>
waar zit dit hem in ik heb namelijk nog nooit waring gehad met php moet ik nu iets in me php zelf te veranderen. als ik mijn php versie uit ontwikkelings mode haal dan krijg ik wel wat er in maar dat is alleen een 1 of niets
Toevoeging op 12/04/2012 14:07:47:
probleem gevonden het is fetchall weer bedankt
Gewijzigd op 12/04/2012 13:54:39 door gerhard timmerman
Anyway, het werkt nu dus wel, daar ging het om :-)
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
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
<?php
error_reporting(-1);
ini_set('display_errors', 1);
include '/verbinding.php';
include '/logincheck.php';
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
<html>
<form method="post" action="adresversturen.php">
<p>straatnaam: <input type="text" name="straat" /></p>
<p>huisnummer: <input type="text" name="huisnummer" /></p>
<p>postcode: <input type="text" name="postcode" /></p>
<p>plaats: <input type="text" name="plaats" /></p>
<p>land:
<select name="landid">
<?php
$sql = "execute spLandBox";
foreach ($db->query($sql) as $row) {
echo printf('<option value="%d">%s</option>', $row['id'], $row['naam']);
}
?>
</select>
</p>
<p>Contactpersoon voor adres
<select name="opdrachtid">
<?php
$sql = "{CALL spOpdrachtgeverBox (@Opdrachtgeverid=:opdrachtgever)}";
$stmt = $db->prepare($sql);
$opdrachtgeverid = $_SESSION['relatie'];
$stmt->bindParam(':opdrachtgever',$opdrachtgeverid, PDO::PARAM_STR);
$stmt->execute();
foreach ($stmt->fetchall(PDO::FETCH_ASSOC) as $row) {
echo printf('<option value="%d">%s</option>', $row['id'], $row['naam']);
}
?>
</select>
</p>
<p>opmerkingen:</p>
<TEXTAREA Name="opmerking" rows="6" cols="50"></TEXTAREA>
<p><input type="submit" value="verzenden" ></p>
</form>
</html>
error_reporting(-1);
ini_set('display_errors', 1);
include '/verbinding.php';
include '/logincheck.php';
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
<html>
<form method="post" action="adresversturen.php">
<p>straatnaam: <input type="text" name="straat" /></p>
<p>huisnummer: <input type="text" name="huisnummer" /></p>
<p>postcode: <input type="text" name="postcode" /></p>
<p>plaats: <input type="text" name="plaats" /></p>
<p>land:
<select name="landid">
<?php
$sql = "execute spLandBox";
foreach ($db->query($sql) as $row) {
echo printf('<option value="%d">%s</option>', $row['id'], $row['naam']);
}
?>
</select>
</p>
<p>Contactpersoon voor adres
<select name="opdrachtid">
<?php
$sql = "{CALL spOpdrachtgeverBox (@Opdrachtgeverid=:opdrachtgever)}";
$stmt = $db->prepare($sql);
$opdrachtgeverid = $_SESSION['relatie'];
$stmt->bindParam(':opdrachtgever',$opdrachtgeverid, PDO::PARAM_STR);
$stmt->execute();
foreach ($stmt->fetchall(PDO::FETCH_ASSOC) as $row) {
echo printf('<option value="%d">%s</option>', $row['id'], $row['naam']);
}
?>
</select>
</p>
<p>opmerkingen:</p>
<TEXTAREA Name="opmerking" rows="6" cols="50"></TEXTAREA>
<p><input type="submit" value="verzenden" ></p>
</form>
</html>
en
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
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
<?php
error_reporting(-1);
ini_set('display_errors', 1);
include '/logincheck.php';
include '/verbinding.php';
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "{call spAdresToevoegen (@Relatieid=:relatieid,@Plaats=:plaats,@Straat=:straat,@Huisnummer=:huisnummer,@Postcode=:postcode,@Landid=:landid,@opmerking=:opmerking,@Contactid=:opdrachtgever)}";
$stmt = $db->prepare($sql);
$relatieid = $_SESSION['relatie'];
$straat = $_POST['straat'];
$huisnummer = $_POST['huisnummer'];
$postcode = $_POST['postcode'];
$plaats = $_POST['plaats'];
$landid = $_POST['landid'];
$opmerking = $_POST['opmerking'];
$opdrachtgever = $_POST['opdrachtid'];
if ( $straat == "" ) {
echo "<font color='red'>Vul geldige straat in!</font><br>";
header("refresh:5;url=/login/");
exit ();
}
if ( $plaats == "" ) {
echo "<font color='red'>Vul geldige plaats in!</font><br>";
header("refresh:5;url=/login/");
exit ();
}
$stmt->bindParam(':relatieid',$relatieid, PDO::PARAM_STR);
$stmt->bindParam(':plaats',$plaats, PDO::PARAM_STR);
$stmt->bindParam(':straat',$straat, PDO::PARAM_STR);
$stmt->bindParam(':huisnummer',$huisnummer, PDO::PARAM_STR);
$stmt->bindParam(':postcode',$postcode, PDO::PARAM_STR);
$stmt->bindParam(':landid',$landid, PDO::PARAM_STR);
$stmt->bindParam(':opmerking',$opmerking, PDO::PARAM_STR);
$stmt->bindParam(':opdrachtgever',$opdrachtgever, PDO::PARAM_STR);
$stmt->execute();
?>
error_reporting(-1);
ini_set('display_errors', 1);
include '/logincheck.php';
include '/verbinding.php';
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "{call spAdresToevoegen (@Relatieid=:relatieid,@Plaats=:plaats,@Straat=:straat,@Huisnummer=:huisnummer,@Postcode=:postcode,@Landid=:landid,@opmerking=:opmerking,@Contactid=:opdrachtgever)}";
$stmt = $db->prepare($sql);
$relatieid = $_SESSION['relatie'];
$straat = $_POST['straat'];
$huisnummer = $_POST['huisnummer'];
$postcode = $_POST['postcode'];
$plaats = $_POST['plaats'];
$landid = $_POST['landid'];
$opmerking = $_POST['opmerking'];
$opdrachtgever = $_POST['opdrachtid'];
if ( $straat == "" ) {
echo "<font color='red'>Vul geldige straat in!</font><br>";
header("refresh:5;url=/login/");
exit ();
}
if ( $plaats == "" ) {
echo "<font color='red'>Vul geldige plaats in!</font><br>";
header("refresh:5;url=/login/");
exit ();
}
$stmt->bindParam(':relatieid',$relatieid, PDO::PARAM_STR);
$stmt->bindParam(':plaats',$plaats, PDO::PARAM_STR);
$stmt->bindParam(':straat',$straat, PDO::PARAM_STR);
$stmt->bindParam(':huisnummer',$huisnummer, PDO::PARAM_STR);
$stmt->bindParam(':postcode',$postcode, PDO::PARAM_STR);
$stmt->bindParam(':landid',$landid, PDO::PARAM_STR);
$stmt->bindParam(':opmerking',$opmerking, PDO::PARAM_STR);
$stmt->bindParam(':opdrachtgever',$opdrachtgever, PDO::PARAM_STR);
$stmt->execute();
?>
fout melding is
PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: [Microsoft][SQL Server Native Client 11.0][SQL Server]The INSERT statement conflicted with the FOREIGN KEY constraint
"FK_adressen_relaties1". The conflict occurred in database "SluisWWW", table "dbo.relaties", column 'id'.' in C:\inetpub\wwwroot\login1\adresversturen.php:42
Stack trace:
#0 C:\inetpub\wwwroot\login1\adresversturen.php(42): PDOStatement->execute()
#1 {main}
thrown in C:\inetpub\wwwroot\login1\adresversturen.php on line 42
Dan moet je dus uitzoeken wat precies die foreign key is en waarom je er een violation op krijgt, dubbele waardes?
probleem gevonden was in database een verkeerde relatie gelegt