Database update middels een form

  • Onderwerp starter Onderwerp starter huijb
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

huijb

Supermoderator
Forumleiding
Supermoderator
Lid geworden
19 dec 2001
Berichten
9.983
De code om de database te updaten heb ik inmiddels;
PHP:
mysql_query("UPDATE tblInvoer SET IDLocatie = 'Amsterdam'
WHERE Straat = 'Dam' AND Nummer = '49'");

Maar hoe kan ik dat doen via een form(textbox)?
 
Je zult je form moeten posten naar een pagina die de waarden uitleest en de query opstelt en uitvoert.

Schematisch:

Form -> PHP-pagina -> verwerken

Je formulier kan er dan bijvoorbeeld zo uitzien:

PHP:
<form name="update" action="verwerk.php" method="post">
  <input type="text" name="IDLocatie" /> IDLocatie
  <input type="text" name="Straat" /> Straat
  <input type="text" name="Nummer" /> Nummer
  <input type="submit" name="submit" value="Update" />
</form>

Elk formulier element heeft een name-attribuut die je straks gaat gebruiken om de waarde uit te lezen.

Je moet het natuurlijk wel in een valide HTML-pagina nog plaatsen, maar dat spreekt voor zich.

Vervolgens moet je verwerk.php gaan maken.

PHP:
<?php
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) { // Kijk eerst of het formulier verzonden is en de pagina niet rechtstreeks wordt aangeroepen

  if( trim( $_POST['IDLocatie'] ) != '' && trim( $_POST['Straat'] ) != '' && trim( $_POST['Nummer'] ) != '' ) { // Formulier is verzonden, kijk of er in de belangrijke velden daadwerkelijk een waarde staat.

    mysql_query( "UPDATE tblInvoer SET IDLocatie = '" . mysql_real_escape_string( $_POST['IDLocatie'] ) . "' WHERE Straat = '" . mysql_real_escape_string( $_POST['Straat'] ) . "' AND Nummer = '" . mysql_real_escape_string( $_POST['Nummer'] ) . "'" ); // Alle waarden zijn ingevuld, bouw de query op en voer hem uit.

  } else { // Niet alle velden zijn ingevuld

    echo 'Niet alle velden zijn correct ingevuld <br />'; // geef een boodschap dat niet alle velden zijn ingevuld
    echo '<a href="javascript:history.go(-1)">Probeer het opnieuw</a>' // geef een link naar de vorige pagina

  }

} else { // het formulier is niet verstuurd

  header('Location: update.php'); // stuur de gebruiker door naar de pagina waar hij / zij het formulier kan invullen

}
?>

Als er nog onduidelijkheden zijn, zal ik die uiteraard graag beantwoorden, want ik begrijp dat dit zo nogal een sprong in het diepe kan zijn.
 
Laatst bewerkt:
Het formulier had ik inderdaad al. Uit je opmerking
want ik begrijp dat dit zo nogal een sprong in het diepe kan zijn.
begrijp ik dat mijn stappen te groot zijn. Ik ga met je voorstel aan de gang. Als het niet lukt dan meld ik mij wel. Bedankt tot zo ver. :thumb:
 
Ik bedoelde niet dat je stappen TE groot zijn. Wel groot. ;)

Maar vaak is dat wel de beste manier om te leren. Op deze manier kom je heel veel kleine dingetjes tegen die wel heel belangrijk zijn. In mijn scriptje, zie je bijvoorbeeld if-/else constructie, string-koppeling, headers, de trim-functie.

Dat zijn allemaal voorbeelden van zaken die je nu door die ene grote sprong meteen tegenkomt.
 
Het werkt.
Waar ik benieuwd naar ben is, hoe weet de code welk recordnummer het moet hebben. Vergelijkt het de velden?

Deze regel
PHP:
echo '<a href="javascript:history.go(-1)">Probeer het opnieuw</a>'
mist een ; dat zag ik dan weer wel. ;)
 
Laatst bewerkt:
Dat is precies wat het doet.

Het loopt eigenlijk alle records langs en kijkt bij elk record of je WHERE-clause true is.

Je WHERE-clause is:

WHERE Straat = 'Dam' AND Nummer = '49'

Dus bij elk record kijkt MySQL:

Is Straat gelijk aan Dam en Nummer gelijk aan 49 ?

Als dat zo is, dan wordt IDLocatie aangepast.

EDIT:
En je hebt gelijk voor wat betreft die ;
Scherp ;)
 
Dus eigenlijk kan ik beter de primairy key laten controleren, of die voorkomt, want die is altijd uniek.
 
Eigenlijk wel ja.

Tenzij je meerdere records hebt waarbij het adres hetzelfde is en je die ook allemaal wilt aanpassen.

Maar in de meeste gevallen is het inderdaad beter om met de primary key te werken ja (Y)
 
