Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » Ist das so in Ordnung?    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
phpnoobneu
Mitglied
Neuling


Dabei seit: 27.09.2020
Herkunft: keine Angabe
Posts: 6
     Ist das so in Ordnung? Zitat | Bearbeiten

Hallo,

ich bin grade dabei mich etwas einzuarbeiten.
Der Code unten funktioniert jedoch wüsste ich gerne was die Profis hier von dem Code / Aufbau halten?
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
<!DOCTYPE html>
<html lang="de">
    <head>
        <meta charset="utf-8">
        <?php
            
require 'db.php';
                  
$siteid =39
            
$sql "SELECT * FROM artikel WHERE id ='$siteid' ";
            foreach (
$pdo->query($sql) as $row
            {
                   echo 
"<title>".$row['meta_titel']."</title>\n";
                   echo 
"<meta name='description' content='".$row['meta_beschreibung']."'/> \n";
                   echo 
"<meta name='keywords' content='".$row['meta_keywords']."'/> \n";
            }
            include (
"include/meta.php"); 
            include (
"include/pages/css.php"); 
        
?>
    </head>
    <body>
        <div id="main">
              <div class="div-content">
                    <div class="header_top">
                          <div class="container">
                            <div id="contact-details">
                                  <ul> <?php include ("include/infoheader.php"); ?></ul>
                            </div>
                            <?php 
                            
include ("include/social.php"); 
                        
?>
                          </div>
                    </div>
                    <?php 
                    
include ("include/navigation.php"); 
                
?>
                </div>
                <section class="fx-slider">
                      <div class="fx-caption"> 
                    <span class="camera-caption1"><?php $sql "SELECT * FROM artikel WHERE id ='$siteid' "; foreach ($pdo->query($sql) as $row) { echo "".$row['subtitel']."\n"; } ?></span><br>
                        <span class="camera-caption2"><?php $sql "SELECT * FROM artikel WHERE id ='$siteid' "; foreach ($pdo->query($sql) as $row) { echo "".$row['sub2']."\n"; } ?> </span> 
                </div>
                      <div class="flexslider">
                        <ul class="slides">
                        <?php 
                            $sql 
"SELECT * FROM artikel WHERE id ='$siteid' "; foreach ($pdo->query($sql) as $row) { } 
                            echo 
"<li><img src='images/subtitel/".$row['subimage']."'> </li>";
                        
?>                  
                        </ul>
                      </div>
                </section>
                <div id="second">
                      <div class="container">
                        <div class="row">
                              <article class="span8">
                                    <div class="post-border-right">
                                          <article class="post-holder">
                                            <h3 class="title"> <span><?php $sql "SELECT * FROM artikel WHERE id ='$siteid' "; foreach ($pdo->query($sql) as $row) { echo "".$row['titel']."\n";    } ?></span> </h3>
                                            <div>
                                                          <p><?php $sql "SELECT * FROM artikel WHERE id ='$siteid' "; foreach ($pdo->query($sql) as $row) { echo "".$row['text']."\n";    } ?></p>                    
                                    </div>
                                          </article>
                                          <div class="clear"></div>
                                    </div>
                              </article>
                            <?php 
                            
include ("include/pages/navi.php"); 
                        
?>
                        </div>
                      </div>
                </div>
          </div>
          <div class="spacer-60"></div>
            <?php 
            
include ("include/footer.php"); 
            include (
"include/pages/js.php"); 
        
?>
    </body>
</html>





08.10.2020, 17:07 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2484
      Zitat | Bearbeiten

Moin,

ich habe leider nicht allzu viel Zeit, um alles genauer zu beschreiben, aber würde dir gerne schon einmal grobes Feedback geben.

Was mir direkt aufgefallen ist: Du fragst 6 Mal genau dieselben Daten aus der Datenbank ab. Du machst immer wieder genau dieselbe Abfrage, mit der du den kompletten Artikel lädst, nur um dann ein einziges Attribute von diesem Artikel im HTML Code auszugeben.
Da kann ich dir wirklich nur sehr empfehlen dich noch weiter mit dem Thema Datenbankabfragen zu beschäftigen, so dass du genau verstehst was da eigentlich passiert und was zum Beispiel das Sternchen "*" nach dem "SELECT" bedeutet.

So könntest du den Artikel einfach ganz oben am Anfang des Skriptes einmal komplett laden, mit der von dir bereits verwendeten Abfrage und speicherst den in eine Variable wie beispielsweise $artikel.
Dann kannst du im unteren Teil des Skript einfach überall an den entsprechenden Stellen echo $artikel['subtitel'] statt $row['subtitel'] verwenden oder eben $artikel['text'] anstatt $row['text'] usw.
Du musst nicht für jede Eigenschaft eine extra Datenbank abfrage durchführen und so hätte die Variable noch einen aussagekräftigeren Namen.

Ansonsten würde ich auf jeden Fall empfehlen, dass man möglichst früh schon Prepared Statements für Datenbankabfragen verwendet. Vor allem, wenn du schon PDO verwendest. Wirkt komplizierter und ist es am Anfang auch, aber es ist einfach extrem wichtig, um gefährliche SQL Injections zu verhindern.

In deinem Skript würde es sicherheitstechnisch in dieser Version keinen Unterschied machen, aber es ist besser immer Prepared Statements zu verwenden, damit es dann auch keine Fälle gibt, wo man das vergisst oder Werte, die auf den ersten Blick nicht vom Nutzer veränderbar sind, dies dann doch sind und die Abfrage für SQL Injections angreifbar ist.

Deswegen am besten möglichst früh mit Prepared Statements arbeiten und lernen was SQL Injections sind.

Ansonsten würde ich generell nicht so viel Code in eine Zeile schreiben und mehrere Befehle und Schleifen eher über mehrere Zeilen hinweg schreiben. Viele Entwicklerteams setzen sich zum Beispiel eine maximale Zeilenlänge von rund 80-100 Zeichen, damit niemand so viel in eine Zeile packt, was einfach deutlich unübersichtlicher und auch je nachdem fehleranfälliger ist.

Vielleicht konnte ich dir ja damit ein wenig weiterhelfen. Ansonsten gerne nachfragen.


Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
09.10.2020, 22:18 Profil | PM | E-Mail  
phpnoobneu
Mitglied
Neuling


Dabei seit: 27.09.2020
Herkunft: keine Angabe
Posts: 6
      Zitat | Bearbeiten

Hallo vielen Dank für dein Feedback.
Wäre es mir möglich das du mir auf Basis dieses Beispiels es nach deinem Feedback umbaust damit ich das sehe?

Würde dir das natürlich bezahlen.

Lieben Gruß


11.10.2020, 10:46 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2484
      Zitat | Bearbeiten

Ich hab das Skript jetzt einfach mal grob entsprechend angepasst. Da gibt es noch 1-2 andere Dinge, die man ändern könnte, wie zum Beispiel den HTML Code in ein extra Template auszulagern oder eben die $siteid per $_GET Variable zu setzen.

Aber ein Schritt nach dem anderen :)

