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";
?>
echo $row['id']

Verder is de foutafhandeling wat brak, jouw foutmelding zegt 10x niks. Een beetje beveiliging kan ook geen kwaad, de $_GET komt nu zonder enige beveiliging in de query terecht, SQL-injection ligt dus op de loer. Gebruik mysql_real_escape_string().
Yuck... or die()... Inderdaad, foutafhandeling wat brak. Je doodt geen pagina's/tekst/errors, right ;-)?
Hmmm, ok ik zal eens naar de beveiliging kijken, bedankt daarvoor...
Het spijt me pgFrank, maar je antwoord zegt me helemaal niets. Zou je me iets verder kunnen helpen?
Ik vraag me namelijk af waar ik echo $row['reference'] dien te planten, zoals je ongetwijfeld hebt gezien heb ik nu een hidden value in de form gemaakt...Wat dus niet werkt...

Alvast bedankt voor de verdere hulp!
Een record heeft vast een id, dat is 999 van de 1000 gevallen zo, vandaar dat je die gebruikt om het unieke record aan te kunnen wijzen. Verder is het voor ons gokwerk, wij hebben geen flauw idee hou jouw datamodel eruit ziet, of hoe jouw tabel eruit ziet.
Misschien zien we het ook allemaal wat duidelijker als de variabelen buiten de quotes staan.
Even kijken, waar zit je formulierverwerking?
Ik snap je antwoord...

Ik heb als unieke ID "reference" waarbij ik in de form de volgende entry heb:

echo "<input type='hidden' name='reference' value='{$row['reference']}'>\n";

Met deze verwijzing wordt de betreffende reference echter niet bijgewerkt. Is dit voldoende info om me verder te kunnen helpen?

Bedankt!
Nee. Geen mens die weet hoe jouw queries er nu uitzien en wat de resultaten daarvan zijn.

Wat wel vreemd is, is dat jij variabelen tussen quotes zet, ook al zijn het geen strings.
<?php
// beroerd:
echo "<input type='hidden' name='reference' value='{$row['reference']}'>\n";

// handig:
echo '<input type="hidden" name="reference" value="'.$row['reference'].'">'.PHP_EOL;
?>
Ik weet niet of het feit dat ik mijn variabelen tussen quotes zet vreemd is, ik heb het ooit zo aangeleerd van iemand die er blijkbaar verstand van had...
Ik neem het gelijk van je aan dat het waarschijnlijk beter is om jouw optie te nemen. Echter, het herschrijven van deze regel lost mijn probleem niet op...

Laat ik het dan zo vragen, als je een pagina zou moeten ontwerpen waarbij het eerste deel informatie uit de database is met als key laten we zeggen een uniek referentie nummer, en het tweede deel informatie is die je in een form zou willen toevoegen aan de database, hoe zou je dat layout technisch en volledig volgens de PHP/SQL regels aanpakken?
@JP: Als je reference één record aan kan wijzen, is dat goed. Maar je moet dan wel zorgen dat dat zo blijft (misschien toch even denken aan een ID?).

Via die reference kun je dan een UPDATE query uitvoeren. De reference gebruik je dan in een WHERE-statement in je query:
<?php
$query = "SELECT *
FROM tabel
WHERE reference = '".$_POST['reference']."'
";
?>

Edit:
uniek referentie nummer

Nu wordt het een ander verhaal ;-).
@Djemo en pgFrank:
Ik waardeer jullie input ontzettend en ik denk ook het meeste te snappen van wat jullie zeggen, maar ik leg de link om de een of andere reden niet met het probleem wat ik niet kan oplossen, wat geheel aan mijn gebrek aan kennis ligt :-)

Ik ga proberen mijn situatie heel simpel te schetsen en ik zou graag willen weten waar ik de fout in ga (los van de fouten die ik maak in het benoemen van de bewerkingen).
1. Pagina met een lijst van referenties die nog bijgewerkt moeten worden. Als een user klikt op de referentie, opent de pagina update.php?referentie=12345

Stap 1 functioneert

2. Op update.php komt het volgende
- GET statement om het referentie nummer te achterhalen
Ook dit functioneert, hoewel misschien niet de meest veilige optie

- query om de gegevens uit de database te halen (SELECT * from db_customer WHERE reference=$reference), waarbij resultaten in rijen worden weergegeven ($row = mysql_fetch_array($data,MYSQL_ASSOC))

Ik zie hier ook niet direct een probleem?

- 1e deel tabel met de reeds bekende gegevens, die ik d.m.v. de "beroerde" {$row['fieldname']} maar beter nog met de voorgestelde notatie van pgFrank zou kunnen weergeven

Hoe dan ook, ik zie de resultaten op mijn scherm staan.

- 2e deel tabel met een form waarin additionele gegevens dienen te worden ingevoerd. Om de UPDATE query te kunnen laten lopen, zal deze vanuit het form te horen moeten krijgen welke reference er bewerkt moet worden.

Hier loop ik dus vast

- Na druk op de knop mysql_query("UPDATE db_customer SET kolom1=waarde1, etcetera WHERE reference=$reference")

Wanneer ik deze loslaat op de database en bijvoorbeeld waarde1 en $reference vervang door werkelijke gegevens, wordt de database netjes bijgewerkt.

Mijn conclusie is dus dat mijn probleem ligt in de manier waarop ik in de form enerzijds het reference ophaal en anderzijds doorgeef aan de UPDATE query.
Maar zoals ik al aangaf zal mijn kennis veel minder ver reiken, dus ik hou me aanbevolen voor kritiek :-)



Reageren