Dus zou deze regel
PHP:
mysql_query( "UPDATE tblInvoer SET IDLocatie = '" . mysql_real_escape_string( $_POST['IDLocatie'] ) . "' WHERE ID = '" .
genoeg zijn i.p.v. deze;
PHP:
mysql_query( "UPDATE tblInvoer SET IDLocatie = '" . mysql_real_escape_string( $_POST['IDLocatie'] ) . "' WHERE Straat = '" . mysql_real_escape_string( $_POST['Straat'] ) . "' AND Nummer = '" . mysql_real_escape_string( $_POST['Nummer'] ) . "'" ); // Alle waarden zijn ingevuld, bouw de query op en voer hem uit.
 
Nog even terugkomend op deze vraag. Na testen blijkt dat alleen het veld IDLocatie wordt ge-updated. Kan dat ook voor elk ander veld gaan gelden?
PHP:
mysql_query( "UPDATE tblInvoer SET IDLocatie = '" . mysql_real_escape_string( $_POST['IDLocatie'] ) . "' WHERE IDInvoer = '" . mysql_real_escape_string( $_POST['IDInvoer'] ) . "'");
 
Zeker kan dat!

Je kunt zoveel van SET xx = 'yy' stukken toevoegen als je wilt (eigenlijk zoveel als er kolommen zijn)

Je kunt je query dan ook als volgt aanpassen:

PHP:
mysql_query( "UPDATE tblInvoer SET 
                      IDLocatie = '" . mysql_real_escape_string( $_POST['IDLocatie'] ) . "'
                      Straat = '" . mysql_real_escape_string( $_POST['Straat'] ) . "'
                      Nummer = '" . mysql_real_escape_string( $_POST['Nummer'] ) . "'
                      WHERE IDInvoer = '" . mysql_real_escape_string( $_POST['IDInvoer'] ) . "'");
 
Aha, bedankt.
 
Sorry maar dit werkt niet;
PHP:
mysql_query( "UPDATE tblInvoer SET 
                      IDLocatie = '" . mysql_real_escape_string( $_POST['IDLocatie'] ) . "'
                      Straat = '" . mysql_real_escape_string( $_POST['Straat'] ) . "'
                      Nummer = '" . mysql_real_escape_string( $_POST['Nummer'] ) . "'
                      WHERE IDInvoer = '" . mysql_real_escape_string( $_POST['IDInvoer'] ) . "'");
Als ik alles achter elkaar zet werkt het wel. Ik heb al van alles geprobeerd met het & teken met de underscore met spaties. Zonder resultaat. Hier zie je ook dat de tekst blauw kleurt, maar bij mij blijft het zwart.
 
Laatst bewerkt:
Oeps, komma's vergeten:

PHP:
mysql_query( "UPDATE tblInvoer SET 
                      IDLocatie = '" . mysql_real_escape_string( $_POST['IDLocatie'] ) . "',
                      Straat = '" . mysql_real_escape_string( $_POST['Straat'] ) . "',
                      Nummer = '" . mysql_real_escape_string( $_POST['Nummer'] ) . "',
                      WHERE IDInvoer = '" . mysql_real_escape_string( $_POST['IDInvoer'] ) . "'");

Zo zou het wel moeten werken. Achter elke tussen de [xx = yy] stukken moeten komma's. Zoals ik die er nu neer gezet heb.
 
Nee ook niet. Het vreemde is dat er ook geen foutmelding komt, maar gewoon de melding "Wijzigingen zijn verwerkt" zoals ook in de code staat.
 
Probeer het eens zo:
PHP:
$result  = mysql_query( "UPDATE tblInvoer SET 
                      IDLocatie = '" . mysql_real_escape_string( $_POST['IDLocatie'] ) . "',
                      Straat = '" . mysql_real_escape_string( $_POST['Straat'] ) . "',
                      Nummer = '" . mysql_real_escape_string( $_POST['Nummer'] ) . "',
                      WHERE IDInvoer = '" . mysql_real_escape_string( $_POST['IDInvoer'] ) . "'");
if(!$result) {
  echo 'Er is iets mis gegaan. MySQL zegt: '. mysql_error();
} else {
  echo 'Aanpassen gelukt.';
}
Als er iets mis gaat krijg je een bruikbare error, kom je er niet uit meld die error dan hier even :)
 
Schiet mij maar lek, onderstaande is het laatste deel van de code.
PHP:
$result  = mysql_query( "UPDATE tblInvoer SET 
                      IDLocatie = '" . mysql_real_escape_string( $_POST['IDLocatie'] ) . "',
                      Datum = '" . mysql_real_escape_string( $_POST['Datum'] ) . "',
                      Ploeg = '" . mysql_real_escape_string( $_POST['Ploeg'] ) . "',
                      WHERE IDInvoer = '" . mysql_real_escape_string( $_POST['IDInvoer'] ) . "'");
if(!$result) {
  echo 'Er is iets mis gegaan. MySQL zegt: '. mysql_error();
} else {
  echo 'Aanpassen gelukt.';
}

  
?>
Krijg een error op line 43
Parse error: syntax error, unexpected $end in C:\UsbWebserver\Root\update.php on line 43
 
Unexpected $end heeft met accolades ( { en } )te maken.
Ik zie de fout niet in bovenstaande code.

Je bent waarschijnlijk ergens eentje vergeten af te sluiten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan