Controle of zelfde reservering al gemaakt is.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo!

Ik ben bezig met het maken van een reserveringssysteem voor buitensport activiteiten.
Omdat er op dit moment met een MS acces database wordt gewerkt moet het nieuwe systeem deze database aanhouden en spreek ik de database dus aan mbv een ODBC koppeling.


Ik zal mijn probleem zo goed mogelijk proberen uit te leggen:

Op dit moment als er in de agenda word geklikt op een item wordt deze doorverwezen naar de desbetreffende reserveringspagina. Hier moeten een aantal velden worden ingevoerd en vervolgens via een knop 'Reserveer' worden gereserveerd. Het probleem gaat om de verwerkingspagina van het reserveren.

Een reservering plaatsen lukt, alleen wil ik nu controleren of dit account al een reservering heeft geplaatst voor de zelfde activiteit onder de zelfde naam.

Hieronder mijn code van het bestand out_insert_reserveringsformulier.php

code:
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
<?php
session_start();
$out_det_reg_nr = $_SESSION['username'];
$con=odbc_connect('odbc_dblaforge','','');
        if (!$con)
            {exit("Connection Failed: " . $con);}
            
$out_code = $_POST['out_code'];
$out_naam = $_POST['out_naam'];
$dln_naam = $_POST['dln_naam'];
$dln_geboortedatum = $_POST['dln_geboortedatum'];
$dln_lengte = $_POST['dln_lengte'];
$dln_gewicht = $_POST['dln_gewicht'];
$dln_geslacht = $_POST['dln_geslacht'];
$dln_opmerking = $_POST['dln_opmerking'];

$check ="SELECT COUNT(out_code, dln_naam) AS counter FROM outdoor_deelnemers WHERE out_code = $out_code AND dln_naam = $dln_naam";
$resultcheck = odbc_exec($con, $check);


$sql = "INSERT INTO outdoor_deelnemers 
(out_code, dln_naam, dln_geboortedatum, dln_lengte, dln_gewicht, dln_geslacht, dln_opmerking) 
 VALUES('$out_code','$dln_naam','$dln_geboortedatum','$dln_lengte','$dln_gewicht','$dln_geslacht','$dln_opmerking')";

  
  $res = odbc_exec($con, $sql);
  if (!$res) {
    print("SQL statement failed with error:\n");
    print(odbc_error($con).": ".odbc_errormsg($con)."\n");
  } else {
    print("");
  }  
echo "<br />";
  
 
$sql3 ="INSERT INTO outdoor_reserveringen (dln_nr, out_code, det_reg_nr) SELECT MAX(outdoor_deelnemers.dln_nr), '$out_code', '$out_det_reg_nr' FROM outdoor_deelnemers";


  $res2 = odbc_exec($con, $sql3);
  if (!$res) {
    print("SQL statement failed with error:\n");
    print(odbc_error($con).": ".odbc_errormsg($con)."\n");
  } else {
    print("");
  } 

echo "<br />";

odbc_close($con); 

echo "";
?>

<html>
<head>
<script type="text/javascript">
function delayer(){
    window.location = "../pages/out_overzicht.php"
}


</script>
</head>
<body onLoad="setTimeout('delayer()', 100000)">
<p> Uw reservering is geplaatst, uw wordt terug naar het overzicht verwezen</p>
</body>
</html>


Het gaat om dit stukje;

code:
1
2
$check ="SELECT COUNT(out_code, dln_naam) AS counter FROM outdoor_deelnemers WHERE out_code = $out_code AND dln_naam = $dln_naam";
$resultcheck = odbc_exec($con, $check);


Mbv de bovenstaande query wou ik kijken of er een resultaat kan worden opgehaald die gelijk zijn aan de out_code, dln_naam die zijn gepost in het reserveringsformulier.

Alleen krijg ik dit niet werkend, ik heb veel verschillende manieren geprobeerd met odbc_fetch_row om te kijken of het resultaat groter is dan 0 ( > 0 ) maar dit mocht niet baten.

Hopelijk heb ik een beetje duidelijk kunnen maken wat mijn probleem is.

Hopelijk weet iemand hoe ik dit kan oplossen.

Mvg,

HvV.

Acties:
  • 0 Henk 'm!

  • bakakaizoku
  • Registratie: Januari 2002
  • Laatst online: 17-09 10:27
Wat bevat $resultcheck nadat je odbc_exec hebt uitgevoert?

PSN: bakakaizoku - WoW: Thiccblonde (GM of Phoenix Ascension) @ Twisting-Nether


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
En wat als eerst de reservering onder "Dhr. Jansen" staat en daarna onder "Jansen"?

Een andere tip om zeker even te lezen is deze trouwens: reviews: Sql-injectie en xss: de beste verdediging

