Hallo Allemaal,

Ik ben met een klachten registratie bezig. Het inserten van een nieuwe issue verloopt probleemloos. Echter, wanneer ik de update wil draaien, wordt de database niet ge-update.

Ik heb een overzicht pagina, waarop de user de betreffende referentie kan aanklikken en dan in het update formulier terecht komt, waarbij het eerste deel van de gegevens al bestaat in de database en dus enkel read-only te zien valt.
Hieronder staat de code, zoals jullie kunnen zien moet ik iets met het referentie nummer aanvangen zodat in het "execute" script herkent wordt welke rij dient te worden aangepast. Het "execute" script functioneert, dat heb ik al gecontroleerd.
Met de huidige code, wordt de data van het betreffende referentie nummer dus niet ge-update. Alvast bedankt voor jullie input!

<?php
include("login details");
if(isset($_GET['reference']))
$reference = $_GET['reference'];
else
$reference = blank;
$query = "SELECT * FROM db_customer where reference='$reference'";
$data = mysql_query($query)
or die ("Couldn't execute query.");
/* Display results in a table */
while ($row = mysql_fetch_array($data,MYSQL_ASSOC))
{
echo "<p><table class='table' cellspacing='1' border='0' cellpadding='0'width='380'>";
echo "<tr><td colspan='1' align='right' width='150'></td></tr>\n";
/* display information */
echo "<tr><td><b>Basic Details</b></td></tr>\n";
echo "<tr><td>Created by:</td><td>{$row['creator']}</td></tr>\n";
echo "<tr><td>Customer:</td><td>{$row['custname']}</td></tr>\n";
echo "<tr><td>Date Added:</td><td>{$row['createdate']}</td></tr>\n";
echo "<tr><td>Reference:</td><td>{$row['reference']}</td></tr>\n";
echo "<tr><td>Complaint Type:</td><td>{$row['complainttype']}</td></tr>\n";
echo "<tr><td>Complaint description:</td><td>{$row['compldescr']}</td></tr>\n";
echo "<tr><td><br><b>Update information</b></td></tr>\n";
}
echo "</table>\n";



echo "<form name='Upd' method='post' action='execute_up.php'>\n";
echo "<input type='hidden' name='reference' value='{$row['reference']}'>\n";
echo "<table>\n";
echo "<tr><td width='300'>Assigned to</td><td width='200'><input type='list' name='assignto' value=''></td></tr>\n";
echo "<tr><td width='300'>Root cause</td><td width='200'><input type='text' name='root' value=''></td></tr>\n";
echo "<tr><td width='300'>Description of root cause</td><td width='200'><input type='text' name='rootdescr' value=''></td></tr>\n";
echo "<tr><td width='300'>Employee(s) involved</td><td width='200'><input type='text' name='empinv'></td></tr>\n";
echo "<tr><td width='300'>Company owned claim</td><td width='200'><input type='checkbox' name='checktrue'> Yes <input type='checkbox' name='checkfalse'> No</td></tr>\n";
echo "<tr><td width='300'>Containment description</td><td width='200'><textarea name='containdescr' cols='30' rows='4'></textarea></td></tr>\n";

echo "</table><br><br>\n";
echo "<input type='hidden' name='upddate'>\n";
echo "<input type='hidden' name='status' value='Pending'>\n";
echo "<input type='submit' value='Toevoegen' />\n";
echo "</form>\n";
?>
Misschien, omdat 'register superglobals' aan kan staan, is het beter om een andere benaming voor de 'verkleinde' versie van $_GET['reference'] te gebruiken. Neem nu $ref. Dat lost dat al weer op.

Je bent al goed op weg wanneer je je referentie in een hidden input veld zet. Dat is perfect. Als nu het formulier verstuurd wordt, moet er een controle komen die controleert of alles juist is ingevoerd. Je referentie komt, omdat deze in een hidden input veld zat, óók in de $_POST-array terecht.
Je kunt via $_POST['naamvanhetveld'] je referentie ophalen. In dit geval $_POST['reference']. Die haal je ook nog even door [php]mysql_real_escape_string[/php]() (je weet nooit...), en gebruik je dán in het WHERE-gedeelte van je query.

Dat zal het formulier juist moeten laten werken, als dit je probleem was. Want met je vorige post werd het mij niet helemaal duidelijk. Als je de query op de database loslaat, wordt alles bijgewerkt; neem aan dat dit geldt voor een directe query vanuit PHPMyAdmin (o.i.d.)?
Ok, ik denk dat ik je begrijp...
Je zegt dat ik de eerste query als volgt moet aanpassen:

<?php
include("login details");
if(isset($_GET['reference']))
$ref = $_GET['reference'];
else
$ref = blank;
$query = "SELECT * FROM db_customer where reference='$ref'";
$data = mysql_query($query)
or die ("Couldn't execute query.");
...
?>

Hierbij vervang ik dus $reference in $ref. Getest en het werkt...

In de form staat nu dus het volgende (n.a.v. post v pgFrank):
echo '<input type="hidden" name="reference" value="'.$row['reference'].'">'.PHP_EOL;

In de execute pagina heb ik het volgende staan:

<?php import_request_variables("p", "form_");
include("login details");
$_POST['reference'];
mysql_query("UPDATE db_customer SET assignto='$form_assignto', etcetera WHERE reference='".$_POST['reference']."'") or die ("Couldn't execute query, because:" . mysql_error());
Print "Your information has been successfully added to the database.";

?>

De toevoeging van jou m.b.t $_POST... heb ik erbij gezet, hoewel ik denk dat ik dit al meeneem bij de import_request_variables, niet?

Ik heb idd een directe query in PHPMyAdmin gedraait om te testen of de UPDATE query op zich wel klopte...

Ik ga morgen nog eens fris en fruitig kijken naar wat ik heb staan, want deze aanpassingen geven me ook niet het gewenste resultaat helaas. Mocht je nog ideeen hebben, dan hoor ik het graag! Voor nu bedankt!
Probleem opgelost!
fout zat hem in de volgende regel:
echo '<input type="hidden" name="reference" value="'.$row['reference'].'">'.PHP_EOL;
Natuurlijk had ik na het aanpassen van $reference in de GET statement ook de value moeten aanpassen naar value='$ref'

Beide ontzettend bedankt voor de hulp!

Reageren