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

question-closed php poprawna składnia

VPS Starter Arubacloud
0 głosów
183 wizyt
pytanie zadane 14 lipca 2020 w PHP przez Filipczak Gaduła (4,020 p.)
zamknięte 15 lipca 2020 przez Filipczak

Cześć, jak napisać skrypt php z poprawną składnią?
I czy ten kod który jest na dole jest napisany dobrze? w sensie składniowo

<?php if($transactionrows == 1):?>
<?php
$code = $_POST['code'];
$check = $main->check($_POST['check']);
?>
 <?php if(!empty($code):?>
  //i tutaj jest html template 
 <?php else:?>
   <div class="error">Nie wprowadzono kodu</div>
 <?php endif;?>
<?php endif; ?>

 

komentarz zamknięcia: Otrzymałem pomoc

3 odpowiedzi

+1 głos
odpowiedź 14 lipca 2020 przez Comandeer Guru (599,730 p.)
wybrane 15 lipca 2020 przez Filipczak
 
Najlepsza
Jeśli skrypt nie wywala błędu przy uruchomieniu, to jest poprawny składniowo. Większym problemem IMO w tym wypadku jest nietrzymanie się dobrych praktyk.

Pierwsze pięć linijek to logika, kolejne próbują coś wyświetlić. A to oznacza, że warstwa logiki jest wymieszana z warstwą prezentacji. Powinno być to przynajmniej rozdzielone na różne pliki albo, jeszcze lepiej, powinien być tu zastosowany jakiś system szablonów (obecnie popularny jest Twig).
komentarz 14 lipca 2020 przez Filipczak Gaduła (4,020 p.)

Hmmm, czyli jak zrobię mniej więcej w ten sposób to będzie to dobra praktyka? czy może inaczej to powinienem zrobić?
Pierwszy skrypt

<?php
include(drugiskrypt.php);

$transactionrows = 1;

if(!empty($_POST['code'])){
  $check = CheckTransactionWithCode($transactionrows, $_POST['code'])
}else{
  $check = CheckTransactionWithoutCode($transactionrows);
}
?>

Drugi skrypt
 

<?php

function CheckTransactionWithCode($transactionrows, $code){
if(!$transactionrows == 1){
return false; 
}
if(!$code == $checkedcode){
return false;
}
$html = <<<html 
<div class="success"><p>Pomyślnie</p></div>
html;
return $html
}
function CheckTransactionWithoutCode($transactionrows){
if(!transactionrows == 1){
 return false;
}
$html = <<<html
<div class="success"><p>Pomyślnie</p></div>
html;
return $html;
}

 

komentarz 14 lipca 2020 przez Comandeer Guru (599,730 p.)
Nie, bo teraz zrobiłeś dwa pliki: jeden z logiką, drugi z logiką i prezentacją.
komentarz 14 lipca 2020 przez Filipczak Gaduła (4,020 p.)
mógłbyś pokazać mniej więcej jak powinno to wyglądać?
komentarz 15 lipca 2020 przez Comandeer Guru (599,730 p.)

index.php:

<?php
require_once( './Template.php' );

function checkTransaction() {
    if ( costam ) {
        return true;
    }

    return [
        'tablica',
        'błędów'
    ];
}

function renderTransactionResult( $errors ) {
	$template = new Template( 'transaction', [
		'errors' => $errors
	] );

	echo $template;
}

if ( $transactionrows === 1 ) {
	$errors = checkTransaction($_POST);

	renderTransactionResult( $errors );
}

Template.php:

<?php
// Based on https://www.forumweb.pl/porady-i-tutoriale-www/php-php-light-mvc,56553
// by Sławomir Kokłowski {@link http://www.kurshtml.edu.pl}
class Template {
	public function __construct( $template, $vars ) {
        $this->template = $template;
		$this->vars = $vars;
	}

	public function __toString() {
		foreach ( $this->vars as $name => $value ) {
			$$name = $value;
		}

		unset( $name, $value);

		ob_start();
		require( 'templates/' . $this->template . '.php' );

		return ob_get_clean();
	}
}

templates/transaction.php:

<div class="transaction-result">
	<?php if ( is_array( $errors ) ):
		foreach ( $errors as $error ): ?>
	<p class="error"><?=$error;?></p>
	<?php endforeach;
	else: ?>
	<p class="success">Wszystko poszło pomyślnie</p>
	<?php endif; ?>
</div>

Zauważ, że w całej logice jest tylko jedno echo, generujące odpowiedni content. Sam szablon z kolei ma jedynie ify służące wyświetleniu tego, co dostał od logiki. Sam z siebie szablon nie robi absolutnie nic.

To oczywiście jest mocno prymitywny przykład i w rzeczywistości wykorzystuje się biblioteki pokroju Twig, ale zasada jest podobna.

komentarz 15 lipca 2020 przez Filipczak Gaduła (4,020 p.)
Ahaaa, czyli po prostu wystarczy zrobić folder z template'ami które będą po prostu wyświetlane, a reszta to ta logika która wywołuje ten template i pokazuje co wyświetlić? jeśli dobrze rozumiem
komentarz 15 lipca 2020 przez Comandeer Guru (599,730 p.)
No, tak w dużym uproszczeniu można to tak ująć.
komentarz 15 lipca 2020 przez Filipczak Gaduła (4,020 p.)
ok, dzięki za pomoc :D
0 głosów
odpowiedź 14 lipca 2020 przez SzkolnyAdmin Szeryf (86,280 p.)

Jak dla mnie, za dużo bloków php w dokumencie - wystarczy jeden. Instrukcja if...else też może być napisana prościej. Co do wstawiania kodu HTML zainteresuj się składnią nowdoc/heredoc

komentarz 14 lipca 2020 przez Filipczak Gaduła (4,020 p.)
przeczytałem to i zbytnio nie rozumiem, czy powinienem wsadzić cały kod html w echo?
komentarz 14 lipca 2020 przez Filipczak Gaduła (4,020 p.)

Aha dobra chyba zrozumiałem
 

<?php
function check($transaction, $code){
 if(transaction == 1){
   if(!empty($code)){
    $html = <<<kod html

  return $html;
   }else{
   $html = <<<kod html

  return $html;
  }
}else{
   $html = <<<kod html

  return $html;
}
}
?>
<html>
<body>
<?php echo check($_POST['transaction'], $_POST['code']); ?>
</body>
</html>

 

0 głosów
odpowiedź 14 lipca 2020 przez Amatorcpp Obywatel (1,590 p.)
Po co Ci tyle tych bloków <?php / ?>

?

usuń je i rozmieść kod w  odpowiednich polach
komentarz 14 lipca 2020 przez Filipczak Gaduła (4,020 p.)

tzn nie wiem jak to zrobić ponieważ jak mam 
 

<?php if($transactionrows == 1):?>
<?php
$code = $_POST['code'];
$check = $main->check($_POST['check']);
?>
 <?php if(!empty($code):?>

To potem mam pełno kodu html i potem else i endif i nie wiem jak to sensownie rozwiązać, aby składnia była dobra

Podobne pytania

0 głosów
1 odpowiedź 248 wizyt
pytanie zadane 10 kwietnia 2022 w PHP przez Bakkit Dyskutant (7,600 p.)
+1 głos
1 odpowiedź 394 wizyt
pytanie zadane 11 stycznia 2022 w JavaScript przez Bakkit Dyskutant (7,600 p.)
0 głosów
1 odpowiedź 120 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...