Ik heb een toevoeg systeem voor informatie dat werkt met ID's. Ik heb nu een script gemaakt waar de titel en tekst goed worden ingevuld, maar het ID moet ook worden ingevuld. Ik wil dit niet zelf typen, maar ik wil het laatste ID uit die tabel hebben +1.
Even voor de duidelijkheid, ik wil dus weten hoe je het laatste ID uit de database kan krijgen.
Dit heb ik nu ongeveer gescript, maar het lukt mij niet om de variablen te laten zien in een text vak. Ik weet dat dit natuurlijk van geen meter klopt, maar volgens mij is het get gebeuren wel goed:
<?php
if (!@mysql_select_db("minimachine", @mysql_connect("localhost", "minimachine", "xxx")))
{
echo "Er kan geen database connectie gemaakt worden.";
exit();
}
$sql = "
SELECT
id,
titel,
tekst
FROM
zoeken
WHERE
id ='".$_GET['id']."'";
$res = mysql_query($sql) or die(mysql_error());
while ($row = mysql_fetch_array($res))
{
<input type="text" name="titel" size="16" value=".$row['id'].">
}
?>
<?
// goed:
echo '<input type="text" name="titel" size="16" value="'.$row['id'].'">';
?>
De while is overigens niet nodig, je haalt (hopelijk) slechts 1 record op en je zou van het input-veld een array moeten maken. Anders kun je de gegevens nooit meer posten naar de server. Laat in dit geval gewoon de while-lus weg, wel zo eenvoudig.
Je gooit namelijk direcht de html door je php script zonder te echo-en. Daarmee loop je geheit syntax errors op.
Verder wil je 1 record (variabele zoals je het noemt) ophalen. Hier heb je geen while voor nodig simpelweg omdat je maar 1 resultaat hebt als het goed is.
if (!@mysql_select_db("minimachine", @mysql_connect("localhost", "minimachine", "xxx")))
{
echo "Er kan geen database connectie gemaakt worden.";
exit();
}
$sql = "SELECT
id,
titel,
tekst
FROM
zoeken
WHERE
id ='".mysql_real_escape_string($_GET['id'])."'";
$res = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($res) == 1){
echo '<input type="text" name="titel" size="16" value="'.$row['id'].'">';
}else{
echo 'Er is geen resultaat dat aan je voorwaarden voldoet';
}
?>
Hij gaf een foutmeldingvan line 2, die heb ik verwijdert en toen gaf die niets meer. Maar nu heb ik id=1 ingevuld, maar nu geeft ie in het tekstveld helemaal niets. Hoe kan dit?
<?php
if (!@mysql_select_db("minimachine", @mysql_connect("localhost", "minimachine", "xxx")))
{
echo "Er kan geen database connectie gemaakt worden.";
exit();
}
$sql = "SELECT
id,
titel,
tekst
FROM
zoeken
WHERE
id ='".mysql_real_escape_string($_GET['id'])."'";
$res = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($res) == 1){
echo '<input type="text" name="id" size="16" value="'.$row['id'].'"><br>';
echo '<input type="text" name="titel" size="16" value="'.$row['titel'].'"><br>';
echo '<input type="text" name="tekst" size="16" value="'.$row['tekst'].'"><br>';
}else{
echo 'Er is geen resultaat dat aan je voorwaarden voldoet';
}
?>
Nu fetch je helemaal nergens meer. Je hebt nu zowel de lus als het fetchen weggegooid... Zet dus nog wel even de volgende regel in je code:
$row = mysql_fetch_assoc($res);
Dat hoeft niet in een lus, je haalt slechts 1 record op.
if (!@mysql_select_db("minimachine", @mysql_connect("localhost", "minimachine", "xxx")))
{
echo "Er kan geen database connectie gemaakt worden.";
exit();
}
$sql = "SELECT
id,
titel,
tekst
FROM
zoeken
WHERE
id ='".mysql_real_escape_string($_GET['id'])."'";
$res = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($res) == 1){
$row = mysql_fetch_array($res);
echo '<input type="text" name="titel" size="16" value="'.$row['id'].'">';
}else{
echo 'Er is geen resultaat dat aan je voorwaarden voldoet';
}
?>
@Crispijn: mysql_fetch_array() maakt 2 array's aan (associatieve array en een numerieke array), mysql_fetch_assoc() slechts 1 array (associatieve array). En dat is meer dan genoeg! Dus sneller en kost minder geheugen.
Daarnaast kan de array-variant onverwachte resultaten opleveren wanneer je bv. met $row[2] (de numerieke array) aan de slag gaat, dan ligt het aan de query wat er in key 2 aan data staat. De volgorde in je SQL maakt dan ineens nogal wat verschil uit:
SELECT id, titel, tekst FROM zoeken
Zal andere resultaten opleveren dan:
SELECT id, tekst, titel FROM zoeken
Dit soort bugs wil je niet hebben, ga dus nooit met mysql_fetch_array() aan de slag, maar altijd met de assoc-variant. Dan kun je dit soort fouten gewoon niet maken.
Hoe kan ik dan i.p.v input type text een text area doen waar die variable instaat, ik heb al een paar dingen geprobeerd maar dat lukt allemaal niet....
Sorry, ik ben niet helemaal duidelijk geweest. Ik weet natuurlijk al dat het zo moet, maar ik bedoel dat de variable .$row['tekst'] in een textarea komt, omdat het nogal een lange tekst is. Hoe doe ik dat?