URL werkt niet
deze link pakt hij ook goed op maar verwerkt hem niet goed...
ik heb 2 bestanden zoeken.php, en overzicht.php
hier de beknopte scripts:
------- zoeken.php ----------
$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)};Persist Security info=false; DBQ=$db");
// Toon lijst
$sql = "SELECT TOP 10 id, D_debiteurennr, D_dossiernr, D_naamklant, D_woonplaats, Bewerk FROM Branderinformatie ORDER BY Bewerk DESC";
$rs = $conn->Execute($sql);
?>
<table width="600" align="center">
<tr>
<td><h3 style="cursor: default;">Laatst toegevoegde Installatieoverzichten</h3></td>
</tr>
</table>
<br>
<table width="600" border="0" align="center" cellpadding="2" cellspacing="2">
<tr align="left">
<th Dossier-nr><span class="style7">Debiteuren-nr</span></th>
<th Debiteuren-nr><span class="style7">Dossier-nr</span></th>
<th Klantnaam><span class="style7">Klantnaam</span></th>
<th Woonplaats><span class="style7">Woonplaats</span></th>
<th Woonplaats><span class="style7">Datum/tijd</span></th>
</tr>
<tr> <!-- //verbonden met select functie wordt op het scherm weergegeven //-->
<td><a href="overzicht.php?rd="> </td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
---------- overzicht.php -----------
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$conn = new COM('ADODB.Connection');
$db = 'W:\Web\Index\Service\installatieoverzicht\Installatieoverzicht.mdb';
$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db");
// Controleer of er een debiteurnummer is meegegeven
if (isset($_GET['rd']) && $_GET['rd'] != '' )
{
// Vraag details op van deze debiteur
$qryDetails = "SELECT * FROM Branderinformatie WHERE id='".urldecode($_GET['rd'])."'";
$rs = $conn->Execute($qryDetails);
echo '<table>';
while(!$rs->EOF)
{
?>
$conn = new COM('ADODB.Connection');
$db = 'W:\Web\Index\Service\installatieoverzicht\Installatieoverzicht.mdb';
$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db");
// Controleer of er een debiteurnummer is meegegeven
if (isset($_GET['rd']) && $_GET['rd'] != '' )
{
// Vraag details op van deze debiteur
$qryDetails = "SELECT * FROM Branderinformatie WHERE id='".urldecode($_GET['rd'])."'";
$rs = $conn->Execute($qryDetails);
echo '<table>';
while(!$rs->EOF)
{
?>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_displayStatusMsg(msgStr) { //v1.0
status=msgStr;
document.MM_returnValue = true;
}
//-->
</script>
<table width="800" align="center" border="0">
<tr>
<td>
<!-- ##################################### Begin Tabel Debiteur ##################################### --!>
<table border="0" width="800" align="center">
hieronder de tabel met waardenoverzicht...
ik krijg de volgende error hierdoor;
Fatal error: Uncaught exception 'com_exception' with message 'Source: Microsoft OLE DB Provider for ODBC Drivers
Description: [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.' in W:\Web\Index\Service\installatieoverzicht\overzicht.php:35 Stack trace: #0 W:\Web\Index\Service\installatieoverzicht\overzicht.php(35): com->Execute('SELECT * FROM B...') #1 {main} thrown in W:\Web\Index\Service\installatieoverzicht\overzicht.php on line 35
line 35; $rs = $conn->Execute($qryDetails); (in overzicht.php)
kan dit misschien te maken hebben met het feit dat de waarde 'id' in de DB een primary key is en dus geindexeerd wordt (zonder duplicaten)?
Mijn vermoeden is, dat id een integer is en dat de driver er niet mee overweg kan dat je $_GET['rd'] als string in de query opneemt.
Als dat zo is, ishet probleem eenvoudig te verhelpen: haal de quotes weg. Dus:
Code (php)
1
2
3
2
3
<?
$qryDetails = "SELECT * FROM Branderinformatie WHERE id=".urldecode($_GET['rd']);
?>
$qryDetails = "SELECT * FROM Branderinformatie WHERE id=".urldecode($_GET['rd']);
?>
Dit geeft wel problemen als om de een of andere reden de waarde van rd geen integer is (bijvoorbeeld als iemand "rd=blabla" in de url zet).
Om dit te voorkomen, moet je van tevoren een check doen. Dat kan bij voorbeeld als volgt:
Code (php)
1
2
3
4
2
3
4
<?
$rd = isnumeric($_GET['rd']) ? $_GET['rd'] : 0;
$qryDetails = "... WHERE id = $rd";
?>
$rd = isnumeric($_GET['rd']) ? $_GET['rd'] : 0;
$qryDetails = "... WHERE id = $rd";
?>
Gewijzigd op 13/02/2006 16:09:00 door Willem vp
is het niet is_numeric();
correct
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$conn = new COM('ADODB.Connection');
$db = 'W:\Web\Index\Service\installatieoverzicht\Installatieoverzicht.mdb';
$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db");
// Controleer of het id is meegegeven
if (isset($_GET['id']) && $_GET['id'] != '' )
{
// Vraag details op van dit id
$rd = is_numeric($_GET['rd']) ? $_GET['rd'] : 0;
$$qryDetails = "SELECT * FROM Branderinformatie WHERE id = $rd";
$rs = $conn->Execute($qryDetails);
echo '<table>';
while(!$rs->EOF)
{
?>
$conn = new COM('ADODB.Connection');
$db = 'W:\Web\Index\Service\installatieoverzicht\Installatieoverzicht.mdb';
$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db");
// Controleer of het id is meegegeven
if (isset($_GET['id']) && $_GET['id'] != '' )
{
// Vraag details op van dit id
$rd = is_numeric($_GET['rd']) ? $_GET['rd'] : 0;
$$qryDetails = "SELECT * FROM Branderinformatie WHERE id = $rd";
$rs = $conn->Execute($qryDetails);
echo '<table>';
while(!$rs->EOF)
{
?>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_displayStatusMsg(msgStr) { //v1.0
status=msgStr;
document.MM_returnValue = true;
}
//-->
</script>
hij geeft nu geen foutmelding meer, maar hij geeft ook geen waardes weer, alleen de kop bovenaan de pagina...
bovenaan je script.
het is het makkelijkst om hiermee te scripten, je krijgt namelijk alle errors / notices / warnings etc te zien.
doe ipv:
$$qryDetails = "SELECT * FROM Branderinformatie WHERE id = $rd";
eens:
$qryDetails = "SELECT * FROM Branderinformatie WHERE id = '".$rd."'";
zet eens het is het makkelijkst om hiermee te scripten, je krijgt namelijk alle errors / notices / warnings etc te zien.
doe ipv:
$$qryDetails = "SELECT * FROM Branderinformatie WHERE id = $rd";
eens:
$qryDetails = "SELECT * FROM Branderinformatie WHERE id = '".$rd."'";
<table width="800" align="center" border="0">
<tr>
<td><h5>Installatieoverzicht</h5></td>
<tr>
</table>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$conn = new COM('ADODB.Connection');
$db = 'W:\Web\Index\Service\installatieoverzicht\Installatieoverzicht.mdb';
$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db");
// Controleer of het id is meegegeven
if (isset($_GET['id']) && $_GET['id'] != '' )
{
// Vraag details op van dit id
$rd = is_numeric($_GET['id']) ? $_GET['id'] : 0;
$qryDetails = "SELECT * FROM Branderinformatie WHERE id = '".$rd."'";
$rs = $conn->Execute($qryDetails);
echo '<table>';
while(!$rs->EOF)
{
?>
$conn = new COM('ADODB.Connection');
$db = 'W:\Web\Index\Service\installatieoverzicht\Installatieoverzicht.mdb';
$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db");
// Controleer of het id is meegegeven
if (isset($_GET['id']) && $_GET['id'] != '' )
{
// Vraag details op van dit id
$rd = is_numeric($_GET['id']) ? $_GET['id'] : 0;
$qryDetails = "SELECT * FROM Branderinformatie WHERE id = '".$rd."'";
$rs = $conn->Execute($qryDetails);
echo '<table>';
while(!$rs->EOF)
{
?>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_displayStatusMsg(msgStr) { //v1.0
status=msgStr;
document.MM_returnValue = true;
}
//-->
</script>
heb nu dit, maar brengt geen extra foutmelding teweeg of wat anders...
hij blijft geen waardes geven
Het lijkt me dat overzicht.php ook niet compleet is. Zo mis ik bijvoorbeeld de afsluiting van de while-loop en de $rs->MoveNext;
Erik:
*kreun* De initiele foutmelding hadden we (denk ik) juist weggewerkt door die quotes weg te halen (integer !== string). Moet je die dingen niet weer gaan introduceren ;-)$qryDetails = "SELECT * FROM Branderinformatie WHERE id = '".$rd."'";
Die $$qryDetails is inderdaad wel fout ($ teveel).
Gewijzigd op 13/02/2006 17:18:00 door Willem vp
sorry ik dacht weer eens niet na
.. deze staan in zoeken.php...
ik heb het eerst geprobeerd met een andere database waarde, toen deed hij het foutloos... ik heb alleen de veldnaam van deze waarde gewijzigd door het document heen...
de vorige waarde was als tekst in access weergegeven en de huidige waarde als autonummering... dus wat betreft de is_numeric kan dat best wel goed zitten...
Quote:
Niks mee te maken ;-)deze staan in zoeken.php
In overzicht.php staat een loop met als conditie (!$rs->EOF). Ten eerste moet het while()-blok (het gedeelte tussen {}) compleet zijn. Ik mis de afsluitende } dus je blok eindigt niet. Dat geeft een knoeperd van een parser error. Ten tweede wordt er geen $rs->MoveNext gedaan. Dat houdt dus in dat je altijd hetzelfde record blijft bewerken, en dat je dus in een oneindige lus komt.
Dat dit in zoeken.php wel goed staat, doet niet ter zake. Dat is een ander bestand waar je in overzicht.php niet mee te maken hebt. Het is meteen de verklaring waarom zoeken.php wél werkt en overzicht.php niet ;-)
na </script> komt een gigantisch grote tabel verzameling en hierna word er zo afgesloten:
</table>
<br><br>
</body>
</html>
dus er is wel een afsluiting van de while lus en $rs->MoveNext(); staat er dus wel...
Okay, dan is het goed. We zoeken vrolijk verder...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$conn = new COM('ADODB.Connection');
$db = 'W:\Web\Index\Service\installatieoverzicht\Installatieoverzicht.mdb';
$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db");
// Controleer of het id is meegegeven
if (isset($_GET['id']) && $_GET['id'] != '' )
{
// Vraag details op van dit id
$rd = is_numeric($_GET['id']) ? $_GET['id'] : 0;
$qryDetails = "SELECT * FROM Branderinformatie WHERE id = $rd";
$rs = $conn->Execute($qryDetails);
echo '<table>';
while(!$rs->EOF)
{
?>
$conn = new COM('ADODB.Connection');
$db = 'W:\Web\Index\Service\installatieoverzicht\Installatieoverzicht.mdb';
$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db");
// Controleer of het id is meegegeven
if (isset($_GET['id']) && $_GET['id'] != '' )
{
// Vraag details op van dit id
$rd = is_numeric($_GET['id']) ? $_GET['id'] : 0;
$qryDetails = "SELECT * FROM Branderinformatie WHERE id = $rd";
$rs = $conn->Execute($qryDetails);
echo '<table>';
while(!$rs->EOF)
{
?>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_displayStatusMsg(msgStr) { //v1.0
status=msgStr;
document.MM_returnValue = true;
}
//-->
</script>
<table width="800" align="center" border="0">
<tr>
<td>
<!-- ##################################### Begin Tabel Debiteur ##################################### --!>
<tab
bedankt jongens ik kan
weer verder super!
Binnen je while-loop zie ik zowel de definitie van een JavaScript-functie als het begin van een tabel. Klopt dat?
Dit houdt in dat voor elk record:
1) die JS-functie wordt gedefinieerd (officieel hoort dat in de HEAD-sectie van je HTML-file)
2) een nieuwe tabel wordt aangemaakt. Misschien is dat wat je wilt, maar over het algemeen is het handiger om de tabel zelf aan te maken buiten je while-loop en in de loop alleen tabel-rijen te maken.
de schrijvers hebben gewerkt met formhandler, ik weet niet of dit er mee te maken kan hebben, maar inderdaad in de while-lus maak ik een tabel aan, en als je goed kijkt, staat het javascript bovenaan tussen <!-- en -->
dus waarschijnlijk pakt hij dit niet mee...