edit pagina
Het aanpassen van gegevens vanuit een MYSQL lukt me niet.
Ik probeer connectie met de database te maken en probeer dan vanuit een <input type="text"> de huidige gegevens te veranderen.
Wat ik nu aan resultaat krijg is dat bij een click op de EDIT button ik een lege pagina zie met de text (Failed). de ulr is dan: html/updates/edit?edit=3
Dus er wordt wel naar de ID row verwezen, maar laad in de <input type="text"> niet de weggeschreven data in.
Ik gebruik daarvoor 2 pagina's
- index.php
- htmlfiles/edit.php
in de index hen ik een link verwezen naar de ID zoals hieronder is weggeschreven.
echo "<td><a href='updates/edit?edit=$row[ID]' >Edit</a>";
in de edit.php heb ik het volgende :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$host = "BLABLA";
$dbuser = "BLABLA";
$dbpassword = "BLABLA";
$dbname = "BLABLA";
$conn = new mysqli($host, $dbuser, $dbpassword, $dbname);
if (isset($_GET['edit']) )
{
$id = $_GET['edit'];
$res =mysqli_query($conn, "UPDATE `afwijking` WHERE id='$id'") or die("[i][u]Failed[/u][/i]");
$row= mysqli_fetch_array($res);
}
if (isset($_POST['tag'])) {
$tag = $_POST['tag'];
$ID = $_POST['ID'];
$sql = "UPDATE afwijking SET name='$tag WHERE id='$id'";
$res = mysqli_query($sql) or die("Kan geen verbinding maken.");
echo "<meta http-equiv=refresh' content='0;url=../afwijking.php'>";
}
?>
$host = "BLABLA";
$dbuser = "BLABLA";
$dbpassword = "BLABLA";
$dbname = "BLABLA";
$conn = new mysqli($host, $dbuser, $dbpassword, $dbname);
if (isset($_GET['edit']) )
{
$id = $_GET['edit'];
$res =mysqli_query($conn, "UPDATE `afwijking` WHERE id='$id'") or die("[i][u]Failed[/u][/i]");
$row= mysqli_fetch_array($res);
}
if (isset($_POST['tag'])) {
$tag = $_POST['tag'];
$ID = $_POST['ID'];
$sql = "UPDATE afwijking SET name='$tag WHERE id='$id'";
$res = mysqli_query($sql) or die("Kan geen verbinding maken.");
echo "<meta http-equiv=refresh' content='0;url=../afwijking.php'>";
}
?>
En het formulier waar men de huidige data kan aanpasen is hieronder weergegeven.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<form action="edit.php" method="post">
<div class="row">
<table>
<tr>
<th>Tag</th>
</tr>
<tr>
<td><input type="text" name="tag" value=".$row['tag']." size="35"></td>
<td><input type="hidden" name="ID" value=".$row['id']."></td>
<td><input type="submit" value="Update"></td>
</tr>
</table>
</div>
</form>
<div class="row">
<table>
<tr>
<th>Tag</th>
</tr>
<tr>
<td><input type="text" name="tag" value=".$row['tag']." size="35"></td>
<td><input type="hidden" name="ID" value=".$row['id']."></td>
<td><input type="submit" value="Update"></td>
</tr>
</table>
</div>
</form>
In de database heten de kolommen dan ook -ID- en -tag-.
Alvast bedankt voor het meedenken.
Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 12/07/2018 13:03:33 door - Ariën -
Tevens zie ik dat je zeer vatbaar bent voor SQL-injection, waarbij iedereen je querie kan manipuleren met kwade gevolgen van dien. Gebruik dus $conn->real-escape_string($_GET['edit']).
Ook raad ik aan om geen procedurele en object-gerienteerde functies van MySQLi door elkaar te gebruiken. het kan wel, maar soms zijn de functies net iets anders wat voor verwarring kan zorgen. Ikzelf raad aan om de object-georiënteerde manier te gebruiken, en dus $conn->query() etc...
Verder is or die() niet de juiste manier van fouten afhandelen. Dit kan netjes met een if-else of zelfs met exceptions.
Gewijzigd op 12/07/2018 13:04:26 door - Ariën -
Bedankt voor je reactie, ik heb even het eea bekeken.
Ik begrijp niet zo goed wat je bedoeld met je $conn-> terugkoppeling,
Weet deze niet goed te implementeren.
Nu heb ik even wat aanpassingen gedaan en krijg de volgende melding.
"Notice: Undefined index: tag in C:\wamp64\www\E..S\testopdracht\html\updates\edit_afwijking.php on line 10"
op line 10 staat dan het volgende
06. $conn = new mysqli($host, $dbuser, $dbpassword, $dbname) or die ("could not connect to mysql");
07.
08. if (isset($_GET['edit']) )
09. {
10. $tag = $_POST['tag']; <<---<<----<<--- line 10
11. $id = $_GET['edit'];
12. $res = mysqli_query($conn, "UPDATE afwijking WHERE id='$id'");
13. }
Op een een of andere manier wordt value van de Tag-data in mij edit.php niet goed meegenomen.
<td><input type="text" name="tag" value=".$row['tag']." size="35"></td>
zie printscreen:
http://nl.tinypic.com/view.php?pic=120owe9&s=9#.W0dAtsIyWUk
Nu zie je twee velden (een daarvan is nu de ID) deze hoeft men niet te zien en daarom HIDDEN
Gewijzigd op 12/07/2018 13:59:09 door Frank Thijssen
http://php.net/manual/en/mysqli.query.php
Deze werkt met objecten in PHP, welke herkenbaar zijn aan de pijlen ->
Hiermee kan je veel meer uit de voeten dan de normale functies.
Over je probleem: Blijkbaar wordt het tag-element uit je formulier niet meegeven in je POST-request. Deze zal dan niet bestaan.
Verder hebben we ook code-tags op het forum ;-)
Quote:
UPDATE `afwijking` WHERE id='$id'
Als dit je hele query is dan wordt er niets geupdate. Ook is deze syntax volgens mij niet correct, het SET-deel is verplicht.
Je mist een enkele quote na $tag, en deze SQL-code is vatbaar voor SQL-injectie, zorgt dat je altijd de externe DATA-delen voorziet van quotes en deze escaped met real_escape_string().
Code (php)
1
2
2
<td><input type="text" name="tag" value=".$row['tag']." size="35"></td>
<td><input type="hidden" name="ID" value=".$row['id']."></td>
<td><input type="hidden" name="ID" value=".$row['id']."></td>
Tenzij deze hele lap HTML wordt ge-echo'd - en zelfs dan - is deze constructie niet goed, de values bevatten waarschijnlijk letterlijk de tekst ".$row['tag']." en ".$row['id']." omdat je niet in een PHP-blok zit. En ook hier geldt het principe van output escaping, alleen dit keer niet in de SQL- maar in de HTML-context. Een geschikte functie daarvoor is htmlspecialchars(). Ik zou dus zoiets verwachten:
Code (php)
1
<input type="text" name="tag" value="<?php echo htmlspecialchars($row['tag'], ENT_QUOTES, 'UTF-8'); ?>" size="35">
Daarnaast is het handig om je debugging-functionaliteit "mondig" te laten zijn. Je doet er dus verstandig aan het melden + weergeven van foutmeldingen tijdens ontwikkeling aan te zetten, bijvoorbeeld door aan het begin van je code de volgende passage te zetten:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
ini_set('display_startup_errors', true);
?>
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
ini_set('display_startup_errors', true);
?>
Nou zijn alle Notice: warnings weg. Maar.. mijn gegevens uit de datebase worden niet in de velden weergegeven die ik toch graag in de edit pagina had gezien.
Om dit stukje code gaat het nu denk ik:
$editid = isset($_GET['eid']) ? $_GET['eid'] : '';
//Neem Record
$editquery = mysqli_query($conn, " SELECT * FROM afwijking WHERE id='{$editid}'" ) or die("Contact maken met de database is mislukt. Fout, " . mysqli_error($conn));
$row = mysqli_fetch_row($editquery);
Onderstaande while-loop staat in de index pagina.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
while($row = mysqli_fetch_array($records))
{
echo "<tr><form method=post>";
echo "<td><input type=text action=update.php name=tag value='".$row['tag']."'></td>";
echo "<td><input type=text name=nr value='".$row['nr']."'></td>";
echo "<td><input type=text name=reference value='".$row['reference']."'></td>";
echo "<td><input type=text name=scores value='".$row['scores']."'></td>";
echo "<td><input type=text name=evaluates value='".$row['evaluates']."'></td>";
echo "<td><input type=text name=conform value='".$row['conform']."'></td>";
echo "<input type=hidden name=id value='".$row['ID']."'>";
echo "<td><a href='updates/edit_afwijking?edit=$row[0]'>Edit</a>";
echo "<td><a href='updates/delete_afwijking?del=$row[0]'>Delete</a>";
echo "</form></tr>";
}
?>
while($row = mysqli_fetch_array($records))
{
echo "<tr><form method=post>";
echo "<td><input type=text action=update.php name=tag value='".$row['tag']."'></td>";
echo "<td><input type=text name=nr value='".$row['nr']."'></td>";
echo "<td><input type=text name=reference value='".$row['reference']."'></td>";
echo "<td><input type=text name=scores value='".$row['scores']."'></td>";
echo "<td><input type=text name=evaluates value='".$row['evaluates']."'></td>";
echo "<td><input type=text name=conform value='".$row['conform']."'></td>";
echo "<input type=hidden name=id value='".$row['ID']."'>";
echo "<td><a href='updates/edit_afwijking?edit=$row[0]'>Edit</a>";
echo "<td><a href='updates/delete_afwijking?del=$row[0]'>Delete</a>";
echo "</form></tr>";
}
?>
Wat doe ik nou fout?
Je hoeft ook trouwens geen statische HTML te echo'en - je kunt op elk moment een PHP blok onderbreken en voortzetten, dit vergroot de leesbaarheid aanzienlijk. Daarnaast doe je er verstandig aan om alle tag-property-waarden te voorzien van "dubbele quotes" en alle PHP-data die je in het HTML-document in wilt voegen te escapen, zoals reeds eerder uitgelegd.