Hier ist der überarbeitete Code:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
<?php 
  
require 'db.php';
  
$siteid 39
  
  
// weitere Informationen zu Prepared Statements: https://www.php-einfach.de/mysql-tutorial/php-prepared-statements/
  // Die Abfrage vorbereiten
  
$query $pdo->prepare('SELECT * FROM artikel WHERE id = :siteid');
  
// Abfrage ausführen und die Werte der Platzhalter dafür übergeben
  
$query->execute(['siteid' => $siteid]);
 
  
// Da es immer nur einen Artikel mit der ID geben sollte, brauchen wir hier keine Schleife
  // und können einfach einen Datensatz abfragen. Entweder gibt es eine oder keine.
  
$artikel $query->fetch();
  
  
// Der Fall, dass kein Artikel mit der ID gefunden wurde, sollte dann mit einer entsprechenden
  // Fehlerseite angezeigt werden, aber dann müsste deutlich mehr angepasst werden.
  // Am besten dann den HTML Code komplett in ein extra Template auslagern und jeweils das entsprechende Template laden.
  
if( $artikel === false ){
    die(
'Artikel nicht gefunden!');
  }

?><!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="utf-8">
  <title><?php echo $artikel['meta_titel']; ?></title>
  <meta name="description" content="<?php echo $artikel['meta_beschreibung']; ?>"/>
  <meta name="keywords" content="<?php echo $row['meta_keywords']; ?>"/>
  
  <?php 
    
include ("include/meta.php"); 
    include (
"include/pages/css.php"); 
  
