$_POST kontrollere inden post i sig selv.
|
Nick Laurits Jakobsen |
Lagt på d. 26-01-2012 09:41
|
Begynder
Antal indlæg: 6
Tilmeldt: 26/01/2012 09:33
|
Jeg har lidt problemer med et projekt jeg går og roder med..
I toppen af mit projekt definerer jeg:
$passwordIsEmpty = false;
$password2IsEmpty = false;
Så connecter jeg til min database, og scriptet siger:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
Herunder sker alle mulige ting, inkl at kontrollere om det indtastede brugernavn allerede eksisterer, om passwords er rigtige osv..
Det der så bare undrer mig, er at selvom testen af password hedder:
//Tests if the passwords are alike and is filled.
if ($_POST["password"]=="")
$passwordIsEmpty = true;
if ($_POST["password2"]=="")
$password2IsEmpty = true;
if ($_POST["password"]!=$_POST["password2"]) {
$passwordIsValid = false;}
Så er det som om at allerede i det jeg loader siden, går den ind og ser at password feltet er tomt, og melder fejlen med det samme som bliver kaldt der hvor tekstfeltet bliver fremkaldt:
Password: <input type="password" name="password"/><br/>
<?php
if ($passwordIsEmpty) {
echo ("Enter the password, please!");
echo ("<br/>");
}
?>
Det samme hvis der ved en fejl ender noget i min table med tomt username og tomt password, vil den allerede på load melde fejl ved at der allerede findes en med det brugernavn. Dette kontrolleres her:
//Checking if the name is already in use
$user = mysql_real_escape_string($_POST["user"]);
$query = mysql_query("SELECT id FROM Wishlist WHERE user='$user'");
$wisherIDnum = mysql_num_rows($query);
if ($wisherIDnum) {
$userNameIsUnique = false;
Håber ikke dette er alt for uoverskueligt.. Skal gerne give flere oplysninger om nødvendigt, men håber lidt at der er en mening med galskaben, så at sige :-P
Nogen som kan hjælpe? :-)
Redigeret af Tutsi d. 26-01-2012 13:28
|
|
|
|
|
|
|
Skrevet d. 25-11-2024 09:05
|
Reklame Agent
Antal indlæg: n^x
Tilmeldt: Altid
|
|
IP: localhost |
|
|
Nick Laurits Jakobsen |
Lagt på d. 26-01-2012 09:45
|
Begynder
Antal indlæg: 6
Tilmeldt: 26/01/2012 09:33
|
Hov.. Databasen det bliver kørt på er forresten MySQL :-) |
|
|
|
|
|
Tutsi |
Lagt på d. 26-01-2012 13:30
|
Superadministrator
Antal indlæg: 2409
Tilmeldt: 24/02/2009 19:12
|
Kigger nærmere på det, når jeg kommer hjem fra job
______________________________
Hilsen Ellen
______________________________
www.jensens-madbl...
"Den som opfatter sig som færdiguddannet, er mere færdig end uddannet"
|
|
|
|
|
|
Tutsi |
Lagt på d. 26-01-2012 17:44
|
Superadministrator
Antal indlæg: 2409
Tilmeldt: 24/02/2009 19:12
|
Jeg synes det er lidt rodet, er det muligt at få hele koden? Hvis du ikke ønsker at offentliggøre den, kan du sende i en pm.
Men for mig ser det ud som om, at du stiller nogle if op, men ikke hvad der skal ske.
if ($_POST["password"]==""){
$passwordIsEmpty = true;}
if ($_POST["password2"]==""){
$password2IsEmpty = true;}
if ($_POST["password"]!=$_POST["password2"]) {
$passwordIsValid = false;}
Men det er meget svært at se ud fra de brudstykker, i hvert fald, når man som jeg, ikke er nogen ørn til databaser.
______________________________
Hilsen Ellen
______________________________
www.jensens-madbl...
"Den som opfatter sig som færdiguddannet, er mere færdig end uddannet"
|
|
|
|
|
|
Nick Laurits Jakobsen |
Lagt på d. 26-01-2012 18:39
|
Begynder
Antal indlæg: 6
Tilmeldt: 26/01/2012 09:33
|
Kode //Login info står herover, men er af sikkerhedsmæssige årsager ikke med.
/** other variables */
$userNameIsUnique = true;
$passwordIsValid = true;
$userIsEmpty = false;
$passwordIsEmpty = false;
$password2IsEmpty = false;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
//Checking whether the user has filled in the wishers name in the text field
if ($_POST["user"]=="")
$userIsEmpty = true;
}
// SQL Connect
$db_connect = mysql_connect($db_hostname, $db_username, $db_password);
$db_select = mysql_select_db($db_database, $db_connect);
mysql_set_charset('utf8', $db_connect); // Sætter charset til utf8 når det bliver trukket ud
//Testing SQL connection
if(!$db_connect)
{
die("Fejlfri:" . mysql_errno());
}
elseif(!$db_select)
{
die("Fejl:" . mysql_errno());
}
//Checking if the name is already in use
$user = mysql_real_escape_string($_POST["user"]);
$query = mysql_query("SELECT id FROM Wishlist WHERE user='$user'");
$wisherIDnum = mysql_num_rows($query);
if ($wisherIDnum) {
$userNameIsUnique = false;
}
//Tests if the passwords are alike and is filled.
if ($_POST["password"]=="")
$passwordIsEmpty = true;
if ($_POST["password2"]=="")
$password2IsEmpty = true;
if ($_POST["password"]!=$_POST["password2"]) {
$passwordIsValid = false;}
//Checks whether all the boolean values are correct.
if (!$userIsEmpty && $userNameIsUnique && !$passwordIsEmpty &&
!$password2IsEmpty && $passwordIsValid)
{
$password = mysql_real_escape_string($_POST['password']);
$encrypt = md5($password);
mysql_query("INSERT Wishlist (user, password) VALUES (' " . $user . " ', '" . $encrypt. "')");
mysql_free_result($query);
mysql_close;
echo "Congratulations, you have now been added!";
exit;
}
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
Welcome!<br>
<form action="createNewWisher.php" method="POST">
Your name: <input type="text" name="user"/><br/>
<?php
if ($userIsEmpty) {
echo ("Enter your name, please!");
echo ("<br/>");
}
if (!$userNameIsUnique) {
echo ("The person already exists. Please check the spelling and try again");
echo ("<br/>");
}
?>
Password: <input type="password" name="password"/><br/>
<?php
if ($passwordIsEmpty) {
echo ("Enter the password, please!");
echo ("<br/>");
}
?>
Please confirm your password: <input type="password" name="password2"/><br/>
<?php
if ($password2IsEmpty) {
echo ("Confirm your password, please");
echo ("<br/>");
}
if (!$password2IsEmpty && !$passwordIsValid) {
echo ("The passwords do not match!");
echo ("<br/>");
}
?>
<input type="submit" value="Register"/>
</form>
</body>
</html>
|
|
|
|
|
|
Tutsi |
Lagt på d. 26-01-2012 20:21
|
Superadministrator
Antal indlæg: 2409
Tilmeldt: 24/02/2009 19:12
|
Du tjekker brugeroplysninger før du er connectet til databasen.
Prøv og flyt det her op, lige efter dine login informationer til databasen.
// SQL Connect
$db_connect = mysql_connect($db_hostname, $db_username, $db_password);
$db_select = mysql_select_db($db_database, $db_connect);
mysql_set_charset('utf8', $db_connect); // Sætter charset til utf8 når det bliver trukket ud
//Testing SQL connection
if(!$db_connect)
{
die("Fejlfri:" . mysql_errno());
}
elseif(!$db_select)
{
die("Fejl:" . mysql_errno());
}
______________________________
Hilsen Ellen
______________________________
www.jensens-madbl...
"Den som opfatter sig som færdiguddannet, er mere færdig end uddannet"
|
|
|
|
|
|
Nick Laurits Jakobsen |
Lagt på d. 26-01-2012 20:49
|
Begynder
Antal indlæg: 6
Tilmeldt: 26/01/2012 09:33
|
Det er gjort.. Og efter at have indsat noget Kode if (isset($_POST['Register'])) {
kan jeg også få den til at holde op med at lave password fejlen, men den kører hele lortet på load, inkl post.. Så første gang jeg loader siden, lægger den en bruger ind i databasen uden navn, og næste gang jeg loader, brokker den sig over at der allerede findes en bruger med det navn..
Indtaster jeg noget andet, opretter den bare den bruger.. Ikke noget problem der..
Prøver jeg derimod at bruge Kode if (isset($_POST['Register'])) {
der hvor den skriver til databasen, vil den ikke skrive.. Når jeg så trykker på knappen, tømmer den bare felterne og intet sker.. Se evt http://pcvib.ano.... og tryk Create New Wisher for at se siden :) |
|
|
|
|
|
Tutsi |
Lagt på d. 26-01-2012 21:20
|
Superadministrator
Antal indlæg: 2409
Tilmeldt: 24/02/2009 19:12
|
Hvad skal der komme frem. Når man opretter en New Wisher, registrerer den fint nok, men hvad skal der så ske?
Jeg skal vide lidt om, hvad sidens mål er.
______________________________
Hilsen Ellen
______________________________
www.jensens-madbl...
"Den som opfatter sig som færdiguddannet, er mere færdig end uddannet"
|
|
|
|
|
|
Nick Laurits Jakobsen |
Lagt på d. 26-01-2012 22:50
|
Begynder
Antal indlæg: 6
Tilmeldt: 26/01/2012 09:33
|
Det der jo er pointen er ikke det der kommer frem, det er det der sker på siden..
nu forstår jeg så ikke hvordan du har kunne oprette dig 3 gange med samme brugernavn, men altså..
Det der ligger i det, er jo at den allerede når du loader siden kører php'en, altså poster på load..
Så hvis jeg sletter den bruger der ikke har noget navn, vil den ved første load starte med at gå direkte til bekræftelsen.
Anden load går den herefter ind og siger at en bruger med det navn (altså tomt felt) allerede eksisterer..
nu har jeg så fjernet mine "Ifset" sætninger, så nu brokker den sig også over at password er tomt, på trods af den ikke burde tjekke det før der bliver postet.
Men hvis jeg sætter en ifset sætning ind, den som tidligere nævnt som detekterer om knappen er trykket på, der hvor den skriver ned i databasen, vil den bare tømme felterne når du trykker på knappen, og der sker aldrig mere end det, den skriver ikke ned i databasen. |
|
|
|
|
|
assensvej |
Lagt på d. 26-01-2012 23:08
|
Superadministrator
Antal indlæg: 1735
Tilmeldt: 15/01/2006 11:36
|
Hvad er det for et system du køre for det ser ikke ud til at være et phpfusion system
Jeg tro det er svært for Tutsi at hjælpe dig når hun ikke kan se om det er phpfusion eller et andet system
HUSK at læse reglerne for Brug af Debatten - Spørgsmål i privat beskeder og på msn, besvares ikke uden aftale.
Ekspert.
En ekspert er en, der har begået om ikke alle, så i hvert fald de groveste fejltagelser inden for sit felt
Niels Bohr, atomfysiker, 1865-1962
|
|
|
|
|
|
Tutsi |
Lagt på d. 26-01-2012 23:30
|
Superadministrator
Antal indlæg: 2409
Tilmeldt: 24/02/2009 19:12
|
Det er ikke php fusion. Eller det tror jeg ihvert fald ikke det er. Men koden er php :)
Men du har helt ret, det er lidt svært, for jeg kender jo heller ikke databasen og hvordan den er bygget op.
Hvor har du den kode fra? For er ikke sikker på du har skrevet den fra bunden. det ligner lidt noget der er "klippet-klistret" sammen fra flere steder.
Jeg må nok indrømme, jeg er lidt i vildrede der. Jeg kan ikke rigtig se sammenhængen i det hele. Desværre.
Hvis det er en side, hvor man skal kunne registrere sig på, er der nemmere måde at lave den på. Og der findes også rigtig mange codesnippets med login-form sider på nettet.
Men den kan jeg nemt lave. Men tror ikke det blot er det du søger.
Ellers kan jeg anbefale en side som eksperten.dk. Der er der mange rigtig dygtige folk, også til både php og mysql databaser.
______________________________
Hilsen Ellen
______________________________
www.jensens-madbl...
"Den som opfatter sig som færdiguddannet, er mere færdig end uddannet"
|
|
|
|
|
|
Nick Laurits Jakobsen |
Lagt på d. 27-01-2012 12:00
|
Begynder
Antal indlæg: 6
Tilmeldt: 26/01/2012 09:33
|
Det er umiddelbart skrevet ud fra en tutorial til at lære at bruge php sammen med MySQL.. Så det er ikke et reelt site der skal køre, men det er mere en prøve for at lære php syntakser osv osv, og lære at få det til at fungere..
Jeg tror ikke det er php-fusion, da det er skrevet direkte i netbeans ud fra en tutorial :-)
Men jeg har været ved at læse mig til at det er noget der er problem med når man kører php og html på samme tid, og at man via ifset sætningen tidligere nævnt kan få den til at holde op med det.. Men prøver jeg at bruge ifset på der hvor den skriver i databasen, så tømmer den bare felterne når jeg trykker og der sker ikke mere end det |
|
|
|
|
|
Tutsi |
Lagt på d. 27-01-2012 19:41
|
Superadministrator
Antal indlæg: 2409
Tilmeldt: 24/02/2009 19:12
|
Du kan sagtens bruge php og html på samme side.
En php side kan se sådan ud:
<?php
//Her er din php kode
//som har klammer rundt om
?>
<b>Du er nu hoppet ud af php-koden og skriver i html kode her</b>
<?php
//Og så er du inde i php-koden igen
?>
Og så kan du bruge det endnu mere sammensat:
<?php
echo "<html>";
echo "<title>HTML med PHP</title>";
echo "<b>Et eksempel</b>";
echo "<br />";
//her skriver du php koden
print "<i>Du kan også skrive print, så vil den også vise teksten.</i>";
?>
Skal du så have databasen med.
Allerførst skal man oprette table i databasen:
CREATE TABLE users (ID MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR(60), password VARCHAR(60))
Så skal du lave login-side:
Kode <?php
// Connects til Database
mysql_connect("host", "username", "password") or die(mysql_error());
mysql_select_db("database_navn") or die(mysql_error());
//Denne kode køres hvis feltet er tilføjet
if (isset($_POST['submit'])) {
//Dette sikrer, at ingen felter lades tomme:
if (!$_POST['username'] | !$_POST['pass'] | !$_POST['pass2'] ) {
die('Du har glemt at udfylde et felt');
}
// tjekker om brugernavnet allerede er i brug
if (!get_magic_quotes_gpc()) {
$_POST['username'] = addslashes($_POST['username']);
}
$usercheck = $_POST['username'];
$check = mysql_query("SELECT username FROM users WHERE username = '$usercheck'")
or die(mysql_error());
$check2 = mysql_num_rows($check);
//hvis navnet er i brug, gives en fejl meddelse
if ($check2 != 0) {
die('Ups, brugernavnet '.$_POST['username'].' er optaget.');
}
// dene kode sikrer, at begge passwords er ens
if ($_POST['pass'] != $_POST['pass2']) {
die('Your passwords did not match. ');
}
// Her har vi krypteret adgangskoden
$_POST['pass'] = md5($_POST['pass']);
if (!get_magic_quotes_gpc()) {
$_POST['pass'] = addslashes($_POST['pass']);
$_POST['username'] = addslashes($_POST['username']);
}
// og så indsættes det i databasen
$insert = "INSERT INTO users (username, password)
VALUES ('".$_POST['username']."', '".$_POST['pass']."')";
$add_member = mysql_query($insert);
?>
<h1>Registreret</h1>
<p>Du er nu oprettet, og kan logge ind.</a>.</p>
<?php
}
else
{
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table border="0">
<tr><td>Brugernavn:</td><td>
<input type="text" name="username" maxlength="60">
</td></tr>
<tr><td>Password:</td><td>
<input type="password" name="pass" maxlength="10">
</td></tr>
<tr><td>Gentag Password:</td><td>
<input type="password" name="pass2" maxlength="10">
</td></tr>
<tr><th colspan=2><input type="submit" name="submit"
value="Register"></th></tr> </table>
</form>
<?php
}
?>
______________________________
Hilsen Ellen
______________________________
www.jensens-madbl...
"Den som opfatter sig som færdiguddannet, er mere færdig end uddannet"
|
|
|
|
|
|
Tutsi |
Lagt på d. 27-01-2012 20:19
|
Superadministrator
Antal indlæg: 2409
Tilmeldt: 24/02/2009 19:12
|
Jeg har også lavet de andre sider, med lidt forklaring undervejs:
registrer.php
Kode <?php
// Connects til Database
mysql_connect("host", "username", "password") or die(mysql_error());
mysql_select_db("database_navn") or die(mysql_error());
//Denne kode køres hvis feltet er tilføjet
if (isset($_POST['submit'])) {
//Dette sikrer, at ingen felter lades tomme:
if (!$_POST['username'] | !$_POST['pass'] | !$_POST['pass2'] ) {
die('Du har glemt at udfylde et felt');
}
// tjekker om brugernavnet allerede er i brug
if (!get_magic_quotes_gpc()) {
$_POST['username'] = addslashes($_POST['username']);
}
$usercheck = $_POST['username'];
$check = mysql_query("SELECT username FROM users WHERE username = '$usercheck'")
or die(mysql_error());
$check2 = mysql_num_rows($check);
//hvis navnet er i brug, gives en fejl meddelse
if ($check2 != 0) {
die('Ups, brugernavnet '.$_POST['username'].' er optaget.');
}
// dene kode sikrer, at begge passwords er ens
if ($_POST['pass'] != $_POST['pass2']) {
die('Your passwords did not match. ');
}
// Her har vi krypteret adgangskoden
$_POST['pass'] = md5($_POST['pass']);
if (!get_magic_quotes_gpc()) {
$_POST['pass'] = addslashes($_POST['pass']);
$_POST['username'] = addslashes($_POST['username']);
}
// og så indsættes det i databasen
$insert = "INSERT INTO users (username, password)
VALUES ('".$_POST['username']."', '".$_POST['pass']."')";
$add_member = mysql_query($insert);
?>
<h1>Registreret</h1>
<p>Du er nu oprettet, og kan logge ind.</a>.</p>
<?php
}
else
{
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table border="0">
<tr><td>Brugernavn:</td><td>
<input type="text" name="username" maxlength="60">
</td></tr>
<tr><td>Password:</td><td>
<input type="password" name="pass" maxlength="10">
</td></tr>
<tr><td>Gentag Password:</td><td>
<input type="password" name="pass2" maxlength="10">
</td></tr>
<tr><th colspan=2><input type="submit" name="submit"
value="Register"></th></tr> </table>
</form>
<?php
}
?>
bruger-side.php
Kode <?php
mysql_connect("host", "username", "password") or die(mysql_error());
mysql_select_db("database_navn") or die(mysql_error());
//tjekker cookies for at sikre at du er loggget ind
if(isset($_COOKIE['ID_my_site']))
{
$username = $_COOKIE['ID_my_site'];
$pass = $_COOKIE['Key_my_site'];
$check = mysql_query("SELECT * FROM users WHERE username = '$username'")or die(mysql_error());
while($info = mysql_fetch_array( $check ))
{
//hvis cookien har forkert password, bliver man sendt til login siden
if ($pass != $info['password'])
{ header("Location: login.php");
}
//ellers bliver man videresendt til den lukkede side der kræver login.
else
{
echo "Lukket bruger side der kræver login<p>";
echo "Her mangler indhold på siden.......<p>";
//og så skal man selvfølgelig kunne logge ud igen
echo "<a href=logout.php>Logout</a>";
}
}
}
else
//hvis cookie ikke findes, bliver man sendt til loginside
{
header("Location: login.php");
}
?>
og til sidst logout.php
Kode <?php
$past = time() - 100;
//så sletter vi cookien igen
setcookie(ID_my_site, gone, $past);
setcookie(Key_my_site, gone, $past);
header("Location: login.php");
?>
Så har du lidt at kigge på, og spørg endelig, hvis der er noget du ikke forstår. Jeg skal forsøge at svare, så godt jeg kan.
______________________________
Hilsen Ellen
______________________________
www.jensens-madbl...
"Den som opfatter sig som færdiguddannet, er mere færdig end uddannet"
|
|
|
|
|