Door
Ignace Verschaeve
op 06-04-2021 09:36
gewijzigd op 06-04-2021 09:37
3.684 views
Ik weet niet of ik aan het juiste adres ben maar ik probeer het toch maar.
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.
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?
Gebruik ook een goede editor, en gebruik dan de 'code identing' functie, zodat je script netjes wordt uitgelijnd.
Als ik twee accolades onder elkaar op één lijn zie, dan krijg ik al kriebels....
Nu is je script nog compact, maar als je op deze voet verder gaat neemt het de vorm aan van spaghetti.
De punt na een variabele wordt gebruikt om waardes bij een toekenning aan elkaar te plakken:
<?php
$getal = "1, ";
$getal .= "2, ";
$getal .= "3, zie jij wat ik zie?";
echo $getal;
?>
dus "nr." is geen valide naam voor een kolom. Natuurlijk krijg je zo'n beetje elk raar teken wel in een kolomnaam verwerkt als je hem tussen `` zet, maar zoals je hier ziet: die vergeet je al snel (nog afgezien van dat je query vaak onnodig veel langer wordt als je alle kolomnamen dan maar tussen die `` zet.
De punt staat bij NO
Wat op zich niet raar is, aangezien die gebruikt kan worden om een tabelnaam en kolomnaam aan elkaar te knopen:
SELECT tab.kolom FROM tab WHERE tab.id = 10
En bij "nr." moet mysql dan gaan raden, of je de tabel nr bedoelde en de kolomnaam vergeten was achter de punt, of dat je de tabelnaam vergeten bent in de query.
<?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);
}
$nummer=$_GET[id];
echo "test1 "; echo "$nummer";
$sql = "SELECT * FROM Huwelijken Where 'nr.' = $nummer";
$result = $conn->query($sql);
if ($result->num_rows > 0) {while($row = $result->fetch_assoc()) {
echo 'Dag allemaal';
$row["nr."];
$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! --";
?>
Ik slaag er dus in om die ID te zien. Ik kan deze op het scherm tonen. Maar ik slaag er niet in om het record met dat nr. uit te lzeen.
Ergens ga ik in de fout vanaf "Select * From ........
Maar ik vind potverdorie niet waar het misloopt.
Ja, de veldnaaam is nr. En die zoekcode heb ik overgenomen uit PHPAdmin. Ik ga het eens proberen met de veldnaam Naam1 mee te geven als ID. Misschien lukt het daarmee.
Waar gebruik je dat veld voor? In het algemeen is het een ongeschreven regel dat het ID genoemd wordt, als het een uniek oplopend getal (auto-increment) is.
Ik betwijfel of een punt wel kan, omdat het in SQL ook de scheiding is tussen databases en tabellen.
Maar dat mag wel als je de kolomnaam tussen backtics zet.
Helaas is dat waarschijnlijk gebeurd.
Maar in de post van 10:17 zien we single quotes ipv backtics om de kolomnaam.
en omdat de string bestaande uit de letters n r en een punt nooit gelijk is aan $nummer, vind je niets....
Ik ga het eens hernoemen. Beginnersfouten zeker? Ik heb nog heel veel te leren maar het is boeiend. En op het net vind je zoveel informatie maar ook niet altijd het juiste omdat die soms al verouderd is en de syntax nu niet meer gebruikt wordt enz.
Een punt in een veld is naar mijn weten nooit gebruikelijk geweest.
Als we het veld hernoemen naar een ID, dan komen we uit op deze query:
<?php
$nummer= $conn->real_escape_string($_GET['id']);
$sql = "SELECT * FROM Huwelijken WHERE ID = '".$nummer."'";
?>
- Allereerst haal ik je $nummer buiten quotes. Omdat dit vrij gebruikelijk is voor variabelen, en minder foutgevoeliger tijdens programmeren.
- Daarnaast is het een waarde die tussen single-quotes moet, ik beveel het althans altijd aan.
- En je moet de waarde nog escapen tegen SQL-injection.