Database wil niet invoegen maar wel updaten

Status
Niet open voor verdere reacties.

MrC67

Gebruiker
Lid geworden
21 jan 2011
Berichten
47
Hallo Forum,

Ik ben bezig om een database genaamd ledenlijst te maken, hierin wil ik middels een formulier leden kunnen toevoegen en verwijderen ( de regel als vrij updaten)
Om geen open delen in de DB te krijgen geef ik een vertrekkend lid de waarde VRIJ bij waar zijn voornaam, achternaam enz. staat.
nu wil ik met een nieuwe opgave enkele controles doorvoeren.
1: bestaat de nieuwe opgave al?
2: zijn er rijden die VRIJ zijn ( waar eerst vertrokken leden stonden)

Als de opgave nog niet bestaat, en er geen rijen zijn die op VRIJ staan moet het script een nieuwe rij aanmaken in de database, staan er wel rijen op VRIJ dan moet hij de eerste VRIJE rij updaten.
Ik heb dit gedaan via een IF statement
Vreemd genoeg doet hij het UPDATE gedeelte wel, maar de nieuwe invoer doet hij niet.
Misschien moet ik het anders aanpakken??

Graag jullie advies.
Alvast Dank.


//gegevens controleren:

$dbcheck = mysql_query("SELECT Voornaam, Achternaam, Straat, nr, pc, tel, woonplaats, mail, b_lid, papier FROM ledenlijst
WHERE Voornaam= '$Voornaam' AND Achternaam= '$Achternaam' AND Straat= '$straat'");
$bestaat = mysql_num_rows($dbcheck);
echo 'waarde bestaat al = ' . $bestaat . '<br>';

$dbtellen = mysql_query("SELECT Voornaam, Achternaam, Straat FROM ledenlijst
WHERE Voornaam= 'Vrij' AND Achternaam= 'Vrij' AND Straat= 'Vrij'");
$vrij = mysql_num_rows($dbtellen);

echo 'waarde vrije rijen = ' .$vrij . '<br>';

if($bestaat>0){
echo 'opgave bestaat al';
die();
}elseif($vrij==0){
echo 'geen vrije rijen dus invoegen';
$sqlin="INSERT INTO ledenlijst( Voornaam, Achternaam, Straat, nr, pc, tel, woonplaats, mail, b_lid, papier, contro)
VALUES ([$Voornaam], '$Achternaam', '$straat', '$hn', '$pcode', '$tel', '$email', '$bestuur', '$papier', '$contro')";
$result=mysql_query($sqlin);
}else{
$sqlup="UPDATE ledenlijst SET Voornaam='$Voornaam', Achternaam='$Achternaam', Straat='$Straat', nr='$nr', pc='$pcode', tel='$tel', woonplaats='$wp',
mail='$email', b_lid='$bestuur', papier='$papier', contro='$contro' WHERE Voornaam='Vrij' AND Achternaam= 'Vrij'
AND Straat= 'Vrij'";
}

</html>
 
Ten eerste is de gebruikelijke oplossing niet het updaten van de naam, maar een extra kolom genaamd status oid waar je dan 'ACTIEF' of 'WEG' of whatever in plaatst.

Ten tweede begrijp ik niet waarom je rijen opnieuw wilt gebruiken voor verschillende leden. Als je geen historie in je tabel wilt bijhouden, dan delete je de rij toch gewoon? Het is heel erg af te raden om id's opnieuw te gebruiken, maar zo te zien aan je code heb je (nog) geen id's voor je leden.

Je insert werkt niet omdat je VALUES ([$Voornaam], ipv VALUES ('$Voornaam', in je query hebt staan. (Het is een goede gewoonte je query eerst in de database te testen, zodat je ziet wat er mis mee is.)

Je update update overigens alle rijen waar 'Vrij' in staat en niet alleen de eerste he. Je moet nog LIMIT 1 achter je update zetten.
 
Laatst bewerkt:
Hallo wampier en Bazz,

wijzigingen doorgevoerd maar resultaat blijft hetzelfde,
als ik de hele rij delete gebruikt hij dat rijnummer (ID) niet meer en als ik dan de lijst uitprint dan krijg ik lid nr: 1 t/m 200 terwijl in de lijst dan 125 leden zitten en 75 lege plaatsen ( als voorbeeld ) of heb ik daar ook iets fout gedaan .. zou zomaar kunnen.


//gegevens controleren:

$dbcheck = mysql_query("SELECT Voornaam, Achternaam, Straat, nr, pc, tel, woonplaats, mail, b_lid, papier FROM ledenlijst
WHERE Voornaam= '$Voornaam' AND Achternaam= '$Achternaam' AND Straat= '$straat'");
$bestaat = mysql_num_rows($dbcheck);
echo 'waarde bestaat al = ' . $bestaat . '<br>';

$dbtellen = mysql_query("SELECT Voornaam, Achternaam, Straat FROM ledenlijst
WHERE Voornaam= 'Vrij' AND Achternaam= 'Vrij' AND Straat= 'Vrij'");
$vrij = mysql_num_rows($dbtellen);

echo 'waarde vrije rijen = ' .$vrij . '<br>';

if($bestaat>0){
echo 'opgave bestaat al';
die();
}elseif($vrij==0){
echo 'geen vrije rijen dus invoegen';
$sqlin="INSERT INTO ledenlijst( Voornaam, Achternaam, Straat, nr, pc, tel, woonplaats, mail, b_lid, papier, contro)
VALUES ('$Voornaam', '$Achternaam', '$straat', '$hn', '$pcode', '$tel', '$wp', '$email', '$bestuur', '$papier', '$contro')";
$result=mysql_query($sqlin);
}else{
$sqlup="UPDATE ledenlijst SET Voornaam='$Voornaam', Achternaam='$Achternaam', Straat='$Straat', nr='$nr', pc='$pcode', tel='$tel', woonplaats='$wp',
mail='$email', b_lid='$bestuur', papier='$papier', contro='$contro' WHERE Voornaam='Vrij' AND Achternaam= 'Vrij'
AND Straat= 'Vrij' LIMIT 1";
}
 
Hallo wampier en Bazz,

wijzigingen doorgevoerd maar resultaat blijft hetzelfde,
als ik de hele rij delete gebruikt hij dat rijnummer (ID) niet meer en als ik dan de lijst uitprint dan krijg ik lid nr: 1 t/m 200 terwijl in de lijst dan 125 leden zitten en 75 lege plaatsen ( als voorbeeld ) of heb ik daar ook iets fout gedaan .. zou zomaar kunnen.

Daar zit em dus het probleem in. Je moet gewoon een variable gebruiken om de rijnummers bij te houden en niet het id van de rij. Het id is uniek voor dat lid. Als database ontwikkelaar moet ik benadrukken dat je id's niet moet hergebruiken.
Zie hier hoe een rijnummer te query'en in mysql: http://jimlife.wordpress.com/2008/09/09/displaying-row-number-rownum-in-mysql/
 
Laatst bewerkt:
Bazz, een extra kolom bijgemaakt in DB genaamd Nummer, beginwaarde in deze kolom =0, elke nieuwe invoer moet deze waarde met 1 verhogen, maar dit wil ook niet...
Ik probeer de hoogste waarde eruit te halen en die te verhogen maar bij de 2e invoer zet hij dezelfde waarde als bij de eerste.

ps. de echo's zitten er als controle in

de code:

//nummer ophalen vanuit database:
$dbnum = mysql_query("SELECT MAX (Nummer) FROM ledenlijst");
echo 'oude' . $dbnum . '<br>';
$num = ($dbnum+1);
echo 'nieuwe' . $num;

//gegevens controleren:
$dbcheck = mysql_query("SELECT Voornaam, Achternaam, Straat, nr FROM ledenlijst WHERE Voornaam= '$Voornaam'
AND Achternaam= '$Achternaam' AND Straat= '$straat' AND nr= '$hn'");
$num_rows = mysql_num_rows($dbcheck);

if($num_rows > 0) { //controleren hoeveel rijen met het resultaat in je tabel staan, als het er meer dan 0 zijn staat de naam er dus al in
echo '<br>Er is al een ' . $Voornaam . ' ' . $Achternaam . ' ' . $straat . ' ' . $hn . ' ingeschreven in de Ledenlijst.<br>';
die();
}else{
$sqlin="INSERT INTO ledenlijst( Nummer, Voornaam, Achternaam, Straat, nr, pc, tel, woonplaats, mail, b_lid, papier, contro)
VALUES ('$num', '$Voornaam', '$Achternaam', '$straat', '$hn', '$pcode', '$tel', '$wp', '$email', '$bestuur', '$papier', '$contro')";
$result=mysql_query($sqlin);
}
 
je id column moet je als primary key aanduiden en op auto increment zetten, dan verhoogt mysql de waarde van de id automatisch als er iets ingevoegd word.
 
phobia ;

Heb op de kolom ID al een auto increment staan maar het advies van BAZZ ( eerdere reactie) was om die id niet te gebruiken maar een extra kolom die een nummer genereerd. vandaar die kolom nummer.
 
Opgelost, extra kolom in DB aangemaakt lid_num en onderstaande code;

$query = mysql_query("SELECT MAX(lid_num) AS maximum FROM ledenlijst ");
$row = mysql_fetch_assoc($query);
$num=$row['maximum']+1;:cool::thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan