ID rowen loopt de soep in
Ik ben een groot CMS aan het maken(Webshop). Ik ben al heel ver, ik loop alleen tegen vervelende rare probleempjes aan. Zoals deze: Ik wil een ID rowen, maar dat lukt niet.
Ik row een ID in een tabel. Deze:
Daarna row ik datzelfde ID in een URL, en dat gaat dus mis. Zo doe ik dat:
Code (php)
1
2
3
2
3
<?php
echo "<td><a href='del_klant.php?id='".$row['id']."'>Verwijder</a></td></tr>";
?>
echo "<td><a href='del_klant.php?id='".$row['id']."'>Verwijder</a></td></tr>";
?>
Als ik dan op verwijder klik gaat hij naar een pagina met een blanco ID.
Dit is de gehele code. Indien nodig:
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
<?php
include '../config.php';
$sql = mysql_query("SELECT * FROM users");
$row = mysql_fetch_array($sql);
while($row= mysql_fetch_assoc($sql)) {
echo "<TABLE BORDER=\"1\" ALIGN=\"center\">";
echo "<td>ID: ".$row['id']."</td>" ;
echo "<td>Gebruikersnaam: ".$row['username']."</td>";
echo "<td><a href='del_klant.php?id='".$row['id']."'>Verwijder</a></td></tr>";
/*} else {
echo "SQL kon de gegevens helaas niet laden.";
*/
}
?>
include '../config.php';
$sql = mysql_query("SELECT * FROM users");
$row = mysql_fetch_array($sql);
while($row= mysql_fetch_assoc($sql)) {
echo "<TABLE BORDER=\"1\" ALIGN=\"center\">";
echo "<td>ID: ".$row['id']."</td>" ;
echo "<td>Gebruikersnaam: ".$row['username']."</td>";
echo "<td><a href='del_klant.php?id='".$row['id']."'>Verwijder</a></td></tr>";
/*} else {
echo "SQL kon de gegevens helaas niet laden.";
*/
}
?>
Mijn vraag: Hoe kan ik het ID toch in die URL krijgen???
Gewijzigd op 26/02/2013 19:13:49 door Koen Hollander
Een paar tips:
- Gebruik geen * in je SELECT, maar specificeer alle velden die je hebt
- Pas goede foutafhandeling toe. Die else in je comment klopt niet, maar dat wist je denk ik al?
- gebruik bij voorkeur in je echo een single-quote, zodat je double-quotes voor HTML niet hoeft te escapen.
- Waarom TABLE met een hoofdletter? Dat is niet HTML 4.01 specified.
Het verhaal wanneer je wel/geen tables gebruikt laat ik even terzijde.
Gewijzigd op 26/02/2013 19:28:27 door - Ariën -
Quote:
Mijn vraag: Hoe kan ik het ID toch in die URL krijgen???
Koen Hollander op 26/02/2013 19:13:21:
Daarna row ik datzelfde ID in een URL, en dat gaat dus mis.
Wat staat er in de broncode van je pagina? Kunnen de ' een oorzaak zijn?
Gewijzigd op 26/02/2013 20:13:44 door Obelix Idefix
Koen Hollander op 26/02/2013 20:00:01:
Ja maar Aar, weet jij dan wat het antwoord op de vraag is?
Quote:
Mijn vraag: Hoe kan ik het ID toch in die URL krijgen???
Door iets met mijn tips te doen?
@Aar
- Aar - op 26/02/2013 19:27:34:
Het verhaal wanneer je wel/geen tables gebruikt laat ik even terzijde.
Ik denk als ik de data zo bekijk dat het in dit geval in een tabel hoort (lijkt op een overzicht met gebruikers).
Toevoeging op 26/02/2013 23:53:41:
@elwin. Het is ook een overzicht van gebruikers
Toevoeging op 26/02/2013 23:56:18:
@oblix. Ik ben zeker iemand die beter wil scripten. Ik neem tips ook van harte aan
Lees hem eens door:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
// Error afhandeling, deze gebruiken bij het testen.
define( 'DEBUG_MODE', true ); // false = uit, true = aan
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
include ("config.php"); // Inladen van de database connectie.
$query =" SELECT
id,
username
FROM
users
ORDER BY
id
ASC
";
$result = mysql_query( $query );
// Zie: http://www.pfz.nl/wiki/mysql-foutafhandeling-in-php/
if ( false === $result )
{
echo '<p>Er is iets fout gegaan bij het ophalen van de gegevens.<br />';
if ('DEBUG_MODE')
{
echo '<br />Foutmelding: ' . mysql_error() . '
<br />Query: ' . htmlspecialchars( $query );
}
echo '</p>';
}
else
{
$i=1;
while($row = mysql_fetch_assoc($result))
{
if($i == 1)
{
// print de kop met je type en weeknr
?>
<table>
<thead>
<tr>
<th>ID:</th>
<th>Gebruiker:</th>
<th>Verwijder</th>
</tr>
</thead>
<?php
} // end of if{}
// We gaan de kolommen opmaken
?>
<tr>
<td>
<?php echo htmlspecialchars($row['id']) ?>
</td>
<td align="center" valign="top">
<?php echo htmlspecialchars($row['username']) ?>
</td>
<td align="center">
<a href="del_klant.php?id=<?php echo htmlspecialchars($row['id']) ;?>">Verwijder plaatje hier</a>
</td>
</tr>
<?php
//hoog de $i op voor het volgende record
$i++;
} // end of While()
?>
</table>
<?php
} // ens of else()
?>
// Error afhandeling, deze gebruiken bij het testen.
define( 'DEBUG_MODE', true ); // false = uit, true = aan
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
include ("config.php"); // Inladen van de database connectie.
$query =" SELECT
id,
username
FROM
users
ORDER BY
id
ASC
";
$result = mysql_query( $query );
// Zie: http://www.pfz.nl/wiki/mysql-foutafhandeling-in-php/
if ( false === $result )
{
echo '<p>Er is iets fout gegaan bij het ophalen van de gegevens.<br />';
if ('DEBUG_MODE')
{
echo '<br />Foutmelding: ' . mysql_error() . '
<br />Query: ' . htmlspecialchars( $query );
}
echo '</p>';
}
else
{
$i=1;
while($row = mysql_fetch_assoc($result))
{
if($i == 1)
{
// print de kop met je type en weeknr
?>
<table>
<thead>
<tr>
<th>ID:</th>
<th>Gebruiker:</th>
<th>Verwijder</th>
</tr>
</thead>
<?php
} // end of if{}
// We gaan de kolommen opmaken
?>
<tr>
<td>
<?php echo htmlspecialchars($row['id']) ?>
</td>
<td align="center" valign="top">
<?php echo htmlspecialchars($row['username']) ?>
</td>
<td align="center">
<a href="del_klant.php?id=<?php echo htmlspecialchars($row['id']) ;?>">Verwijder plaatje hier</a>
</td>
</tr>
<?php
//hoog de $i op voor het volgende record
$i++;
} // end of While()
?>
</table>
<?php
} // ens of else()
?>
Gewijzigd op 27/02/2013 00:21:35 door Frank WD
spring ook wat beter in met je code het is nu totaal onleesbaar want ik moet haakjes tellen wil ik weten wat waar bij hoort.. en als je moet tellen dan weet je dat het niet goed is...
En het hoort inderdaad niet in een tabel thuis die informatie maar dat is hier al zo vaak gezegd en mensen die leren het maar niet dus dat is gewoon verspilde moeite om uit te leggen ..
@Elwin Het is inderdaad een overzicht.. maar zou je het zien als tabulaire data? Ik twijfel er in dit geval sterk over met name door de verwijder knop.. In een overzicht zou je dan hebben een tabel met 2 kolommen Naam en ID. Wanneer je erachter verwijderen ziet dan is het naar mijn mening geen tabulaire data meer maar een functie in je cms om een gebruiker te verwijderen...
Code (php)
1
2
3
2
3
<?php
echo "<td><a href='del_klant.php?id='".$row['id']."'>Verwijder</a></td></tr>";
?>
echo "<td><a href='del_klant.php?id='".$row['id']."'>Verwijder</a></td></tr>";
?>
De HTML die dan wordt gegenereerd is dus:
Er staan dus 3 quotes in de link, terwijl er maar 2 nodig zijn. Je moet dus de quote na id= weghalen, misschien doet hij het dan al wel meteen.
Gewijzigd op 27/02/2013 07:51:57 door Koen Vlaswinkel
Laten we kijken of dat werkt
Reshad F op 27/02/2013 00:31:29:
@Elwin Het is inderdaad een overzicht.. maar zou je het zien als tabulaire data? Ik twijfel er in dit geval sterk over met name door de verwijder knop.. In een overzicht zou je dan hebben een tabel met 2 kolommen Naam en ID. Wanneer je erachter verwijderen ziet dan is het naar mijn mening geen tabulaire data meer maar een functie in je cms om een gebruiker te verwijderen...
Duidelijk. Kan ik mij in vinden. Echter het feit dat de TS een while() gebruikt doet mij vermoeden dat er meer dan één gebruiker getoond wordt en dus een overzicht is. Maar helemaal duidelijk is dat inderdaad niet, aangezien in het eerste bericht de resultaat uit de query twee keer wordt gebruikt.
Of je vanuit het overzicht wel of niet een optie hebt om een gebruiker te verwijderen is mij om het even. Wij doen verwijder acties altijd vanuit het overzicht, omdat het dan mogelijk is om meerdere items tegelijk te verwijderen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
include '../config.php';
$sql = mysql_query("SELECT * FROM users");
while($row= mysql_fetch_assoc($sql)) {
?>
<table border="1" align="center">
<td>ID: <?php echo $row['id']; ?></td>
<td>Gebruikersnaam: <?php echo $row['username']; ?></td>
<td><a href='del_klant.php?id=<?php echo $row['id']; ?>'>Verwijder</a></td></tr>
<?php
}
?>
include '../config.php';
$sql = mysql_query("SELECT * FROM users");
while($row= mysql_fetch_assoc($sql)) {
?>
<table border="1" align="center">
<td>ID: <?php echo $row['id']; ?></td>
<td>Gebruikersnaam: <?php echo $row['username']; ?></td>
<td><a href='del_klant.php?id=<?php echo $row['id']; ?>'>Verwijder</a></td></tr>
<?php
}
?>
Alleen nu lukt het verwijderen niet. Dit is de code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
include 'config.php';
if ($_GET['id'] == NULL) {
echo "Er is geen waarde om te verwijderen!";
} elseif ($_GET['id'] != NULL) {
$sql = mysql_query ("DELETE FROM users WHERE id=".$_GET['id']);
} elseif ($_GET['id'] != NULL AND $sql == true) {
echo "De gebruiker is uit de database gehaald. Deze wijziging is permanent!";
} else {
echo "Er is een onbekende fout opgetreden!";
}
?>
include 'config.php';
if ($_GET['id'] == NULL) {
echo "Er is geen waarde om te verwijderen!";
} elseif ($_GET['id'] != NULL) {
$sql = mysql_query ("DELETE FROM users WHERE id=".$_GET['id']);
} elseif ($_GET['id'] != NULL AND $sql == true) {
echo "De gebruiker is uit de database gehaald. Deze wijziging is permanent!";
} else {
echo "Er is een onbekende fout opgetreden!";
}
?>
Hij geeft alleen maar een witte pagina
Koen Hollander op 27/02/2013 20:33:24:
Alleen nu lukt het verwijderen niet. Dit is de code:
Hij geeft alleen maar een witte pagina
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
include 'config.php';
if ($_GET['id'] == NULL) {
echo "Er is geen waarde om te verwijderen!";
} elseif ($_GET['id'] != NULL) {
$sql = mysql_query ("DELETE FROM users WHERE id=".$_GET['id']);
} elseif ($_GET['id'] != NULL AND $sql == true) {
echo "De gebruiker is uit de database gehaald. Deze wijziging is permanent!";
} else {
echo "Er is een onbekende fout opgetreden!";
}
?>
include 'config.php';
if ($_GET['id'] == NULL) {
echo "Er is geen waarde om te verwijderen!";
} elseif ($_GET['id'] != NULL) {
$sql = mysql_query ("DELETE FROM users WHERE id=".$_GET['id']);
} elseif ($_GET['id'] != NULL AND $sql == true) {
echo "De gebruiker is uit de database gehaald. Deze wijziging is permanent!";
} else {
echo "Er is een onbekende fout opgetreden!";
}
?>
Hij geeft alleen maar een witte pagina
Als dit scriptje de gebruiker verwijdert krijg je inderdaad een lege pagina.
Scriptje is tevens zo lek als een mandje.
En daarbij ook slecht uitgelijnd, en behoorlijk notice-gevoelig.
Ook kun je hier bijna geen taart van bakken, alles staat op elkaar zonder enige logica.
Kijk ook eens naar de code die ik je heb gegeven.
Daar staat een redelijk nette fout afhandeling in, die je ook zo in je delete pagina kunt proppen.
En zie je gebruikers overzicht pagina nog eens na. Je maakt nu voor elke gebruiker een compleet nieuw <table> aan, terwijl dit niet nodig is.
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
<?php
include 'config.php';
if ( isset ( $_GET[ 'id' ] ) && ctype_digit ( $_GET[ 'id' ] ) ) {
if ( $res = mysql_query ( "DELETE FROM users WHERE id=" . $_GET[ 'id' ] ) ) {
if ( mysql_affected_rows ( ) == 1 ) {
echo 'Gebruiker verwijderd';
}
else {
echo 'Record niet gevonden';
}
}
else {
echo mysql_error ( );
}
}
?>
include 'config.php';
if ( isset ( $_GET[ 'id' ] ) && ctype_digit ( $_GET[ 'id' ] ) ) {
if ( $res = mysql_query ( "DELETE FROM users WHERE id=" . $_GET[ 'id' ] ) ) {
if ( mysql_affected_rows ( ) == 1 ) {
echo 'Gebruiker verwijderd';
}
else {
echo 'Record niet gevonden';
}
}
else {
echo mysql_error ( );
}
}
?>
Koen Vlaswinkel op 27/02/2013 07:51:31:
HTML moet dubbele quotes hebben, PHP enkele.
Ik zou het wel fijn vinden als je niet dit soort onzin loopt te verkondigen op een openbaar forum.
In HTML kun je zowel enkele als dubbele quotes gebruiken, net wat in een bepaalde situatie handiger voor je is. Als je je string opent met een enkele quote, moet je hem uiteraard wel weer met een enkele quote afsluiten, maar dat is eigenlijk de enige beperking.
Voor PHP geldt eigenlijk hetzelfde, alleen zit er nog verschil in de manier waarop de tekst tussen enkele of dubbele quotes wordt verwerkt; bij HTML is dat niet het geval.
In het kader van dit topic zou ik denk ik voor de leesbaarheid de voorkeur geven aan:
Het zou daarom ook in jou geval erg fijn zijn dat je de info wel volledig maakt.
In HTML gebruiken we dubbele qoutes en in PHP enkele qoutes, waarom:
Als je in PHP aanwend om altijd enkele qoutes te gebruiken en in HTML dubbele, dan voorkom je voor je zelf problemen. Want je hoeft de dan niet de qoutes te om zeilen.
Voorbeeld: Wat is netter:
Code (php)
Na mijn weten is de 2e toch wel netter en overzichtelijke.
Als je van mening bent jou manier nog steeds de beste is. Dan zou ik daar graag eens een uitleg van zien.
Gewijzigd op 28/02/2013 17:01:56 door Frank WD
@ Frank: jouw voorbeelden zijn allebei fout. In het eerste voorbeeld moet je escapen met een backslash en in het tweede zet je single quotes binnen single quotes zonder ze te escapen.
Was even te snel met type.