ik heb op 1 pagina een script met een url welke een databsewaarde bevat..
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>

<?
while (!$rs->EOF)
{
?>

<tr> <!-- //verbonden met select functie wordt op het scherm weergegeven //-->
<td><a href="overzicht.php?rd=<?=urlencode($rs->Fields['id']->value);?>"><?=$rs->Fields['D_debiteurennr']->value;?> </td>
<td><?= $rs->Fields['D_dossiernr']->Value; ?></td>
<td><?= $rs->Fields['D_naamklant']->Value; ?></td>
<td><?= $rs->Fields['D_woonplaats']->Value; ?></td>
<td><?= $rs->Fields['Bewerk']->Value; ?></td>
</tr>

<?php
$rs->MoveNext();
}
?>

---------- overzicht.php -----------

<?
$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)?
Als ik de foutmelding lees, verwacht hij voor het veld id een ander datatype dan je geeft.

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:

<?
$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:

<?
$rd = isnumeric($_GET['rd']) ? $_GET['rd'] : 0;
$qryDetails = "... WHERE id = $rd";
?>
@ Willem

is het niet is_numeric();
correct
ik heb het nu zo;

<?
$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...
zet eens <? error_reporting(E_ALL); ?> 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."'";
<? error_reporting(E_ALL); ?>

<table width="800" align="center" border="0">
<tr>
<td><h5>Installatieoverzicht</h5></td>
<tr>
</table>

<?
$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 schreef op 13.02.2006 16:25
$qryDetails = "SELECT * FROM Branderinformatie WHERE id = '".$rd."'";
*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 ;-)

Die $$qryDetails is inderdaad wel fout ($ teveel).
oh ja het is een integer :(
sorry ik dacht weer eens niet na

Reageren