Heey, ik heb helaas weer een vraag :(

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.

Miniejjj
zal ik dan maar vertellen dat er geen key bestaat? daardoor werkt het niet.

Miniejj: doet het volgende:

Zoek (op dezelfde pagina van het screenshot) onderaan op: 'Creeer een index op de kolommen', druk rechts daarvan op de knop [start].

selecteer dan bij velden het veld id

druk op de knop [opslaan]

probeer het verhaal van het auto_increment nog eens ;)
Oke, het is nu gelukt met de database ( het is een wonder :D ) maar kan iemand nu het script aanpassen wat op de vorige pagina stond. Dan is mijn probleem helemaal opgelost :)

Miniejjj
Ik heb even wat aangepast, misschien dat dit het probleem oplost...
<head>
<title>log toevoegen</title>
<?php
mysql_connect('localhost', 'minimachine', 'xxx');
mysql_select_db('zoeken');
?>
</head>
<body>
<form action=signup.php method=POST>
<table>
<input type="hidden" name="submit" value="yes">
Titel: <textarea rows="1" name="titel" cols="42">Vul in</textarea><br>
Tekst: <textarea rows="1" name="tekst" cols="42">Vul in</textarea><br>
<input type="submit" vale=" Voeg toe ">
</table>
<?php
# Als er gepost is naar deze pagina
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
	# Vraag de database om de hoogste id waarde uit zoeken tabel en tel daar 1 bij op
	$sQry = 'SELECT MAX(id) FROM zoeken';
	$rQuery = mysql_query($sQry) or die(mysql_error());
	list($iID) = mysql_fetch_row($rQuery);
	$iID = (int)$iID;
	$iID++;
	
	# Controleer geposte gegevens
	$_POST['titel'] = ( empty($_POST['titel']) ? 'Standaard titel' : $_POST['titel'] );
	$_POST['tekst'] = ( empty($_POST['tekst']) ? 'Standaard tekst' : $_POST['tekst'] );
	
	# Query maken en uitvoeren
	$sQry = 'INSERT INTO zoeken (id,tekst,titel) VALUES (' . $iID . 
			',\'' . mysql_real_escape_string($_POST['tekst']) . '\',\'' . 
			mysql_real_escape_string($_POST['titel']) . '\')';
	
	mysql_query($sQry) or die(mysql_error());
	echo "Bericht toegevoegd.";
}
?> 
</form>
Dit kan eenvoudiger:
<?
# Query maken en uitvoeren
$sQry = 'INSERT INTO zoeken (id,tekst,titel) VALUES (' . $iID .
',\'' . mysql_real_escape_string($_POST['tekst']) . '\',\'' .
mysql_real_escape_string($_POST['titel']) . '\')';
?>
Zie hier:
<?
# Query maken en uitvoeren
$sQry = "
INSERT INTO
zoeken (
id,
tekst,
titel
)
VALUES (
" . $iID . ",
'" . mysql_real_escape_string($_POST['tekst']) . "',
'" . mysql_real_escape_string($_POST['titel']) . "'
)
";
?>
Dit is een stuk leesbaarder en je hoeft nergens quotes te gaan escapen.
Er staat "No database selected, terwijl ik toch echt gewoon alles bij database heb ingevoerd en ik heb nog gecontroleert of de tabel die naam heeft enz. Weet iemand de oplossing?

miniejjj
Ieder zijn manier natuurlijk. Normaal gesproken zet ik de kolom namen niet in de query waardoor de query ook al wat duidelijker wordt.

Voor tabellen met veel kolommen maak ik gebruik van een functie die de query opbouwt, dus heb ik alleen nog maar te maken met een array.

Een query met prepared statements (ofzo ;D) is dan wel weer makkelijk om die manier neer te zetten, denk ik.

edit:

@miniejjj:
Heb je die xxx al veranderd?
Martijn! schreef op 24.11.2007 15:07
Ieder zijn manier natuurlijk. Normaal gesproken zet ik de kolom namen niet in de query waardoor de query ook al wat duidelijker wordt.

Voor tabellen met veel kolommen maak ik gebruik van een functie die de query opbouwt, dus heb ik alleen nog maar te maken met een array.

Een query met prepared statements (ofzo ;D) is dan wel weer makkelijk om die manier neer te zetten, denk ik.
Noem de kolomnamen altijd, dat voorkomt bugs bij onderhoud. Je bent dan niet afhankelijk van wijzigingen in de volgorde.

Prepared statements zijn een zeer goede aanpak, bevallen mij ook uitstekend!
Noem de kolomnamen altijd, dat voorkomt bugs bij onderhoud. Je bent dan niet afhankelijk van wijzigingen in de volgorde.


Bij kleine tabellen vind ik het meestal wat overdreven. Je hebt uiteraard gelijk dat je een probleem hebt als je iets veranderd.

Bij grotere tabellen (veel kolommen) heb ik een array waarvan de sleutel de kolom naam is en de waarde de veld waarde. Vanuit de functie worden dus ook alle kolom namen opgesomd.
http://img150.imageshack.us/img150/8494/naamloosna4.png

Kijk, zo is mijn database nu opgebouwd, alleen nu staat er dus dat er dus 'No database selected, ik heb op de xxx mijn wachtwoord ingevuld, maar die heb ik natuurlijk weer even verwijdert :P Verder is mijn gebruikersnaam ook goed en het is gewoon localhost, dus ik begrijp het even niet meer :S

Misschien is het script verkeerd ( denk het niet, maar vraag het toch even )

EDIT: Als niemand eruit komt, kan je natuurlijk ook gewoon zelf een nieuw script maken. Zolang je maar de titel en tekst in moet geven.

Miniejjj
Heb je al ergens verbinding met je database gemaakt?

Reageren