Vinnaren i pepparkakshustävlingen!
2023-07-19, 16:30
  #13
Medlem
Citat:
Ursprungligen postat av maan88
Mina formulär ser inte bra ut. Vad gör jag för fel?

Kan du vara lite mer specifik? Menar du "ser inte bra ut" ur estetiskt perspektiv, eller menar du funkar inte? Eller något annat?
Citera
2023-07-19, 16:48
  #14
Avstängd
Registreringsformulär - får ett error

Jag använder mig av phptutorial.net

Kod:
<?php

require __DIR__ . '/../src/bootstrap.php';

$errors = [];
$inputs = [];

if (is_post_request()) {

    $fields = [
        'username' => 'string | required | alphanumeric | between: 3, 25 | unique: users, username',
        'email' => 'email | required | email | unique: users, email',
        'password' => 'string | required | secure',
        'password2' => 'string | required | same: password',
        'agree' => 'string | required'
    ];

    // custom messages
    $messages = [
        'password2' => [
            'required' => 'Please enter the password again',
            'same' => 'The password does not match'
        ],
        'agree' => [
            'required' => 'You need to agree to the term of services to register'
        ]
    ];

    [$inputs, $errors] = filter($_POST, $fields, $messages);

    if ($errors) {
        redirect_with('register.php', [
            'inputs' => $inputs,
            'errors' => $errors
        ]);
    }

    if (register_user($inputs['email'], $inputs['username'], $inputs['password'])) {
        redirect_with_message(
            'login.php',
            'Your account has been created successfully. Please login here.'
        );

    }

} else if (is_get_request()) {
    [$inputs, $errors] = session_flash('inputs', 'errors');
}

?>

<?php view('header', ['title' => 'Register']) ?>

<form action="register.php" method="post">
    <h1>Sign Up</h1>
    <div>
        <label for="username">Username:</label>
        <input type="text" name="username" id="username" value="<?= $inputs['username'] ?? '' ?>"
               class="<?= error_class($errors, 'username') ?>">
        <small><?= $errors['username'] ?? '' ?></small>
    </div>

    <div>
        <label for="email">Email:</label>
        <input type="email" name="email" id="email" value="<?= $inputs['email'] ?? '' ?>"
               class="<?= error_class($errors, 'email') ?>">
        <small><?= $errors['email'] ?? '' ?></small>
    </div>

    <div>
        <label for="password">Password:</label>
        <input type="password" name="password" id="password" value="<?= $inputs['password'] ?? '' ?>"
               class="<?= error_class($errors, 'password') ?>">
        <small><?= $errors['password'] ?? '' ?></small>
    </div>

    <div>
        <label for="password2">Password Again:</label>
        <input type="password" name="password2" id="password2" value="<?= $inputs['password2'] ?? '' ?>"
               class="<?= error_class($errors, 'password2') ?>">
        <small><?= $errors['password2'] ?? '' ?></small>
    </div>

    <div>
        <label for="agree">
            <input type="checkbox" name="agree" id="agree" value="checked" <?= $inputs['agree'] ?? '' ?> /> I
            agree
            with the
            <a href="#" title="term of services">term of services</a>
        </label>
        <small><?= $errors['agree'] ?? '' ?></small>
    </div>

    <button type="submit">Register</button>

    <footer>Already a member? <a href="login.php">Login here</a></footer>

</form>

<?php view('footer') ?>

Men när jag kör skriptet får jag felmeddelandet:
Fatal error: Uncaught Error: Failed opening required '/data/3/e/3e398383-ba24-4bce-8a63-e3438e946f46/sandwich-fun.com/web/../src/bootstrap.php' (include_path='.:/usr/php81/lib/php') in /data/3/e/3e398383-ba24-4bce-8a63-e3438e946f46/sandwich-fun.com/web/register.php:3 Stack trace: #0 {main} thrown in /data/3/e/3e398383-ba24-4bce-8a63-e3438e946f46/sandwich-fun.com/web/register.php on line 3
Citera
2023-07-19, 16:51
  #15
Medlem
Finns mappen ../src/bootstrap.php ? Och får dina skript komma åt mappen?
Citera
2023-07-19, 18:47
  #16
Avstängd
Ja, jag har testat skriptet en gång förut och då har det funkat men denna gången funkar det inte.

Edit: Det är alltså nåt fel med PHP-koden i detta dokument.
Citera
2023-07-19, 19:00
  #17
Medlem
PissBusss avatar
Citat:
Ursprungligen postat av maan88
Ja, jag har testat skriptet en gång förut och då har det funkat men denna gången funkar det inte.

Edit: Det är alltså nåt fel med PHP-koden i detta dokument.

Beror på hur man ser det. En fil som ska finnas på en viss plats är uppenbart inte åtkomlig och det kan bero av flera saker. Dels kanske inte filen finns där du påstår, dels kanske inte din webbserver-process inte har tillåtelse att läsa och exekvera den, dels kanske inte ditt sätt att klistra strängar inte kan tolkas som du väntar dig av ditt operativsystem.