?>
</head>
<body>
  <div id="main">
    <div class="div-content">
      <div class="header_top">
        <div class="container">
          <div id="contact-details">
            <ul> <?php include ("include/infoheader.php"); ?></ul>
          </div>
          
          <?php include ("include/social.php"); ?>
        </div>
      </div>
      
      <?php include ("include/navigation.php"); ?>
    </div>
    
    <section class="fx-slider">
      <div class="fx-caption"> 
        <span class="camera-caption1"><?php echo $artikel['subtitel']; ?></span><br>
        <span class="camera-caption2"><?php echo $artikel['sub2']; ?> </span> 
      </div>
      <div class="flexslider">
        <ul class="slides">
          <li><img src="images/subtitel/<?php echo $artikel['subimage']; ?>"></li>
        </ul>
      </div>
    </section>
    
    <div id="second">
      <div class="container">
        <div class="row">
          <article class="span8">
            <div class="post-border-right">
              <article class="post-holder">
                <h3 class="title"><span><?php echo $artikel['titel']; ?></span></h3>
                <div>
                  <p><?php echo $artikel['text']; ?></p>          
                </div>
              </article>
              
              <div class="clear"></div>
            </div>
          </article>
          <?php include ("include/pages/navi.php"); ?>
        </div>
      </div>
    </div>
  </div>

<div class="spacer-60"></div>
      
<?php 
  
include ("include/footer.php"); 
  include (
"include/pages/js.php"); 
?>
</body>
</html>


Ich kann den aktuell leider nicht testen und habe schon lange nicht mehr direkt mit PDO gerarbeitet, aber grundlegend sollte damit schon klar werden, was ich gemeint habe und was man ändern könnte/sollte.


Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
11.10.2020, 12:51 Profil | PM | E-Mail  
phpnoobneu
Mitglied
Neuling


Dabei seit: 27.09.2020
Herkunft: keine Angabe
Posts: 6
      Zitat | Bearbeiten

super das hilft mir schon enorm.
Was bin ich dir schuldig?


15.10.2020, 09:43 Profil | PM | E-Mail  
DingsDaBums
Mitglied
Exzellenter User


Dabei seit: 12.09.2010
Herkunft: keine Angabe
Posts: 2484
      Zitat | Bearbeiten

Zitat:
Orginal von phpnoobneu
super das hilft mir schon enorm.
Was bin ich dir schuldig?


Ach dafür nichts. Wenn du dich dadurch mit Prepared Statements und SQL Injections beschäftigst, hat sich das ja schon gelohnt ^^

Man sieht nämlich leider zu oft, dass gerade so Sicherheitsthemen gerne vernachlässigt werden. Wobei das oft gar nicht so ein komplexes Thema ist, wenn es darum geht, diese zu verhindern.


Schau mal bei meinem Projekt vorbei. Vielleicht ist das ja was für dich MyStartPanel - Deine persönliche Startseite mit deinen Favoriten
Auf der Suche nach einem guten Vokabeltrainer? Vokabeltrainer Cramfire - Schnell und effektiv Vokabeln lernen
16.10.2020, 07:40 Profil | PM | E-Mail  
phpnoobneu
Mitglied
Neuling


Dabei seit: 27.09.2020
Herkunft: keine Angabe
Posts: 6
      Zitat | Bearbeiten

Zitat:
Orginal von DingsDaBums
Zitat:
Orginal von phpnoobneu
super das hilft mir schon enorm.
Was bin ich dir schuldig?


Ach dafür nichts. Wenn du dich dadurch mit Prepared Statements und SQL Injections beschäftigst, hat sich das ja schon gelohnt ^^

Man sieht nämlich leider zu oft, dass gerade so Sicherheitsthemen gerne vernachlässigt werden. Wobei das oft gar nicht so ein komplexes Thema ist, wenn es darum geht, diese zu verhindern.

Zitat:
Orginal von DingsDaBums
Zitat:
Orginal von phpnoobneu
super das hilft mir schon enorm.
Was bin ich dir schuldig?


Ach dafür nichts. Wenn du dich dadurch mit Prepared Statements und SQL Injections beschäftigst, hat sich das ja schon gelohnt ^^

Man sieht nämlich leider zu oft, dass gerade so Sicherheitsthemen gerne vernachlässigt werden. Wobei das oft gar nicht so ein komplexes Thema ist, wenn es darum geht, diese zu verhindern.


super ich danke dir



18.10.2020, 09:31 Profil | PM | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » PHP & MySQL » Ist das so in Ordnung?   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz