Variabele doorgeven
Wij hebben op onze site een zoekformulier om te zoeken op naam. Dan krijg je een mooie tabel te zien met de gevonden overeenkomsten. Dat ziet er zo uit:
Naam - voornaam - geboortedatum - overlijdensdatum - downloaden - record nr. - type bestand.
Als iemand nu op downloaden klikt krijgt die het betreffende pdf of foto bestand te zien en kan die dat downloaden.
Maar nu willen we een stap verder gaan. Als je op downloaden of een andere uitdrukking zoals "meer info" zou klikken kom je op een pagina terecht waar aan de hand van het record nr. Meer relevante info uit de database getoond wordt.
Het komt erop neer dat ik het recordnr. als variabele moet doorgeven (wil doorgeven) naar een php pagina die dan het betreffende record uitleest.
Ik heb al het net afgezocht maar ik vind niet echt een oplossing. Alleen hoe je uit een formulier de variabelen kunt doorgeven met $Get of $Post.
Ik denk dat de oplossing ligt in zoiets:
Code (php)
1
<td style="text-align:center"><a href="https://fv-vl-ardennen.be/alijst/<?php echo $row["bestandsnaam"]; ?>">Downloaden</a> </td>
Dit is de code om naar een bepaald bestand te gaan maar dit zou iets moeten worden waardoor ik het recordnr. wil doorgeven naar een PHP pagina.
Iemand een tip hoe ik dit kan oplossen?
Gewijzigd op 06/04/2021 09:37:57 door Ignace Verschaeve
Dan link je toch naar een script 'details.php?id=42', waar je de details op weergeeft en een downloadlink?
Kan je mij anders een code voorbeeld geven hoe je dit zou aanpakken. Ik snap het maar als ik code zie.
Toevoeging op 06/04/2021 10:40:59:
Ik heb iets te rap gereageerd denk ik. Verkeerd begrepen. Ik probeer het eens uit. Ben nog veel aan het leren.
Een PDF downloaden en een pagina om details uit de database ophalen, zijn twee aparte dingen.
Je zou bijvoorbeeld een controle hash toe kunnen voegen die je als volgt berekend:
Code (php)
Op de details.php pagina controleer je vervolgens of de meegegeven $_GET['hash'] wel klopt met het gegeven $_GET['id'], en alleen als dat het geval is toon je de gegevens. Op het moment dat iemand nu het id aanpast zal de hash niet kloppen (en hij weet het benodigde "salt" niet), en kan ie dus niet de gegevens van anderen inzien.
Toch bedankt
Je kan bekijken hoe het werkt en waarover het gaat op https://fv-vl-ardennen.be/zoekform01.html
Maar in de toekomst wordt dit nog uitgebreid. Bijvoorbeeld naar huwelijksregisters. Daar spreken we dan van huwelijksdatum, plaats, naam echtgen(o)ote, getuigen enz. Dan kunnen ze zoeken, bijvoorbeeld, op alle namen.
Het komt erop neer dat we mensen willen laten documenten vinden zonder dat ze naar een archief moeten gaan.
Gewijzigd op 06/04/2021 12:12:15 door Ignace Verschaeve
Als je dat uit een database haalt, vergeet de escaping niet.
- Ariën - op 06/04/2021 12:12:11:
Als je dat uit een database haalt, vergeet de escaping niet.
Dat ben ik ook nog aan het uitzoeken hoe ik dat moet aanpakken.
Daarom kunnen ze nu op het zoekformulier alleen maar zoeken op de 26 letters. Zonder tekens of zo. Dus geen aanhalingstekens, slash of backslash enz.
Gebruik je MySQLi (Procedureel of OO), of PDO?
Ik gebruik MySQLi (MariaDB op one.com)
- Ariën - op 06/04/2021 12:27:45:
Gebruik je MySQLi (Procedureel of OO), of PDO?
Je moet PostgreSQL gebruiken, net als ik! :-)
Maar niet elke shared hosting heeft dat helaas.;-)
- Ariën - op 06/04/2021 13:58:35:
Maar niet elke shared hosting heeft dat helaas.;-)
Offtopic: Is dat geen kwestie van vraag en aanbod?
Gewijzigd op 06/04/2021 14:08:06 door Ad Fundum
Ad Fundum op 06/04/2021 14:07:47:
Offtopic: Is dat geen kwestie van vraag en aanbod?
- Ariën - op 06/04/2021 13:58:35:
Maar niet elke shared hosting heeft dat helaas.;-)
Offtopic: Is dat geen kwestie van vraag en aanbod?
MariaDB is zeer populair. En wil je zoiets van Oracle of microsoft is dat extra te betalen. En eens die je vast hebben geraak je moeilijk uit hun klauwen. Dat is een beetje zoals die cloud oplossingen. Eens je er bent kan je moeilijk overstappen naar een andere oplossing.
Maar inderdaad off topic.
Maar ik nu wel iets gevonden om mee te werken. Ik leer nu op mijn 68, CSS, HTML, PHP en Mysqli. Ik heb tenslotte nooit enige informatica opleiding gehad tenzij na mijn 56. Maar tenslotte al bezig met PC en internet sinds 1989.
En hetgeen ik nu doe is een mooie uitdaging die beetje bij beetje groeit.
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
// procedureel
$waarde = mysqli_real_escape_string($conn, $_GET['waarde']);
// of
// object-oriënted
$waarde = $mysqli->real_escape_string($_GET['waarde'])
// waarbij je $waarde gebruikt, netjes tussen single-quotes en buiten buiten je algemene quote.
// dus in procedurele vorm: mysqli_query($conn, "SELECT field1, field 2 FROM table WHERE id = '".$waarde."'");
?>
// procedureel
$waarde = mysqli_real_escape_string($conn, $_GET['waarde']);
// of
// object-oriënted
$waarde = $mysqli->real_escape_string($_GET['waarde'])
// waarbij je $waarde gebruikt, netjes tussen single-quotes en buiten buiten je algemene quote.
// dus in procedurele vorm: mysqli_query($conn, "SELECT field1, field 2 FROM table WHERE id = '".$waarde."'");
?>
Code (php)
1
2
3
4
2
3
4
$Naam=$_POST[Naam];
$sql = "SELECT * FROM rouwbrief Where Naam LIKE '$Naam%' ORDER BY Naam ASC,Voornaam ASC";
$result = $conn->query($sql);
$sql = "SELECT * FROM rouwbrief Where Naam LIKE '$Naam%' ORDER BY Naam ASC,Voornaam ASC";
$result = $conn->query($sql);
Ik vermoed nu dat ik de eerste lijn in die code moet vervangen door die object-oriented oplossing. En uiteraard $GET vervangen door $POST.
Ben ik mee of niet. Zeg het maar.
Gewijzigd op 06/04/2021 16:30:52 door Ignace Verschaeve
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$waarde = $conn->real_escape_string($_POST['Naam']);
$sql = "SELECT * FROM rouwbrief WHERE Naam LIKE '".$Naam."%' ORDER BY Naam ASC,Voornaam ASC";
$result = $conn->query($sql);
?>
$waarde = $conn->real_escape_string($_POST['Naam']);
$sql = "SELECT * FROM rouwbrief WHERE Naam LIKE '".$Naam."%' ORDER BY Naam ASC,Voornaam ASC";
$result = $conn->query($sql);
?>
- Altijd je indexes in je globals tussen quotes, dus $_POST['naam'] in plaats van $_POST[naam]. Anders denkt PHP dat het een constante is.
- Variabelen buiten quotes. Het maakt het een stuk leesbaarder.
- SQL functies bij voorkeur in hoofdletters.
Toevoeging op 07/04/2021 10:45:17:
- Ariën - op 06/04/2021 09:46:10:
Je wilt dus niet direct iets downloaden?
Dan link je toch naar een script 'details.php?id=42', waar je de details op weergeeft en een downloadlink?
Dan link je toch naar een script 'details.php?id=42', waar je de details op weergeeft en een downloadlink?
Hoe kan ik dan op die pagina alles weergeven uit die record?
Ik stuur ze dus door naar 'details.php?id=recordnummer'
Doe ik dan zoiets op die pagina:
Code (php)
1
2
3
2
3
$recordnummer.=$_GET[id];
$sql = "SELECT * FROM Huwelijken Where $recordnummer. = 'nr.' ";
$sql = "SELECT * FROM Huwelijken Where $recordnummer. = 'nr.' ";
Zodat ik dan het betreffen record volledig kan uitlezen?
Is mijn redenering fout of juist? Ik weet het even niet meer.
Maar ik krijg mijn code niet goed om mijn record uit te lezen. Er zit iets fout maar ik vind niet wat.
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
<?php
//Inladen van de instellingen.
include 'instellingen.php';
$conn = new mysqli($database_adres, $database_login_naam, $database_login_wachtwoord, $database_naam);
//connectie testen
if ($conn->connect_error)
{
die("verbinding mislukt: ".$conn->connect_error);
}
$nr.=$_GET[id];
echo "test1 "; echo "$nr.";
$sql = "SELECT * FROM Huwelijken Where nr. = '$nr.'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {while($row = $result->fetch_assoc()) {
echo "<br> id: ".$row["nr."].
"Naam: " .$row["Naam1"]
.$row["Voornaam1"]
.$row["Naam2"]
.$row["Voornaam2"]
.$row["Gemeente"]
.$row["Datum"].
"<br>" ;
}
}
else{echo " nul resultaten";
}
// Sluit de MySQL verbinding.
$conn->close();
echo "<br>-- Einde! --";
?>
Vergelijk het gebruik van de punt(.) in regel 11.
OK gaan we bekijken.