Börja med att se var din 'require' hamnar, förslagsvis kör du ls med din sökväg i shell_exec(). Du kanske också vill titta på stat().

Eller ännu bättre, använd Composers autoloader-funktionalitet så du slipper knussla med sökvägar på det här sättet. Det slutar alltid med säkerhetshål för att nån får för sig att globba in någon viss katalog osv.
Citera
2023-07-19, 22:14
  #18
Avstängd
Nu har jag testat med en annan, Codeshack

Har dessa filer, register.html:
Kod:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Register</title>
		<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css" integrity="sha512-xh6O/CkQoPOWDdYTDqeRdPCVd1SpvCA9XXcUnZS2FmJNp1coAFzvtCN9BmamE+4aHK8yyUHUSCcJHgXloTyT2A==" crossorigin="anonymous" referrerpolicy="no-referrer">
		<link href="sandwichhasstyle.css" rel="stylesheet" type="text/css">
	</head>
	<body>
		<div class="register">
			<h1>Register</h1>
			<form action="register.php" method="post" autocomplete="off">
				<label for="username">
					<i class="fas fa-user"></i>
				</label>
				<input type="text" name="username" placeholder="Username" id="username" required>
				<label for="password">
					<i class="fas fa-lock"></i>
				</label>
				<input type="password" name="password" placeholder="Password" id="password" required>
				<label for="email">
					<i class="fas fa-envelope"></i>
				</label>
				<input type="email" name="email" placeholder="Email" id="email" required>
				<input type="submit" value="Register">
			</form>
		</div>
	</body>
</html>

och register.php:
Kod:
<?php
// Change this to your connection info.
$DATABASE_HOST = 'x';
$DATABASE_USER = 'x';
$DATABASE_PASS = 'x';
$DATABASE_NAME = 'x';
// Try and connect using the info above.
$con = mysqli_connect($DATABASE_HOST, $DATABASE_USER, $DATABASE_PASS, $DATABASE_NAME);
if (mysqli_connect_errno()) {
	// If there is an error with the connection, stop the script and display the error.
	exit('Failed to connect to MySQL: ' . mysqli_connect_error());
}

// Now we check if the data was submitted, isset() function will check if the data exists.
if (!isset($_POST['username'], $_POST['password'], $_POST['email'])) {
	// Could not get the data that should have been sent.
	exit('Please complete the registration form!');
}
// Make sure the submitted registration values are not empty.
if (empty($_POST['username']) || empty($_POST['password']) || empty($_POST['email'])) {
	// One or more values are empty.
	exit('Please complete the registration form');
}

if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
	exit('Email is not valid!');
}

if (preg_match('/^[a-zA-Z0-9]+$/', $_POST['username']) == 0) {
    exit('Username is not valid!');
}

if (strlen($_POST['password']) > 20 || strlen($_POST['password']) < 5) {
	exit('Password must be between 5 and 20 characters long!');
}

// We need to check if the account with that username exists.
if ($stmt = $con->prepare("SELECT id, password FROM accounts WHERE username = '$username'")) {
	// Bind parameters (s = string, i = int, b = blob, etc), hash the password using the PHP password_hash function.
	$stmt->bind_param('s', $_POST['username']);
	$stmt->execute();
	$stmt->store_result();
	// Store the result so we can check if the account exists in the database.
	if ($stmt->num_rows > 0) {
		// Username already exists
		echo 'Username exists, please choose another!';
	} else {
		// Username doesn't exists, insert new account
if ($stmt = $con->prepare('INSERT INTO accounts (username, password, email, activation_code) VALUES ($username, $password, $email, $actif)')) {
	// We do not want to expose passwords in our database, so hash the password and use password_verify when a user logs in.
	$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
    $uniqid = uniqid();
    $stmt->bind_param('ssss', $_POST['username'], $password, $_POST['email'], $uniqid);
	$stmt->execute();
	$from    = 'webmaster@sandwich-fun.com';
    $subject = 'Account Activation Required';
    $headers = 'From: ' . $from . "\r\n" . 'Reply-To: ' . $from . "\r\n" . 'X-Mailer: PHP/' . phpversion() . "\r\n" . 'MIME-Version: 1.0' . "\r\n" . 'Content-Type: text/html; charset=UTF-8' . "\r\n";
    // Update the activation variable below
    $activate_link = 'http://sandwich-fun.com/phplogin/activate.php?email=' . $_POST['email'] . '&code=' . $uniqid;
    $message = '<p>Please click the following link to activate your account: <a href="' . $activate_link . '">' . $activate_link . '</a></p>';
    mail($_POST['email'], $subject, $message, $headers);
    echo 'Please check your email to activate your account!';
    } else {
	// Something is wrong with the SQL statement, so you must check to make sure your accounts table exists with all 3 fields.
	echo 'Could not prepare statement!';
    }
	}
	$stmt->close();
} else {
	// Something is wrong with the SQL statement, so you must check to make sure your accounts table exists with all 3 fields.
	echo 'Could not prepare statement!';
}
$con->close();
?>

