• 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

Cloud VPS
0 głosów
414 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 (607,100 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 (607,100 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 (607,100 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 (607,100 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 (90,110 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ź 511 wizyt
pytanie zadane 10 kwietnia 2022 w PHP przez Bakkit Dyskutant (7,600 p.)
+1 głos
1 odpowiedź 675 wizyt
pytanie zadane 11 stycznia 2022 w JavaScript przez Bakkit Dyskutant (7,600 p.)
0 głosów
1 odpowiedź 213 wizyt

93,487 zapytań

142,420 odpowiedzi

322,772 komentarzy

62,903 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
...