• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak wyświetlić dane z bazy danych w obiektowym PHP ?

Cloud VPS
0 głosów
783 wizyt
pytanie zadane 10 sierpnia 2020 w PHP przez mat19 Obywatel (1,580 p.)

<?php

require_once('database.php');

class UserValidator extends database
{
    private $data;
	private $errors =[];
	private static $fields =['username', 'email', 'name', 'surname', 'number', 'password', 'gender'];

public function __construct($post_data)
{
	$this->data = $post_data;
}

public function validateForm()
{
	foreach(self::$fields as  $field)
	{
		if(!array_key_exists($field, $this->data))
		{
			trigger_error("$field nie istnieje");
			return;
		}
	}
	$this->validateUsername();
	$this->validateEmail();
	$this->validateName();
	$this->validateSurname();
	$this->validateNumber();
	$this->validateGender();
	$this->validatePassword();
	$this->query();
	
	return $this->errors;
}


private function validateUsername()
{
	$val = trim($this->data['username']);
	if(empty($val))
		$this->addError('username', 'Pole nie może być puste');
else
{
	if(!preg_match('/^[a-zA-Z-0-9]{6,12}$/', $val))
		{
		$this->addError('username', 'Login must me 6-12 characters');
		}
}
}

private function validateEmail()
{
	$val = trim($this->data['email']);
	if(empty($val))
	{
	$this->addError('email', 'Pole email nie może być puste');
	}else
	{
		if(!preg_match('/^[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,4}$/', $val))
			{
			$this->addError('email', 'Niepoprawny email');
			}
	}
}

private function validateName()
{
	$val = trim($this->data['name']);
	if(empty($val))
	{
		$this->addError('name', 'Pole nie może być puste');
	}else
	{
		if(!preg_match('/^[A-Z-ZŁŚ]{1}+[a-ząęółśżźćń]+$/', $val))
			{
				$this->addError('name', 'Podaj poprawne imię');
			}
	}


}

private function validateSurname()
{
	$val = trim($this->data['surname']);
	if(empty($val))
	{
		$this->addError('surname', 'Pole nie może być puste');
	}else
	{
		if(!preg_match('/^[A-Z-ZŁŚ]{1}+[a-ząęółśżźćń]+$/', $val))
			{
				$this->addError('surname', 'Podaj poprawne nazwisko');
			}
	}
}


private function validateNumber()
{
	$val = trim($this->data['number']);
	if(empty($val))
	{
		$this->addError('number', 'Pole nie może być puste');
	}else
	{
		if(!preg_match('/^[0-9]{9}+$/', $val))
			{
				$this->addError('number', 'Podaj poprawny numer');
			}
	}	
}


private function validatePassword()
{
	$val = trim($this->data['password']);
	if(empty($val))
	{
		$this->addError('password', 'Pole nie może być puste');
	}
}

private function validateGender()
{
	val = trim($this->data['gender']);
	if(empty($val))
	{
		$this->addError('gender', 'Pole nie może być puste');
	}
}

private function addError($key, $val)
{
	$this->errors[$key] = $val;
}

private function query()
{
	$sql = "SELECT * FROM uzytkownicy";
	$result = $this->connect()->query($sql);
	while ($row = $result->fetch(PDO::FETCH_ASSOC))
	{
		echo $row['login'];
	}

   echo "DFdfdfdf";	

}

}
?>
<?php

class database
{
	private $servername;
	private $username;
	private $password;
	private $dbname;
	
	public function connect()
	{
		$this->username = 'localhost';
		$this->username = 'root';
		$this->password = '';
		$this->dbname = 'cms2';
		
		$conn = new mysqli($this->servername, $this->username, $this-> password, $this->dbname);
		return $conn;
	}
}

?>
<div class="row">
      <div class="col-25">
        <label for="lname">Płeć</label>
      </div>
      <div class="col-75">
        <input type="radio" name="gender" value="Kobieta">Kobieta<input type="radio" name="gender" value="Mężczyzna">Mężczyzna
		<div class="error">
		<?php echo $errors['gender'] ?? '' ?>
		</div>
      </div>
    </div>