Men får detta felmeddelande:
Fatal error: Uncaught ArgumentCountError: The number of variables must match the number of parameters in the prepared statement in /data/3/e/3e398383-ba24-4bce-8a63-e3438e946f46/sandwich-fun.com/web/register.php:40 Stack trace: #0 /data/3/e/3e398383-ba24-4bce-8a63-e3438e946f46/sandwich-fun.com/web/register.php(40): mysqli_stmt->bind_param('s', 'busscar') #1 {main} thrown in /data/3/e/3e398383-ba24-4bce-8a63-e3438e946f46/sandwich-fun.com/web/register.php on line 40
Citera
2023-07-19, 23:01
  #19
Medlem
Har du kopierat den koden från internet, eller är det något du skrivit själv? I övrig rekommenderar jag att du läser PHPs dokumentation över prepared statements.
Citera
2023-07-20, 00:35
  #20
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av maan88
Men får detta felmeddelande:
Fatal error: Uncaught ArgumentCountError: The number of variables must match the number of parameters in the prepared statement in /data/3/e/3e398383-ba24-4bce-8a63-e3438e946f46/sandwich-fun.com/web/register.php:40 Stack trace: #0 /data/3/e/3e398383-ba24-4bce-8a63-e3438e946f46/sandwich-fun.com/web/register.php(40): mysqli_stmt->bind_param('s', 'busscar') #1 {main} thrown in /data/3/e/3e398383-ba24-4bce-8a63-e3438e946f46/sandwich-fun.com/web/register.php on line 40
Du har inte läst hur man förbereder ett MySQLi-statement?

Se nedanstående exempel från php.net-manualen och jämför med din syntax: (ledtråd: ?)

Kod:
/* Prepared statement, stage 1: prepare */
$stmt $mysqli->prepare("INSERT INTO test(id, label) VALUES (?, ?)");

/* Prepared statement, stage 2: bind and execute */
$id 1;
$label 'PHP';
$stmt->bind_param("is"$id$label); // "is" means that $id is bound as an integer and $label as a string

$stmt->execute(); 

Här är din relevanta kod att jämföra med:
Kod:
$con->prepare("SELECT id, password FROM accounts WHERE username = '$username'")) 

__________________
Senast redigerad av Enterprise 2023-07-20 kl. 00:37.
Citera
2023-07-21, 19:39
  #21
Moderator
Protons avatar
Citat:
Ursprungligen postat av maan88
Mina formulär ser inte bra ut. Vad gör jag för fel?

Kod:
<form id="formly" method="GET" action="register.php" />
		<input type="text" name="username" />
		<input type="password" name="password" />
		<input type="password" name="password2">
		<input type="email" name="email" />
		<input type="date" min="2005-01-01" hidden>
		<input type="submit" value="Registrera Konto!">
		</form>
Jag tror planeterna står fel, givet den utförliga beskrivningen.

VAD ser inte bra ut?
Hamnar fälten huller om buller?
Fel färger?
Annat?

"Det fungerar inte" är en helt värdelös beskrivning av problemet.
Citera
2023-07-21, 21:24
  #22
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av maan88
Mina formulär ser inte bra ut. Vad gör jag för fel?

Kod:
<form id="formly" method="GET" action="register.php" />
		<input type="text" name="username" />
		<input type="password" name="password" />
		<input type="password" name="password2">
		<input type="email" name="email" />
		<input type="date" min="2005-01-01" hidden>
		<input type="submit" value="Registrera Konto!">
		</form>
Prova att lägga till labels? Eller åtminstone placeholders?
Använd CSS?
Exempel: https://blog.logrocket.com/how-to-st...ginners-guide/
Citera
2023-07-21, 22:31
  #23
Medlem
Enterprises avatar
Kolla här för lite inspiration om hur man kan snygga till formulär:
https://uicookies.com/beautiful-css-forms/

https://speckyboy.com/login-pages-html5-css/
Citera
2023-07-22, 21:18
  #24
Medlem
Citat:
Ursprungligen postat av maan88
Mina formulär ser inte bra ut. Vad gör jag för fel?

Kod:
<form id="formly" method="GET" action="register.php" />
		<input type="text" name="username" />
		<input type="password" name="password" />
		<input type="password" name="password2">
		<input type="email" name="email" />
		<input type="date" min="2005-01-01" hidden>
		<input type="submit" value="Registrera Konto!">
		</form>
Du stänger <form>-elementet 2 gånger, jag vet inte om det är vad du far efter. Som andra sagt så är det inte i närheten av tillräckligt med info.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback