Ik heb een database gemaakt in phpMyadmin
deze database bestaat uit :
1 lidnr
2 naam
3 achternaam
4 woonplaats
4 leeftijd


Nu heb ik een pagina waarmee ik leden kan toevoegen. Die werkt prima.
Nu moet ik een pagina maken waarmee ik de gegevens over de leden kan updaten.
Het liefst zoek ik een formulier waar ik de naam kan invoeren en dat een andere pagina de naam met de overige gegevens weergeeft en aanpassingen kan doen.

het formulier waarmee ik leden kan toevoegen

<?php
$host="localhost";
$gebruiker="xxxxxx";
$wachtwoord="xxxxx$";
$verbinding=mysql_connect($host,$gebruiker,$wachtwoord);
if (!$verbinding) die ("<br>Kan geen verbinding maken met de database,
de gegevens worden niet vastgelegd in de leden-tabel");


$naam=strip_tags(stripslashes(trim($_POST["naam"])));
$achternaam=strip_tags(stripslashes(trim($_POST["achternaam"])));
$woonplaats=strip_tags(stripslashes(trim($_POST["woonplaats"])));
$leeftijd=strip_tags(stripslashes(trim($_POST["leeftijd"])));



$sql = "INSERT INTO twandatabase.leden( naam, achternaam, woonplaats, leeftijd ) VALUES ('$naam','$achternaam','$woonplaats','$leeftijd')";


echo "<p>$sql</p>";
#mysql_select_db('twandatabase');
echo "<p>OK</p>";
$retval = mysql_query($sql);
echo "<p>OK</p>";
if (! $retval)
{
die("Er treedt een fout op, de gegevens worden niet weggeschreven om de volgende reden: ".mysql_error());
}
else
{
echo "De gegevens werden correct weggeschreven naar de database";
}
mysql_close($verbinding);
?>
Regel 2 t/m 5 kunnen in 1 regel. Dit is nodeloos kopieren met het risico dat je later (per ongeluk of wat dan ook) toch worden getoond ergens. Waarom het risico lopen?
Regel 5: gebruik mysqli, de oude mysql_-functies gaan binnenkort verdwijnen.
Regel 6: gebruik een gewone afhandeling. Je footer mag best verschijnen als de verbinding niet lukt. Komt niet vaak voor, maar toch.

Regel 10 t/m 13: ga mysqli_escape_string() gebruiken met een foreach():
<?php
foreach($_GET as $key => $value)
 {
 $$key = mysqli_escape_string(trim(strip_tags($value)));
 }
?>


Regel 17: haal je variabelen uit de quote. Dat voorkomt gedoe met add_slashes() etc:
<?php 
$sql = "INSERT INTO twandatabase.leden ( naam, achternaam, woonplaats, leeftijd ) VALUES ('".$naam."','".$achternaam."','".$woonplaats."','".$leeftijd."'); "; 
?>


Regel 23 en 25 kunnen in 1:
<?php
  if (mysqli_query($con, $sql)) 
?>


Regel 33 is onnodig. Dat gebeurt vanzelf aan het einde van het script.
mysqli_close() gebruik je vooral als je langdurende queries gebruikt.
Beste Twan,

Probeer het begrip database en tabellen van elkaar te onderscheiden.

Op een database-server kunnen meerdere databases aanwezig zijn. In deze databases kunnen verschillende tabellen aanwezig zijn. Een tabel bestaat uit een aantal kolommen. Bijv. id, naam, lidnr enz.
Elke regel of rij die aan een tabel wordt toegevoegd heet een record.

[sql-server]
     |
     |- [database] webshop
     |       |
     |       |---- [tabel] customers
     |       |        |
     |       |        |---- [kolom] customer_id
     |       |        |---- [kolom] name
     |       |        |---- [kolom] email
     |       | 
     |       |---- [tabel] orders
     |                |
     |                |---- [kolom] order_id
     |                |---- [kolom] description
     |                |---- [kolom] amount
     |
     |- [database] webshop_backup
             |
             |---- [tabel] customers
             |        |
             |        |---- [kolom] customer_id
             |        |---- [kolom] name
             |        |---- [kolom] email
             | 
             |---- [tabel] orders
                      |
                      |---- [kolom] order_id
                      |---- [kolom] description
                      |---- [kolom] amount

Daarnaast krijg ik vlekken in mijn nek als ik een kolom met de naam 'leeftijd' zie. :P Dit kun je beter omzetten naar geboortedatum. Je kunt dan de leeftijd uitrekenen en je hoeft niet het hele jaar de verjaardagskalender bij te houden :-)

