Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]lista rozwijalna
Forum PHP.pl > Forum > Przedszkole
sargosa
Witam !

Próbuję do formularza dodać listę rozwijalną
Jak to zrobić?
Jestem w tym temacie zielony.

Moje próby kończą się komunikatem

Fatal error: Call to a member function fetch_row() on a non-object in C:\xampp\htdocs\zarejestruj\register.php on line 19

a to listing:


<?php

require 'config.php';


if ($_POST) {
// Zabezpiecz dane z formularza przed kodem HTML i ewentualnymi atakami SQL Injection
// Nie ma konieczności filtrowania haseł, bo one i tak zostaną zahashowane przed wstawieniem
// do bazy danych
$login = $db->real_escape_string(htmlspecialchars(trim($_POST['login'])));
$password = $_POST['password'];
$passwordVerify = $_POST['password_v'];
$email = $db->real_escape_string(htmlspecialchars(trim($_POST['email'])));
$emailVerify = $db->real_escape_string(htmlspecialchars(trim($_POST['email_v'])));
$produkcja = $db->real_escape_string(htmlspecialchars(trim($_POST['produkcja'])));

// Sprawdź czy podane przez użytkownika email lub login nie są zajęte
$checkLogin = $db->query("SELECT COUNT(*) FROM users WHERE login = '$login'")->fetch_row();
$checkEmail = $db->query("SELECT COUNT(*) FROM users WHERE email = '$email'")->fetch_row();

// Podstawowa walidacja formularza
$errors = array();

if (empty($login) || empty($email) || empty($emailVerify) || empty($password) || empty($passwordVerify) || empty($produkcja)) {
$errors[] = 'Proszę wypełnić wszystkie pola';
}

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = 'Podany adres e-mail jest niepoprawny';
}

if ($checkLogin[0] > 0) {
$errors[] = 'Ten login jest już zajęty';
}
if ($checkEmail[0] > 0) {
$errors[] = 'Ten e-mail jest już używany';
}

if ($password != $passwordVerify) {
$errors[] = 'Podane hasła się nie zgadzają';
}
if ($email != $emailVerify) {
$errors[] = 'Podane adresy e-mail się nie zgadzają';
}

// Jeśli wystąpiły jakieś błędy, to je pokaż
if (!empty($errors)) {
foreach ($errors as $error) {
echo '<p class="error">'.$error.'</p>';
}
} else {
// Blędów nie ma, możemy kontynuować rejestrację

$password = password_hash($password, PASSWORD_BCRYPT); // hashowanie hasła

// Zapisz dane do bazy
$result = $db->query("INSERT INTO bazalogow (login, email, password, produkcja) VALUES('$login', '$email', '$password', '$produkcja')");

if (!$result) {
echo '<p class="error">Wystąpił błąd przy rejestrowaniu użytkownika.<br>'.$db->error.'</p>';
} else {
echo '<p class="success">'.$login.', zostałeś zarejestrowany.
<br><a href="login.php">Logowanie</a></p>';
}
}
}
?>

<form method="post" action="register.php">
<label for="login">Login:</label>
<input maxlength="32" type="text" name="login" id="login" required>
<br><br>
<label for="password">Hasło:</label>
<input type="password" name="password" id="password" required>
<br><br>
<label for="password_v">Hasło (ponownie):</label>
<input type="password" name="password_v" id="password_v" required>
<br><br>
<label for="email">Email:</label>
<input type="email" name="email" maxlength="255" id="email" required>
<br><br>
<label for="email_v">Email (ponownie):</label>
<input type="email" name="email_v" maxlength="255" id="email_v" required>
<br>
<label for="produkcja">Produkcja:</label>
<select name="produkcja" id="produkcja" required>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="inne">inne</option>
</select>
<br><br>
<input type="submit" value="Zarejestruj">



<?php
require 'footer.php';
Kshyhoo
Proszę używać bb-code dla kodu...
Select/option jest tablicą, więc zasada taka:
  1. $zapytanie = "SELECT * FROM logowanie";
  2. $wynik = mysql_query($zapytanie);
  3.  
  4. while ($dane = mysql_fetch_array($wynik)) {
  5. echo '<option value="'.$dane['id'].'">'.$dane['produkcja'].'</option>';
  6. }
sargosa
jak używać bbcode ?

w którym miejscu wkleić ten kod ?

gdzie są zapisane wartości z select: 1,2,3,4,5,inne ... ?
Kshyhoo
Obsługi Forum musisz nauczyć się sam(a).
Kod trzeba wkleić tam, gdzie ma być wyświetlana lista rozwijana - myślałem, że to logiczne...
Błędem jest trzymanie wielu wartości w jednej komórce bazy danych. Ale jak kto woli...
sargosa
Kshyhoo czy mógłbyś wkleić ten kawałek kodu do listingu i wyjaśnić mi te zmienne

  1. $zapytanie = "SELECT * FROM logowanie";
  2. $wynik = mysql_query($zapytanie);
  3.  
  4. while ($dane = mysql_fetch_array($wynik)) {
  5. echo '<option value="'.$[b]dane[/b]['id'].'">'.$[b]dane[/b]['produkcja'].'</option>';
  6. }


Czy muszę utworzyć nową tabelę w bazie dla 1,2,3,4,5,inne ...

pilnie potrzebuję rozwiązania tego problemu już mi łeb pęka

Kshyhoo pomocy ... !
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.