Acties:
  • 0 Henk 'm!

  • Low-Tech
  • Registratie: December 2001
  • Laatst online: 04:26
Een resource indien de query succesvol is (geeft alleen false bij een error, wel op controleren). Vervolgens moet je met bijvoorbeeld een odbc_num_rows kijken of er een record is opgehaald en hierop controleren.

Fractal Design Meshify S2, Asus ROG B550-F, AMD 3700x, 3080?, Corsair H115i Pro, G-Skill 3600-16 32GB Trident Z Neo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Als ik die op dit moment echo, krijg ik een foutmelding:

Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][ODBC Microsoft Access Driver]Invalid use of null pointer , SQL state S1009 in SQLExecDirect in \out_insert_reserveringsformulier.php on line 21

Misschien klopt de query niet..

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
mithras schreef op woensdag 04 april 2012 @ 09:19:
En wat als eerst de reservering onder "Dhr. Jansen" staat en daarna onder "Jansen"?
Ik wil als de functie werkt de query op meer dingen laten controleren. Heb hem nu alleen even simpel gehouden alleen voor de werking.
Een andere tip om zeker even te lezen is deze trouwens: reviews: Sql-injectie en xss: de beste verdediging
En Sql-injectie moet ik me inderdaad nog mee gaan bezig houden. Bedankt voor de tip.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Low-Tech schreef op woensdag 04 april 2012 @ 09:22:
Een resource indien de query succesvol is (geeft alleen false bij een error, wel op controleren). Vervolgens moet je met bijvoorbeeld een odbc_num_rows kijken of er een record is opgehaald en hierop controleren.
Ja dit heb ik al geprobeerd alleen num_rows werkt niet goed met odbc, deze geeft vaak geen resultaat. Dus daarom dat ik nu iets anders probeer te vinden..

Is er iets anders dat ik kan gebruiken om te kijken of onderstaande een resultaat op levert?
$resultcheck = odbc_exec($con, $check);

Acties:
  • 0 Henk 'm!

  • Solopher
  • Registratie: December 2002
  • Laatst online: 11-09 14:55
Vanuit de usercomments bij de documentatie van PHP:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function odbc_mssql_num_rows($dbh) {
    $res = odbc_exec($dbh, 'SELECT @@ROWCOUNT AS cnt');

    if ( @odbc_fetch_into($res, $row)) {
        $count = trim( $row[0] );
    } else {
        $count = 0;
    }
    
    odbc_free_result($res);
    return $count;
}
?>

http://www.php.net/manual....odbc-num-rows.php#100883

Wat je overigens zou kunnen overwegen is om gebruik te maken van PDO, en om vervolgens doormiddel van Prepaired statements te gaan werken (SQL Injectie).

Om met een ODBC database verbinding te maken:
http://www.phpro.org/tuto...ction-to-PHP-PDO.html#4.7

En om een prepaired statement te maken:
http://www.phpro.org/tuto...uction-to-PHP-PDO.html#10

Hopelijk heb je dan alsnog wat aan mijn post.

[ Voor 33% gewijzigd door Solopher op 04-04-2012 09:58 . Reden: Hmmm zie net dat dit alleen voor MSSQL is... ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt, dit ga ik proberen!

Kort vraagje, enig idee wat dit inhoud:
code:
1
SELECT @@ROWCOUNT AS cnt

Is dit een volledige query? Nog nooit @@.. gezien.

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 12:21

MueR

Admin Tweakers Discord

is niet lief

Gebruik de edit knop ( Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/edit.gif ) als je iets toe te voegen hebt; je topic herhaaldelijk omhoogschoppen is niet nodig en die melding staat er niet voor niets :)
Afbeeldingslocatie: http://tweakers.net/ext/f/93OGDVn8zio6RrIck1qYj8ne/full.png

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Solopher
  • Registratie: December 2002
  • Laatst online: 11-09 14:55
Verwijderd schreef op woensdag 04 april 2012 @ 10:08:
Bedankt, dit ga ik proberen!

Kort vraagje, enig idee wat dit inhoud:
code:
1
SELECT @@ROWCOUNT AS cnt

Is dit een volledige query? Nog nooit @@.. gezien.
Dit is TSQL in combinatie met MSSQL, dit was ook een foutje vanaf mijn kant. Daarom heb ik ook edit gedaan van mijn post. En je gewezen op PDO.

Als ik jou was zal ik eerst naar PDO gaan kijken want ik vrees dat TSQL helemaal niet gaat werken met MS Access

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11:51
Solopher schreef op woensdag 04 april 2012 @ 09:53:
[code=php]
...
'SELECT @@ROWCOUNT AS cnt'
...
Afgezien van het feit dat de TS Access gebruikt komt dat op hetzelfde neer als wat de TS doet, hij kijkt nl alleen naar de COUNT aggregate.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1