Record kiezen
vriendelijke groet,
jacques jansen.
Deze in een link zetten misschien? post anders wat relevante code dan kunnen we daarop advies geven.
Het in een link zetten had ik zoals u kunt zien zelf ook bedacht , maar ik doe kennelijk iets niet goed, want als ik deze link aan klik is het resultaat een websitepagina zonder dat het record in beeld komt.
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
$sql="select naam, voorl, tussenv, email1 from leden ";
$res=mysql_db_query("$db","$sql",$mysql_id);
$fout=mysql_errno($mysql_id);
if ($fout != 0) {
$fout=mysql_error($mysql_id);
echo '<font color="#FF2306">' . $fout . '</font>';
mysql_close($mysql_id);
echo '</body></html>';
exit;
}
$aantal_lijnen=mysql_num_rows($res);
$aantal_velden=mysql_num_fields($res);
echo '<table border=1 celpadding=2 width="90%" class="letter">';
echo "";
while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
echo '<tr>';
echo "<td class='letter'><a href=\"lid.php?naam=$naam\">$row[0]</a><td>";
echo "<td class='letter'>$row[1]<td>";
echo "<td class='letter'>$row[2]<td>";
echo "<td class='letter'>$row[3]<td>";
echo "</tr>"
}
echo "</table>";
Vervolgens in lid.php
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
$sql="select * from leden where naam = 'naam' ";
$res=mysql_db_query("$db","$sql",$mysql_id);
$fout=mysql_errno($mysql_id);
if ($fout != 0) {
$fout=mysql_error($mysql_id);
echo '<font color="#FF2306">' . $fout . '</font>';
mysql_close($mysql_id);
echo '</body></html>';
exit;
}
$aantal_lijnen=mysql_num_rows($res);
$aantal_velden=mysql_num_fields($res);
echo '<table border=1 celpadding=2 width="90%" class="letter">';
echo "";
echo"<tr>";
echo "<td class='letter'>$row[1]<td>";
echo "<td class='letter'>$row[2]<td>";
echo "<td class='letter'>$row[3]<td>";
echo "</tr>";
echo "</table>";
?>
Dat wat uitgeprint moet worden, moet natuurlijk nog worden uitgewerkt.
Hopelijk kunt u hier wat mee.
vriendelijke groet
Jacques Jansen
Probeer je records een ID mee te geven. Zet daar auto_increment op en een unique index. Vervolgens plaats je in je lijn de volgende code:
Code (php)
1
<?php echo '<td class="letter"><a href="bekijk_gegevens.php?record_id' . $row[id] . '>Klik hier om gegevens op aparte pagina te weergeven <td>'; ?>
Je maakt een nieuwe pagina aan en die noem je bekijk_gegevens.php en op deze pagina zet je de volgende code:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$result = mysql_query ("SELECT waarde1, waarde2, waarde3 FROM tabel_naam WHERE id='$_GET[record_id]'");
?>
$result = mysql_query ("SELECT waarde1, waarde2, waarde3 FROM tabel_naam WHERE id='$_GET[record_id]'");
?>
De rest kan je zelf wel neem ik aan?
Op de volgende pagina komt de foutmelding: queri was empty.
Het werkt dus niet goed
jacque jansen
Laat eens zien wat je nu hebt.
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
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
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
$sql="select naam, voorl,email1 from leden order by id desc";
$res=mysql_db_query("$db","$sql",$mysql_id);
$fout=mysql_errno($mysql_id);
if ($fout != 0) {
$fout=mysql_error($mysql_id);
echo '<font color="#FF2306">' . $fout . '</font>';
mysql_close($mysql_id);
echo '</body></html>';
exit;
}
$aantal_lijnen=mysql_num_rows($res);
$aantal_velden=mysql_num_fields($res);
echo '<table border=1 celpadding=2 width="90%" class="letter">';
echo "";
while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
echo '<tr>';
echo "<td class='letter'><a href=\"lid.php?record_id' . $row[id] . '>Kies lid </a><td>";
echo "<td class='letter'>$row[0]<td>";
echo "<td class='letter'>$row[1]<td>";
echo "<td class='letter'>$row[2]<td>";
echo "<td class='letter'>$row[3]<td>";
echo "</tr>";
}
echo "</table>";
$sql="select naam, voorl,email1 from leden order by id desc";
$res=mysql_db_query("$db","$sql",$mysql_id);
$fout=mysql_errno($mysql_id);
if ($fout != 0) {
$fout=mysql_error($mysql_id);
echo '<font color="#FF2306">' . $fout . '</font>';
mysql_close($mysql_id);
echo '</body></html>';
exit;
}
$aantal_lijnen=mysql_num_rows($res);
$aantal_velden=mysql_num_fields($res);
echo '<table border=1 celpadding=2 width="90%" class="letter">';
echo "";
while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
echo '<tr>';
echo "<td class='letter'><a href=\"lid.php?record_id' . $row[id] . '>Kies lid </a><td>";
echo "<td class='letter'>$row[0]<td>";
echo "<td class='letter'>$row[1]<td>";
echo "<td class='letter'>$row[2]<td>";
echo "<td class='letter'>$row[3]<td>";
echo "</tr>";
}
echo "</table>";
De code waarnaar de link wordt verwezen is als volgt:
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
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
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
$result = mysql_query ("SELECT * FROM leden WHERE id='$_GET[record_id]'");
$res=mysql_db_query("$db","$sql",$mysql_id);
$fout=mysql_errno($mysql_id);
if ($fout != 0) {
$fout=mysql_error($mysql_id);
echo '<font color="#FF2306">' . $fout . '</font>';
mysql_close($mysql_id);
echo '</body></html>';
exit;
}
$aantal_lijnen=mysql_num_rows($res);
$aantal_velden=mysql_num_fields($res);
echo '<table border=1 celpadding=2 width="90%" class="letter">';
echo "";
echo"<tr>";
echo "<td class='letter'>$row[1]<td>";
echo "<td class='letter'>$row[2]<td>";
echo "<td class='letter'>$row[3]<td>";
echo "</tr>";
$result = mysql_query ("SELECT * FROM leden WHERE id='$_GET[record_id]'");
$res=mysql_db_query("$db","$sql",$mysql_id);
$fout=mysql_errno($mysql_id);
if ($fout != 0) {
$fout=mysql_error($mysql_id);
echo '<font color="#FF2306">' . $fout . '</font>';
mysql_close($mysql_id);
echo '</body></html>';
exit;
}
$aantal_lijnen=mysql_num_rows($res);
$aantal_velden=mysql_num_fields($res);
echo '<table border=1 celpadding=2 width="90%" class="letter">';
echo "";
echo"<tr>";
echo "<td class='letter'>$row[1]<td>";
echo "<td class='letter'>$row[2]<td>";
echo "<td class='letter'>$row[3]<td>";
echo "</tr>";
Wat betreft de laatste regels van de (print)code; deze moeten natuurlijk nog uitgewerkt worden
Ik hoop dat ik nu duidelijker ben
met vriendelijke groet,
jacques jansen
Je gebruikt enkele quotes ' en dubbele " door elkaar, op regel 23 zet je '<tr>' en op de volgende regels gebruik je in eens dubbelen ". Vuistregel is echo's zijn enkele quotes ' HTML zijn dubbele quotes ". Dan hoef je ze ook niet te escapen met \".
Tweede script escape je de input van je query niet ($_GET[record_id]) en het moet zijn $_GET['record_id'] (zie enkele quotes om record_id). Het is slimmer om in he while lus de variabelen ($row[1], etc) uit de echo te halen.
Omsluit de code die je post met php tags:
Dus [code]<?php
... (de code)
?>[/code]
Als je de waarde van een kolom wilt gebruiken moet die kolom opgeven in de select list, dus:
SELECT id, naam, voorl, email1 FROM ....
In je eerste script gebruik je:
Code (php)
1
2
3
4
2
3
4
<?php
$row = mysql_fetch_array($res, MYSQL_NUM)
//dit is hetzelfde als mysql_fetch_row($res)
?>
$row = mysql_fetch_array($res, MYSQL_NUM)
//dit is hetzelfde als mysql_fetch_row($res)
?>
Daarna probeer je de waarde op te halen met $row['id']
Die bestaat dus niet, en als je display_errors aan had staan had je een melding undefined index 'id' gekregen.
Gewijzigd op 13/12/2012 13:46:17 door Ger van Steenderen
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
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
<?php
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
$sql="select id, naam, voorl,email1 from leden order by id desc";
$res=mysql_db_query("$db","$sql",$mysql_id);
$fout=mysql_errno($mysql_id);
if ($fout != 0) {
$fout=mysql_error($mysql_id);
echo '<font color="#FF2306">' . $fout . '</font>';
mysql_close($mysql_id);
echo '</body></html>';
exit;
}
$aantal_lijnen=mysql_num_rows($res);
$aantal_velden=mysql_num_fields($res);
echo '<table border=1 celpadding=2 width="90%" class="letter">';
while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
echo '<tr>';
echo "<td class='letter'><a href=lid.php?record_id' . $row[id] . '>Kies lid </a><td>";
echo "<td class='letter'>$row[0]<td>";
echo "<td class='letter'>$row[1]<td>";
echo "<td class='letter'>$row[2]<td>";
echo "<td class='letter'>$row[3]<td>";
echo '</tr>';
}
echo '</table>';
?>
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
$sql="select id, naam, voorl,email1 from leden order by id desc";
$res=mysql_db_query("$db","$sql",$mysql_id);
$fout=mysql_errno($mysql_id);
if ($fout != 0) {
$fout=mysql_error($mysql_id);
echo '<font color="#FF2306">' . $fout . '</font>';
mysql_close($mysql_id);
echo '</body></html>';
exit;
}
$aantal_lijnen=mysql_num_rows($res);
$aantal_velden=mysql_num_fields($res);
echo '<table border=1 celpadding=2 width="90%" class="letter">';
while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
echo '<tr>';
echo "<td class='letter'><a href=lid.php?record_id' . $row[id] . '>Kies lid </a><td>";
echo "<td class='letter'>$row[0]<td>";
echo "<td class='letter'>$row[1]<td>";
echo "<td class='letter'>$row[2]<td>";
echo "<td class='letter'>$row[3]<td>";
echo '</tr>';
}
echo '</table>';
?>
Ik heb dus id toegevoegd aan de select regel De while-lus werkt nu weer Ik weet niet hoe ik $row[1] etc uit de echo moet halen.
Het tweede script heb ik in de geadviseerde zin gewijzigd ik krijg dan echter de volgende foutmelding:
"Parse error: syntax error, unexpected '"' in /home/vhosts/logerosaalba.nl/httpdocs/lid.php on line 18" Hier komt de code:
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
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
<?php
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
$result = mysql_query "(SELECT * FROM leden WHERE id='$_GET['record_id'] '');
$res=mysql_db_query("$db","$sql",$mysql_id);
$fout=mysql_errno($mysql_id);
if ($fout != 0) {
$fout=mysql_error($mysql_id);
echo '<font color="#FF2306">' . $fout . '</font>';
mysql_close($mysql_id);
echo '</body></html>';
exit;
}
$aantal_lijnen=mysql_num_rows($res);
$aantal_velden=mysql_num_fields($res);
echo '<table border=1 celpadding=2 width="90%" class="letter">';
echo "";
echo"<tr>";
echo "<td class='letter'>$row[1]<td>";
echo "<td class='letter'>$row[2]<td>";
echo "<td class='letter'>$row[3]<td>";
echo "</tr>";
echo "</table>";
?>
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
$result = mysql_query "(SELECT * FROM leden WHERE id='$_GET['record_id'] '');
$res=mysql_db_query("$db","$sql",$mysql_id);
$fout=mysql_errno($mysql_id);
if ($fout != 0) {
$fout=mysql_error($mysql_id);
echo '<font color="#FF2306">' . $fout . '</font>';
mysql_close($mysql_id);
echo '</body></html>';
exit;
}
$aantal_lijnen=mysql_num_rows($res);
$aantal_velden=mysql_num_fields($res);
echo '<table border=1 celpadding=2 width="90%" class="letter">';
echo "";
echo"<tr>";
echo "<td class='letter'>$row[1]<td>";
echo "<td class='letter'>$row[2]<td>";
echo "<td class='letter'>$row[3]<td>";
echo "</tr>";
echo "</table>";
?>
Voorbeeld van mijn script (stond toch open):
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$result1 = mysql_query ("SELECT * FROM main_page WHERE id=1");
$row1 = mysql_fetch_assoc($result1);
echo $row1['titel']. "<br />";
echo $row1['main_tekst'];
?>
$result1 = mysql_query ("SELECT * FROM main_page WHERE id=1");
$row1 = mysql_fetch_assoc($result1);
echo $row1['titel']. "<br />";
echo $row1['main_tekst'];
?>
Variabelen horen niet tussen quotes. Alle quotes op bovenstaande regel moeten gewoon weg.
Van deze quotes klopt helemaal niets. Wees netjes en consequent:
En hier mis je een aantal quotes:
Moet zijn:
Gewijzigd op 13/12/2012 19:45:46 door Erwin H
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
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
<?php
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
$result1 = mysql_query ("SELECT * FROM main_page WHERE id=1");
$row1 = mysql_fetch_assoc($result1);
echo $row1['titel']. "<br />";
echo $row1['main_tekst'];
$result = mysql_query ('SELECT * FROM leden WHERE id='.$_GET['record_id']);
$res=mysql_db_query("$db","$sql",$mysql_id);
$fout=mysql_errno($mysql_id);
if ($fout != 0) {
$fout=mysql_error($mysql_id);
echo '<font color="#FF2306">' . $fout . '</font>';
mysql_close($mysql_id);
echo '</body></html>';
exit;
}
$aantal_lijnen=mysql_num_rows($res);
$aantal_velden=mysql_num_fields($res);
echo '<table border=1 celpadding=2 width="90%" class="letter">';
echo "";
echo"<tr>";
echo "<td class='letter'>$row[1]<td>";
echo "<td class='letter'>$row[2]<td>";
echo "<td class='letter'>$row[3]<td>";
echo "</tr>";
echo "</table>";
?>
$mysql_id=mysql_connect("$dbhost","$dbuser","$dbpass");
$result1 = mysql_query ("SELECT * FROM main_page WHERE id=1");
$row1 = mysql_fetch_assoc($result1);
echo $row1['titel']. "<br />";
echo $row1['main_tekst'];
$result = mysql_query ('SELECT * FROM leden WHERE id='.$_GET['record_id']);
$res=mysql_db_query("$db","$sql",$mysql_id);
$fout=mysql_errno($mysql_id);
if ($fout != 0) {
$fout=mysql_error($mysql_id);
echo '<font color="#FF2306">' . $fout . '</font>';
mysql_close($mysql_id);
echo '</body></html>';
exit;
}
$aantal_lijnen=mysql_num_rows($res);
$aantal_velden=mysql_num_fields($res);
echo '<table border=1 celpadding=2 width="90%" class="letter">';
echo "";
echo"<tr>";
echo "<td class='letter'>$row[1]<td>";
echo "<td class='letter'>$row[2]<td>";
echo "<td class='letter'>$row[3]<td>";
echo "</tr>";
echo "</table>";
?>
Dit script leidt tot de volgende fout melding:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/vhosts/logerosaalba.nl/httpdocs/lid.php on line 13
Daar onder staat overigens: queri was empty. Blijkbaar is het nog niet gelukt om de juiste variabele van de ene naar de andere pagina te brengen.
Wat betreft de opmerkingen van Erwin H, Dat gewone slordig programmeren is over genomen van het leerboekje "PHP 5 in 10 minuten" geschreven door Serge Terryn 2006 En wat slordigheid betreft, juist om zoveel mogelijk fouten te voorkomen probeer ik zoveel mogelijk code te kopiëren. Dat heb ik ook gedaan met je 2e opmerking betreffende de $_GET['record_id'] zoals je hierboven in het script kunt zien. Het resultaat is echter de boodschap "Query was empty" Ik ben dus nog niet veel opgeschoten
Vriendelijke groet,
Jacques Jansen
Jacques jansen op 13/12/2012 23:16:52:
Wat betreft de opmerkingen van Erwin H, Dat gewone slordig programmeren is over genomen van het leerboekje "PHP 5 in 10 minuten" geschreven door Serge Terryn 2006
Daar komt dus al die onzin vandaan om variabelen tussen quotes te zetten. Geen probleem dat je het eerst uit een boekje haalt, maar dan mag je nu leren dat niet meer te doen. Een variabele alleen tussen quotes zetten dient geen enkel doel, het is slordig, kost je meer tijd en meer karakters en levert je in de meeste normale programmeertalen direct een foutmelding op. Afleren dus. Wil je het toch blijven doen, probeer jezelf dan eens uit te leggen waarom je het doet, welk doel het dient.
Dan verder met het echte probleem. Als er iets niet gebeurt dan kan je dat natuurlijk hier uiteenzetten, beter is om gewoon even te gaan debuggen. Een paar simpele stappen lossen vaak al een groot deel van het probleem op.
Stap 1: komt de executie van het script wel op de plaatsen die je wilt. Om dat te testen kan je op het punt waar het om gaat even zetten:
Het script stopt direct na de exit, maar het gaan erom dat je die tekst ziet. Zo ja, dan ben je waar je wezen moet. Zie je het niet dan gaat er daarvoor al iets fout. Zo loop je door je hele script heen (blok voor blok, of regel voor regel als het nodig is) en controleer je dus snel en simpel of de hele executie loopt zoals jij denkt dat het zou moeten.
Stap 2: ben je dan nog niet uit de problemen dan ga je variabelen echo'en. Zo kan je controleren of je wel in de variabelen hebt zitten wat je verwacht. Op de punten waar het fout gaat echo je dus gewoon die variabelen die blijkbaar niet correct zijn. In jouw geval zou ik direct aan het begin al beginnen met de inhoud van $_GET eens te printen, dus:
De exit gooit je er direct weer uit, maar krijg je dan te zien wat je denkt? Krijg je dat record_id te zien?
Ik denk het niet. En wel om de doodeenvoudige reden van het slordig omgaan met quotes:
Code (php)
1
2
3
2
3
<?php
echo "<td class='letter'><a href=lid.php?record_id' . $row[id] . '>Kies lid </a><td>";
?>
echo "<td class='letter'><a href=lid.php?record_id' . $row[id] . '>Kies lid </a><td>";
?>
Hier komt namelijk niet uit wat jij denkt en daarmee krijg je niet de gegevens uit de database. Leer dus correct te quoten.
Gewijzigd op 14/12/2012 00:25:22 door Erwin H
Er is mij geleerd om tijdens een echo bijna altijd single quote ' te gebruiken. Ook i.v.m. HTML die je tussendoor gebruikt. Kijk naar de kleuren in onderstaand voorbeeld.
Code (php)
Als ik jouw code simpel in een PHP bestand gooi word mijn link:
http://localhost/porto/lid.php?record_id' (hierachter mis je een ID, daarom weet de GET niet wat hij moet gebruiken)
Nu doe ik mijn code en krijg ik:
http://localhost/porto/lid.php?record_id=50 (mijn code weet dat hij ID 50 moet gebruiken)
Vergeet ook de = teken niet. Die staat ook niet in je code anders krijg je: http://localhost/porto/lid.php?record_id50
Als je mijn codes gebruikt, zal het wel lukken. Kopieer en plak het niet als je niet begrijpt wat de code betekend. Heb ik ook erg vaak voor op mijn kop gehad. Ja gemakzucht is fijn, maar je hebt meer trots als je van je eigen succes geniet :)
EDIT: Had een foutje in mijn code
Gewijzigd op 14/12/2012 02:05:19 door Donny Wie weet
Code (php)
1
2
3
4
2
3
4
<?php
//Jouw code:
echo "<td class='letter'><a href='lid.php?record_id={$row['id']}'>Kies lid </a><td>";
?>
//Jouw code:
echo "<td class='letter'><a href='lid.php?record_id={$row['id']}'>Kies lid </a><td>";
?>
php parsed namelijk de string tussen double quotes op zoek naar variabelen (in dit geval $row['id']). de brackets vertellen php het begin en einde van de variabele.
Overigens zou ik hier mysql_real_escape gebruiken ivm mysql injection:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
//Jouw code:
$row['id'] = mysql_real_escape_string($row['id']);
echo "<td class='letter'><a href='lid.php?record_id={$row['id']}'>Kies lid </a><td>";
?>
//Jouw code:
$row['id'] = mysql_real_escape_string($row['id']);
echo "<td class='letter'><a href='lid.php?record_id={$row['id']}'>Kies lid </a><td>";
?>
Gewijzigd op 14/12/2012 09:24:25 door No One
Die HTML van jou is nog steeds fout, want je dient dubbele quotes te gebruiken voor HTML attributen, geen enkele.
Daarnaast gebruik je mysql_real_escape_string bij het invoeren van een query, niet bij data die je net uit de database haalt. Hoe kan je nu SQL injectie hebben bij data die uit de database komt??
Gewijzigd op 14/12/2012 10:10:43 door Erwin H
Erwin H op 14/12/2012 10:10:07:
@Henze
Die HTML van jou is nog steeds fout, want je dient dubbele quotes te gebruiken voor HTML attributen, geen enkele.
Daarnaast gebruik je mysql_real_escape_string bij het invoeren van een query, niet bij data die je net uit de database haalt. Hoe kan je nu SQL injectie hebben bij data die uit de database komt??
Die HTML van jou is nog steeds fout, want je dient dubbele quotes te gebruiken voor HTML attributen, geen enkele.
Daarnaast gebruik je mysql_real_escape_string bij het invoeren van een query, niet bij data die je net uit de database haalt. Hoe kan je nu SQL injectie hebben bij data die uit de database komt??
je hebt gelijk...was er met mijn hoofd niet bij. je moet htmlentities of iets in die richting gebruiken voor bescherming tegen een andere aanval ;)
over die singlequotes: ja, maar geen enkele browser struikelt er over. desnoods doe je \" op plaatsen waar het html betreft
Gewijzigd op 14/12/2012 10:23:58 door No One
Over het quote gebruik, al die relaxte regels zijn nu juist zo funest. Daardoor gaan bijna alle beginners de fout in met het quoten (en zie je dat hier dagelijks). Daarom kan het misschien wel, maar blijf ik het in elk geval verstandig vinden om standaarden aan te houden. Krijgen we morgen dan een browser die er wel over struikelt hoef je in elk geval niet al je scripts langs te lopen om het correct te zetten.
Henze Berkheij op 14/12/2012 10:23:04:
... je moet htmlentities of iets in die richting gebruiken voor bescherming tegen een andere aanval ;)...
Probeer toch goed te beseffen welke functie je waarvoor gebruikt. Gebruik die niet door mekaar.
- mysql_real_escape_string: dit beschermt de integriteit van een SQL string.
bv:
Code (php)
1
<?php mysql_query("SELECT id, username, email FROM users WHERE user='" . mysql_real_escape_string($_POST['username']) . "'"); ?>
-> wat de functie vooral doet, is de ' en " omvormen tot ongevaarlijke tekens.
- htmlentities: dit beschermt de integriteit van van de HTML-structuur.
bv.
-> HTML-tekens worden omgezet. Tekens als < / > " ' = ...
- casten:
Gaat het om een numerieke waarde? Vergeet dan al die string functies. Gebruik intval() voor int ofwel intfloat() voor niet-gehele getallen.
bv.
Code (php)
Het ergste wat kan overkomen, is dat een boosaardige waarde wordt omgezet in 0.
- urlencode: dit genereert tekens die ongevaarlijk zijn in een url-balk.
bv.
-> tekens als ? = & ... worden omgezet.
Volledige uitleg van al die functies en betere voorbeelden? zie php.net
Gewijzigd op 14/12/2012 11:11:47 door Kris Peeters
Toevoeging op 14/12/2012 11:41:15:
@Kris, jaja...ik was alleen nog niet wakker...de koffieautomaat werkte even niet naar behoren ;)