gegevens van database in invulveld

Status
Niet open voor verdere reacties.

rokobus

Nieuwe gebruiker
Lid geworden
9 aug 2008
Berichten
2
Hallo allemaal,

Ik ben me sinds kort aan het verdiepen in PHP en MYSQL en heb nu mijn eerste vraagje!
Is het mogelijk om een waarde uit een database (of variabele) direct te plaatsen in een invulveld van een formulier.
 
Is mogelijk.

Eerst moet je de gegevens opvragen uit de database.
Wanneer je meerdere records kunt krijgen moet je een uniek veld in je database hebben zodat je daarop kunt filteren.

Een veel voorkomende manier is d.m.v. een ID
Die ziet er in PHPMyAdmin ongeveer zo uit.
Code:
id - INT - auto_increment

Wanneer je dat hebt gedaan moet je zorgt dat je dat unieke veld meeneemt zodat PHP het kan gebruiken.
Het handigst vind ik om het via de $_GET-methode mee te geven aan de URL.

Hier is een volledig script.
PHP:
//MySQL configuratie natuurlijk hier ergens

if(isset($_GET['id']) && is_int($_GET['id'])) {
  if(isset($_POST['submit'])) {
    // Hier kun je dan een UPDATE-query uitvoeren met
    // WHERE id='". $_GET['id'] ."'"
  } else {
    $query = "SELECT veld1 FROM tabel WHERE id='". $_GET['id'] ."'";
    $result = mysql_query($query) or die(mysql_error());
    $row = mysql_fetch_assoc($result);
    echo '<input type="text" name="veld1" value="'. $row['veld1'] .'" />
    <input type="submit" name="submit" value="Wijzig" />';
  }
} else {
  $query = "SELECT veld1, veld2, enz FROM tabel";
  $result = mysql_query($query) or die(mysql_error());
  while($row = mysql_fetch_assoc($result)) {
    echo '<a href="?id='. $row['id'] .'">'. $row['veld2'] .'</a><br />';
  }
}

Uiteraard even aanpassen naar je eigen databasemodel. (Tabel- en veldnamen)
 
Dat gaat dan weer nooit werken, gezien de $_GET-superglobal altijd strings bevat. Je bedoelt ctype_digit (valideert of de gegeven string een _heel_ getal bevat). is_int op een $_GET-variabele returnt altijd false.

EDIT:

En kijken of een formulier is verzonden doen we met if($_SERVER['REQUEST_METHOD'] == 'POST'){, en niet door te kijken of de submit is verzonden, dat is namelijk niet altijd zo. Verder is or die() zogenaamde 'kerkhoftactiek', iets dat je dus niet wilt. Je wilt fouten afvangen als je query mislukt, niet dat je script stopt.


PHP:
define('DEBUG_MODE', TRUE);


$sQuery = "SELECT";

$rResult = mysql_query($sQuery);

if(!$rResult AND DEBUG_MODE === TRUE){

   echo 'Fout bij het uitvoeren van de query: <br />
           '. $sQuery .'<br /> 
           De volgende fout werd gevonden:<br />
           '. mysql_error() .' met de foutcode: '. mysql_errno();

}else if(!$rResult){

    echo 'Fout bij het uitvoeren van de bewerking.';

}else{

    echo 'Gelukt!';

}
 
Laatst bewerkt:
dat van het is_int was bij mij niet bekend, als ik de code had getest dan was ik er gauw genoeg achter gekomen

Het verhaal over de or die(); valt te nuanceren aangezien een foute query vaak tot nog meer rommel leidt dus dan heeft het door laten gaan van de code niet zo heel veel zin .

Ook de $_POST hangt er maar net van af of je je submit-knop een naam hebt gegeven.
 
Dat or die() niet op schiet kom je wel tegen bij grotere applicaties..


En of $_POST['submit'] wel of niet werkt heeft niets te maken met naamgeving, maar met de browser. Daarnaast is REQUEST_METHOD er niet voor niets.
 
helaas is bovenstaande nog even boven mijn niveau en zal eerst eens gaan uitzoeken hoe één en ander werkt en wat het doet.
Het was mijn bedoeling om een vooringevuld formulier te krijgen, met gegevens uit de database.
In ieder geval hartelijk dank voor jullie bijdragen :thumb:
 
En of $_POST['submit'] wel of niet werkt heeft niets te maken met naamgeving, maar met de browser.

En waarom dan wel? Elke browser geeft de $_POST-variabelen door lijkt mij... Of heb je een voorbeeld van een die het niet doet?

@TS: Zo ingewikkeld is het niet, het hangt alleen van je database af hoe makkelijk het is om een waarde terug te krijgen vanuit de database.
 
Met browser bedoelde ik eerder client, die variabelen zijn te manipuleren. Hoe precies weet ik niet, maar ik weet wel dat REQUEST_METHOD daarvoor in het leven is geroepen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan