Registratie gegevens probleem
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.
Gewijzigd op 01/01/1970 01:00:00 door Johan
Na het uitvoeren van de INSERT query voor het registreren kun je met mysql_insert_id() het laatst gegenereerde id ophalen. Dit is dan dus het id van de laatst geregistreerde gebruiker en kun je gebruiken op de pagina waar je de gebruiker naartoe stuurt.
Pas je script dus even aan, zie ook de php-handleiding over dit onderwerp.
johan schreef op 29.01.2008 13:44:
Verder werken de sites met een database.
well thats a little vague isnt it.
grijp je niet iets te hoog voor iemand met minimale kennis van zaken?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
}else{
$query1="INSERT INTO inloggegevens (gebruikersnaam, wachtwoord, emailadres)";
$query1 .= "VALUES ('$gebruikersnaam','$wachtwoord','$emailadres')"; 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());
$tekst = "Bedankt voor uw aanmelding.<br>
u kunt nu <a href=\"login.php\">inloggen</a>";
die ($tekst);}}
?>
}else{
$query1="INSERT INTO inloggegevens (gebruikersnaam, wachtwoord, emailadres)";
$query1 .= "VALUES ('$gebruikersnaam','$wachtwoord','$emailadres')"; 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());
$tekst = "Bedankt voor uw aanmelding.<br>
u kunt nu <a href=\"login.php\">inloggen</a>";
die ($tekst);}}
?>
Ik had het al geprobeerd alleen snap niet percies hoe het werkt. Zo heb ik het nu gedaan. en de melding is nu FOUT: Duplicate entry '0' for key 1.
Kunt u me uitleggen hoe ik precies die code moet toepassen alvastbedankt:)
of eigenlijk wel
punt is dat je iets probeerd te maken waar je zelf alleen maar met gokken een bijdrage aan levert. Je hebt geen kennis van wat je wil maken en je begrijpt PHP gewoon niet. Daarbij heb je , aan je laatste error te zien, ook geen kaas gegeten van database en tabellen opbouw.
Begin bij het begin
wat jij wil nu is NIET het begin
Het is gewoon een eindopdracht, maakt niet zoveel uit als het maar werkt. Ik ken de basis vaardigheden van php. Het script werkt wel als je inlogt met het inlog.php dan staat klant_id erwel. Dus het enige wat niet werkt registeren en dan naar de reserverings pagina gaan zodat hij klant_id aangeeft. Dan is klaar, dus als u me nu ff helpt met een stukje script zijn we allebijde tevreden.
- je kent de basisvaardigheden? misschien nu werken aan je engels zodat je Duplicate entry '0' for key 1 kan vertalen en het antwoord al weet...
- als het maar werkt? goede instelling... not
- eindopdracht? van school dan neem ik aan. Het is vast niet de bedoeling dat je andere mensen je huiswerk laat maken, of nog erger , je eindproject.
'dus als je nu gewoon met je luie reet PHP gaat leren, zijn we allebijde tevreden'
Helaas, pindakaas.
Ik vraag om hulp, 99% is toch al klaar.Dus laat me huiswerk niet maken. Jullie zeiken me gewoon af. Ik ben toch beleefd. En dat session_register staat zo in ons boek. Ben geen php expert, maar als jullie niet willen helpen zeg het dan gewoon.
Ik wil je wel helpen, maar je wil het zelf niet kunnen, en helaas voor jou is dat mn enige criterium om iemand wel of niet te helpen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$sQuery = "
INSERT INTO inloggegevens
(
gebruikersnaam,
wachtwoord,
emailadres
)
VALUES
(
'".$gebruikersnaam."',
'".$wachtwoord."',
'".$emailadres."'
)
";
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
}
?>
$sQuery = "
INSERT INTO inloggegevens
(
gebruikersnaam,
wachtwoord,
emailadres
)
VALUES
(
'".$gebruikersnaam."',
'".$wachtwoord."',
'".$emailadres."'
)
";
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.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
johan schreef op 29.01.2008 14:39:
En dat session_register staat zo in ons boek.
En dan een stukje uit de handleiding:
Quote:
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.
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:
Quote:
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.
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:
Quote:
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.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?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");
}}?>
}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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?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!
?>
// 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?
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.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
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!
Deze twee handleidingen zullen je in ieder geval een goede basis geven:
PHP Beginnershandleiding
SQL Beginnershandleiding
Zie ook deze discussie op PHPfreakz waar de schrijver ook aangeeft dat hij hier de fout is ingegaan.
Gewijzigd op 01/01/1970 01:00:00 door Frank -