Ik heb een probleem en voor jullie is het vast niet zo moeilijk.
De bedoeling is als klanten registeren dat ze gelijk door verwezen worden naar de reserveer pagina waar gegevens werkt worden. Alleen de Klant ID word niet mee genomen.
Het werkt wel gewoon in de volgorde van inloggen>reserveer pagina.
Op welke manier zorg ik ervoor dat de reserveer pagina weet wie de klant is dat zich net heeft geregisteerd en dan de juiste klant_id krijgt.
Edit:
Bedankt voor jullie moeite, ik ga nu proberen het beter te maken. En dan volgends de manual op de site, die heb ik trouwens al door gelezen.
if(!$rResult = mysql_query($sQuery))
{
trigger_error(mysql_error().'<br />In query: '.$sQuery);
}
else
{
$iGebruikerId = mysql_insert_id();
// Nu kun je verder gaan werken met deze variabele
}
?>
Overigens zit je waarschijnlijk met een nog veel groter probleem en dat is je datamodel. Wat is namelijk je onderlinge relatie tussen de inloggegevens tabel en de klanten tabel? Of met andere woorden: hoe weet jij welke inloggegevens bij welke klant horen?
Ik zie nergens een foreign key waar je mee zou kunnen gaan werken, dus is er geen koppeling mogelijk. Resultaat: een los hoopje zand, meer niet...
ps. Die duplicate key zal overigens veroorzaakt worden doordat je op een bepaalde kolom geen auto_increment aangebracht hebt. Maar goed, van je hele datamodel klopte al weinig, dus daar moest je al naar kijken.
Caution
If you want your script to work regardless of register_globals, you need to instead use the $_SESSION array as $_SESSION entries are automatically registered. If your script uses session_register(), it will not work in environments where the PHP directive register_globals is disabled.
Er wordt dus verwezen naar register_globals, laten we dat er ook even bijpakken:
register_globals boolean
Whether or not to register the EGPCS (Environment, GET, POST, Cookie, Server) variables as global variables.
As of » PHP 4.2.0, this directive defaults to off.
Please read the security chapter on Using register_globals for related information.
En dan de security chapter:
When register_globals = on, our logic above may be compromised.
Kortom, register_globals moet al sinds een jaar of 5 uit staan en dus kun je niet met session_register werken. Staat de boel nog aan, dan is jouw script zo lek als een mandje en kan binnen 10 tellen worden gehackt. Al is hacken dan wel een erg groot woord, een kind van 4 kan dit nog doen.
Mijn conclusie: Jullie gebruiken een bijzonder slecht boek dat al járen achterloopt. Klein gokje: Een boek van Peter Kassenaar?
Tip: Informeer je docent en wijs hem op de handleiding op php.net. Daar staat alles haarfijn uitgelegd.
Klopt dat boek is uiteraard van Peter Kassenaar. Ben ff weer bezig geweest. en het volgende heb ik uitgewerkt:
<?php
}else{
$query1="INSERT INTO inloggegevens (gebruikersnaam, wachtwoord, emailadres)";
$query1 .= "VALUES ('$gebruikersnaam','$wachtwoord','$emailadres')";
if(!$Result = mysql_query($Query))
{trigger_error(mysql_error().'<br />In query: '.$Query);}
else{$GebruikerId = mysql_insert_id();
$query2="INSERT INTO klanten (telefoonnummer, achternaam, tussenvoegsel, voornaam, datum)";
$query2 .= "VALUES ('$telefoonnummer','$achternaam','$tussenvoegsel','$voornaam',CURRENT_DATE());";
$result1 = mysql_query($query1)or die ("FOUT: " .mysql_error());
$result2 = mysql_query($query2)or die ("FOUT: " .mysql_error());
header("Location: reservering.php");
}}?>
Ik heb die variabelen de naam aangepast, maar zoals ik nu begrijp heeft $GebruikerId nu de waarde van de gebruikersid (bijv. 1 of 2).
Zo moet ik die anderen session_register vervangen?
$_SESSION["gebruikersnaam"] = "$Variabele.";
En in me database heb ik de id die voor de klanten_id word gebruikt auto_increment.
$_SESSION["gebruikersnaam"] = "$Variabele.";
mag wel worden
$_SESSION["gebruikersnaam"] = $Variabele;
dus zonder overbodige quotes.
Dan de code, dat kan veel duidelijker:
<?php
// waar komen de variabelen in de queries vandaan?
$query1 = "
INSERT INTO
inloggegevens (
gebruikersnaam,
wachtwoord,
emailadres)
VALUES (
'".$gebruikersnaam."',
'".$wachtwoord."',
'".$emailadres."'
);
";
if(!$Result = mysql_query($Query)){
trigger_error(mysql_error().'<br />In query: '.$Query);
}
else{
$GebruikerId = mysql_insert_id();
}
$query2="
INSERT INTO
klanten (
telefoonnummer,
achternaam,
tussenvoegsel,
voornaam,
datum
)
VALUES (
'".$telefoonnummer."',
'".$achternaam."',
'".$tussenvoegsel."',
'".$voornaam."',
CURRENT_DATE()
);
";
$result1 = mysql_query($query1)or die ("FOUT: " .mysql_error());
$result2 = mysql_query($query2)or die ("FOUT: " .mysql_error());
header("Location: reservering.php");
exit(); // altijd gebruiken na een header-location!
?>
Ik vraag me wel af waar de input vandaan komt, vele variabelen worden hier nergens gedeclareerd of beveiligd. Gebruik je wel ergens mysql_real_escape_string() en $_POST-variabelen?
ps. Waarom voer je $query1 eigenlijk 2x uit? Dat lijkt mij niet goed!
Edit: Ik ga hier de mist in met $Query, $query1 en $query2... Waar komen deze variabelen allemaal vandaan en wat is het doel?
Pps. Een TRANSACTION lijkt mij op zijn plaats, mocht 1 query mislukken, dan wil je ze allemaal ongedaan maken. Je wilt niet met rotzooi in je database blijven zitten.
Je doet niets met de code die ik je gaf? De code die je nu gebruikt is ontzettend onoverzichtelijk en ziet er gewoon niet uit. Je helpt jezelf er echt niet mee.
Waar haal je bijvoorbeeld de variabele $Query van regel 5 vandaan? Verder zal je datamodel waarschijnlijk ook nog niet in orde zijn. Als dat wel het geval zou zijn, zou je het insert_id hoogstwaarschijnlijk gebruiken in de tweede insert query.
Mijn tip: vergeet dit voor nu en ga eerst eens echt leren script. Hoe lullig het ook klinkt, maar dit lijkt helemaal nergens op. Ik kan me ook niet voorstellen hoe een docent die trots is op zijn vak, jullie dit aan durft te leren!
@Blanche: Deze docent heeft zijn leerlingen al met een achterhaald boek van Peter Kassenaar het bos ingestuurd... Dat boek is alleen goed om de open haard of BBQ aan te maken, verder is het een waardeloze verzameling papier.
Zie ook deze discussie op PHPfreakz waar de schrijver ook aangeeft dat hij hier de fout is ingegaan.