Robię walidację formularza w obiektowym php i wszystkie funkcje odpowiadające za poszczególne pole działają oprócz funkcji odpowiadającej za walidację pole płci. A drugi mój problem brzmi tak że chcę wyświetlić dane z bazy danych ale nic nie wyświetla. Mam nadzieję że ktoś mi pokaże gdzie popełniam błędy. Dopiero zaczynam programować w php więc wiele rzeczy jeszcze nie wiem.

komentarz 11 sierpnia 2020 przez Ehlert Ekspert (215,050 p.)
Skoro już mowa o obiektowości... Dlaczego Validator ma tak twardą zależność do bazy danych?

3 odpowiedzi

+1 głos
odpowiedź 11 sierpnia 2020 przez OdsetekGlupoty Pasjonat (15,360 p.)
W 128. linii nie masz $ przed nazwą zmiennej. Niemożliwe że żaden błąd Ci nie wyskoczył, chyba że je wyłączyłeś, a to nie zbyt dobrze.

Wywołujesz gdzieś w ogóle tę metodę query? Może przeoczyłem, ale nie widzę żebyś jej w ogóle używał w tej klasie. Zamiast pętli while do wyświetlania danych z bazy lepiej użyć foreach.

Poza tym nie podoba mi się ten kod, po co w ogóle baza danych w walidacji inputów?
0 głosów
odpowiedź 11 sierpnia 2020 przez VBService Ekspert (256,600 p.)
edycja 11 sierpnia 2020 przez VBService
private function validateGender()
{
    if(! isset($this->data['gender']))
    {
        $this->addError('gender', 'Wybierz jedną z opcji');
    }
}
<input type="radio" name="gender" value="Kobieta">Kobieta
<input type="radio" name="gender" value="Mężczyzna">Mężczyzna
<input type="radio" name="gender" value="Inne" checked>Inne
<input type="radio" name="gender" value="Kobieta" required>Kobieta
<input type="radio" name="gender" value="Mężczyzna">Mężczyzna

Tu "wywali błąd", gdy nic nie zostanie zaznaczone input:radio-gender, form nie wysyła wtedy nic do $_POST (obrazek)

if(!array_key_exists($field, $this->data))
        {
            trigger_error("$field nie istnieje");
            return;
        }

dla przykładu dodałem pole name, puste pole jest wysyłane jako pusty string (empty)
nie zaznaczone pole radio, nie pokazuje się w wynikach ( var_dump($_POST); )

 

–1 głos
odpowiedź 11 sierpnia 2020 przez VBService Ekspert (256,600 p.)
edycja 11 sierpnia 2020 przez VBService
 <div class="col-25">
    <label for="lname">Płeć</label>
 </div>

 <div class="col-25">
    <label for="gender">Płeć</label>
    <input type="radio" name="gender" value="Kobieta">Kobieta
    <input type="radio" name="gender" value="Mężczyzna">Mężczyzna
    <div class="error"> ...

</div>
<div class="error">
    <?php echo $errors['gender'] ?? '' ?>
</div>

<div class="error">
    <?php echo $errors['gender']; ?>
</div>

Login must me 6-12 characters - powinno być - Login must be 6-12 characters. wink
Skoro masz wszystkie komunikaty błędów po polsku to czemu ten jest po angielsku.
np.: Login powinien zawierać od 6 do 12 znaków


 

komentarz 11 sierpnia 2020 przez VBService Ekspert (256,600 p.)
edycja 11 sierpnia 2020 przez VBService

Pokazuje się Tobie jakiś komunikat błędu?

private function query()
{
    $sql = "SELECT * FROM uzytkownicy";
    $result = $this->connect()->query($sql);
    while ($row = $result->fetch(PDO::FETCH_ASSOC))
    {
        echo $row['login'];
    }
 
   echo "DFdfdfdf"; 
 
}

 

Podobne pytania

+1 głos
1 odpowiedź 438 wizyt
pytanie zadane 5 września 2020 w PHP przez mat19 Obywatel (1,580 p.)
0 głosów
2 odpowiedzi 2,146 wizyt
0 głosów
1 odpowiedź 1,875 wizyt
pytanie zadane 6 maja 2018 w PHP przez Damian Prymus Początkujący (380 p.)

93,469 zapytań

142,404 odpowiedzi

322,708 komentarzy

62,852 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...