Dan iets in trant van antwoord op je vraag: CRUD
Create
Read
Update
Delete

Create query:

INSERT INTO leden (lidnr, naam, achternaam, woonplaats, geb_datum) VALUES (12345, 'Frank', 'NB', 'Lisse', '2001-01-02')


Read query:

SELECT naam, achternaam FROM leden WHERE lidnr=12345


Update query:

UPDATE leden SET lidnr=67890, woonplaats='Leiden' WHERE lidnr=12345


Delete query:

DELETE leden WHERE lidnr=12345

ik dacht aan onderstaande code. Helaas werkt dit niet.
Iemand sugesties ?

<?php
$host="localhost:3307";
$gebruiker="xxxxxx";
$wachtwoord="xxxx";
$verbinding=mysql_connect($host,$gebruiker,$wachtwoord);
if (!$verbinding) die ("<br>Kan geen verbinding maken met de database,
de gegevens worden niet vastgelegd in de leden-tabel");


$lidnr = $_POST['lidnr'];
$naam = $_POST['Naam'];
$achternaam = $_POST['achternaam'];
$woonplaats = $_POST['woonplaats'];
$leeftijd = $_POST['leeftijd'];


$SQL = "UPDATE twandatabase.leden ".
"SET lidnr = $lidnr ".
"WHERE lidnr = $lidnr" ;

$result = mysql_query($SQL);

echo "<h2>Er is content aangepast!</h2>";
?>
Wat werkt er niet aan? Zet altijd error-reporting aan bovenaan je script:

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
?>

Verder raad ik aan om foutafhandeling in te bouwen:
http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-query-sql/735/algemene-structuur/1930/

Los daarvan ben je ook gevoelig voor SQL-injection, waarmee anderen je query kunnen manipuleren met gevaarlijke gevolgen van dien. Gebruik dus mysql_real_escape_string() om je $_POST-variabelen.

Verder raad ik aan om je te verdiepen in de MySQLi-functies.
Dus je zegt: bij lidnummer 6 moet het lidnummer 6 worden.
Beetje.... onnodig?
ben al wat verder. Heb nu onderstaande code


<?php
$host="localhost:3307";
$gebruiker="werknemer1";
$wachtwoord="1Kliko123$";
$verbinding=mysql_connect($host,$gebruiker,$wachtwoord);
if (!$verbinding) die ("<br>Kan geen verbinding maken met de database,
de gegevens worden niet vastgelegd in de leden-tabel");

$naam=strip_tags(stripslashes(trim($_POST["naam"])));
$achternaam=strip_tags(stripslashes(trim($_POST["achternaam"])));
$woonplaats=strip_tags(stripslashes(trim($_POST["woonplaats"])));
$leeftijd=strip_tags(stripslashes(trim($_POST["leeftijd"])));



$sql = " Update twandatabase.leden SET `Naam`=$naam,`Achternaam`=$achternaam,`Woonplaats`=$woonplaats,`Leeftijd`=$leeftijd WHERE naam =$naam ";


echo "<p>$sql</p>";
#mysql_select_db('twandatabase');
echo "<p>OK</p>";
$retval = mysql_query($sql);
echo "<p>OK</p>";
if (! $retval)
{
die("Er treedt een fout op, de gegevens worden niet weggeschreven om de volgende reden: ".mysql_error());
}
else
{
echo "De gegevens werden correct weggeschreven naar de database";
}
mysql_close($verbinding);
?>


daarbij krijg ik deze foutcode. De naam Piet bestaat wel in de database


Update twandatabase.leden SET `Naam`=Piet,`Achternaam`=Piraatje,`Woonplaats`=spijkenisse,`Leeftijd`=23 WHERE naam =Piet

OK

OK
Er treedt een fout op, de gegevens worden niet weggeschreven om de volgende reden: Unknown column 'Piet' in 'where clause'

SET `Naam`=$naam,............

SET Naam='".$naam."',...........
ik krijg nu onderstaande foutmelding


Update twandatabase.leden SET `Naam`=Piet,`Achternaam`=Piraatje,`Woonplaats`=spijkenisse,`Leeftijd`=23 WHERE naam ='Piet'

OK

OK
Er treedt een fout op, de gegevens worden niet weggeschreven om de volgende reden: Unknown column 'Piet' in 'field list'
Piet in je SET is een string, en hoort tussen single-quotes. Net als de andere SET-waardes.
Bij je WHERE doe je het wel goed.

Reageren