Ankündigung

Einklappen
Keine Ankündigung bisher.

Mein erstes PHP - Projekt, macht es so Sinn?

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mein erstes PHP - Projekt, macht es so Sinn?

    Hallo Leute,

    ich versuche mich zum ersten Mal an einem PHP-Projekt. Und zwar soll es ein kleines Browserspiel werden.

    Bis jetzt läuft das Projekt auch ganz gut (meiner Anfänger-Beurteilung nach), doch bevor ich damit weiter mache und das Projekt immer größer wird, würde ich gerne erstmal einen Rat von euch holen ob die komplette Art und Weise überhaupt Sinn macht.


    Das Projekt:

    Man loggt sich als Spieler ein und verbindet sich somit mit der Datenbank. Auf jeder Seite werden die nötigen Informationen des Spielers von der Datenbank aufgerufen (mit der menubar.php) und angezeigt.

    Man kann später verschiedene Elemente kaufen und unterschiedliche Arbeiten durchführen. Hier ist der Kopfbereich, der auf jeder Seite mitgeschleppt wird:


    PHP-Code:
    <?php
    //menubar.php
    $sql "SELECT skills, money, ort, jobstart, jobfinish, usecar FROM artx_user WHERE name = '$loginuser'";
    foreach (
    $pdo->query($sql) as $row) {
        
    $userskills $row['skills'];
        
    $kontostand $row['money'];
        
    $ort $row['ort'];
        
    $userjobstart $row['jobstart'];
        
    $userjobfinish $row['jobfinish'];
        
    $usecar $row['usecar'];
    }
    ?>
    Auf diese Weise erstelle ich mehrere .php Dateien. Hier ist z.B. die Datei um Arbeiten durchzuführen:

    PHP-Code:
    <?php
    // job.php
    session_start();

    // Wenn ein User gefunden wurde
    if ($_SESSION['username'])
    $loginuser $_SESSION['username'];
    {;
        
    // Mit der Datenbank verbinden
        
    include '../connector.php';
    ?>

    <html>
        <head>
            <title>Job</title>
        </head>
        <body>
            <?php include '../template/menubar/menubar.php'?>
            <div class="content">
            <?php

                
    // Wenn der Job erledigt ist, dann neuen Job starten
                
    if($jobstatus == AND $userskills >= $jobneedskills) {

                
    $sql1 "SELECT jobname, jobentf, jobtime, jobmoney, jobskills, jobneedskills, id FROM artx_jobs";
                foreach (
    $pdo->query($sql1) as $row1) {
                    
    $jobname $row1['jobname'];
                    
    $jobentf $row1['jobentf'];
                    
    $jobtime $row1['jobtime'];
                    
    $jobmoney $row1['jobmoney'];
                    
    $jobskills $row1['jobskills'];
                    
    $jobneedskills $row1['jobneedskills'];
                    
    $jobid $row1['id'];


                
    // Die Arbeitszeit wird hier berechnet 
                
    include 'job-config.php';

                echo 
                
    '<div class="job">'.
                
    '<div class="jobline">Stelle als: <b>'$jobname'</b></div>'
                
    '<div class="jobline">Entfernung zum Arbeitsplatz: <b>'$jobentf' km</b></div>'
                
    '<div class="jobline">Arbeitsweg: <b>'$arbeitsweg' min</b></div>'
                
    '<div class="jobline">Arbeitszeit: <b>'$jobtime' min</b></div>'
                
    '<div class="jobline">Gehalt: <b>'$jobmoney' €</b></div>'
                
    '<div class="jobline">Erfahrungspunkte: <b>'$jobskills'</b></div>'
                
    '<div class="jobline">Benötigte Erfahrungspunkte: <b>'$jobneedskills'</b></div>';
                echo 
    '
                <form method="post" action="'
    $link_job_info'">
                <button class="jobbtn" type="submit" name="work" value="'
    .$jobid.'">Arbeiten gehen</button>
                </form>
                </div>
                '
    ;
                }


                }

                
    // Wenn der Job noch ausgeführt wird
                
    if($jobstatus == 2) {

                
    $sql1 "SELECT jobname, jobentf, jobtime, jobmoney, jobskills, jobneedskills, id FROM artx_jobs WHERE id = '$userjobid'";
                foreach (
    $pdo->query($sql1) as $row1) {
                    
    $jobname $row1['jobname'];
                    
    $jobentf $row1['jobentf'];
                    
    $jobtime $row1['jobtime'];
                    
    $jobmoney $row1['jobmoney'];
                    
    $jobskills $row1['jobskills'];
                    
    $jobneedskills $row1['jobneedskills'];
                    
    $jobid $row1['id'];


                
    // Die Arbeitszeit wird hier berechnet 
                
    include 'job-config.php';


                    
    $jobendedatum date("d.m.Y"$userjobfinish);
                    
    $jobendezeit date("H:i:s"$userjobfinish);
                    echo 
    '
                    <div class="loading"></div><br><br>
                    <div class="job-info-content">
                    <div class="job-info-line">Du arbeitest gerade als '
    $jobname'</div> 
                    <div class="job-info-line">Dein Feierabend ist <br>am: <b>'
    $jobendedatum'</b><br> um <b>'$jobendezeit'</b></div>
                    <div class="job-info-line"><a href="'
    .$link_main.'">Zurück zur Zentrale</a>
                    </div>'
    ;
                };

                };

                if(
    $jobstatus == 3) {
                
    $sql1 "SELECT jobname, jobentf, jobtime, jobmoney, jobskills, jobneedskills FROM artx_jobs WHERE id = '$userjobid'";
                foreach (
    $pdo->query($sql1) as $row1) {
                    
    $jobname $row1['jobname'];
                    
    $jobentf $row1['jobentf'];
                    
    $jobtime $row1['jobtime'];
                    
    $jobmoney $row1['jobmoney'];
                    
    $jobskills $row1['jobskills'];
                    
    $jobneedskills $row1['jobneedskills'];
                    
    $jobid $row1['id'];

                
    // Die Arbeitszeit wird hier berechnet 
                
    include 'job-config.php';

                    echo 
                    
    '
                    <meta http-equiv="refresh" content="4; URL='
    $link_job'"/>
                    <div class="job-info-content">
                    Der Job wurde durchgeführt und beendet!
                    <br>Du hast '
    .$jobmoney.'€ und '$jobskills.' Erfahrungspunkte erhalten<br><br>
                    Du wirst automatisch weitergeleitet...
                    </div>'
    ;
                    ;



                
    // Geld und Skills berechnen
                    
    $new_money $kontostand $jobmoney;
                    
    $new_skills $userskills $jobskills;
                    
    $jobmoney$pdo->prepare("UPDATE artx_user SET money = ?, skills = ?, jobfinish = ? WHERE id = ?");
                    
    $jobmoney->execute(array($new_money$new_skills''$userid));

                
    // Kilometer werden dem Wagen hinzugefügt
                
    if (!empty($usecar)){
                    
    $new_laufleistung $km $jobentf;
                    
    $new_zustand $zustand 1;
                    
    $new_userkm $userkm $jobentf;
                    
    $joblaufleistung $pdo->prepare("UPDATE artx_cars SET zustand = ?, km = ?, userkm = ? WHERE id = ?");
                    
    $joblaufleistung->execute(array($new_zustand$new_laufleistung$new_userkm$usecar));
                }

                };

            };
    };
            
    ?>




            </div>
        </body>
    </html>
    Macht dieser Aufbau so überhaupt einen Sinn? Oder sind mit Fehler untergekommen, welche theoretisch z.B. zu große Auslastung für die Datenbank bedeuten würden oder Sicherheitsprobleme produzieren?

    Da ich das Ganze frei nach Gefühl geschrieben haben, wäre ich für jede konstruktive Kritik sehr dankbar!


    Viele Grüße,
    Joe.


  • #2
    2 Sachen fallen mir jetzt so beim kurz Überfliegen auf:

    Du verwendest für UPDATE ein ->prepare, für SELECT aber nicht? Benutze doch prepare überall, dann hast du auch keine SQL-Injection Lücke.

    Du solltest DIch mal zum EVA-Prinzip einlesen (https://php-de.github.io/jumpto/eva-prinzip/, https://de.wikipedia.org/wiki/EVA-Prinzip). Das wird Dir in der Zukunft nützlich sein wenn du dich daran hältst.

    Und:
    PHP-Code:
    if ($_SESSION['username'])
    $loginuser $_SESSION['username'];
    {;
        
    // Mit der Datenbank verbinden
        
    include '../connector.php'
    Da hats einen komischen ;, gleich nach der {

    Kommentar


    • #3
      Hi Jonas,

      danke für die Tipps! Werde mir das EVA-Prinzip mal anschauen.

      Kommentar


      • #4
        Also mit dem EVA-Prinzip habe ich mich jetzt auseinander gesetzt und es funktioniert soweit sehr gut. Jetzt habe ich aber zu dem "prepare" eine Frage. Ich schaffe es nämlich nicht das Prepare für das SELECT einzusetzen. Wie würde man das z.B. im folgenden Beispiel machen?

        PHP-Code:
        $sql1 "SELECT jobname, jobmoney FROM artx_jobs'";
                    foreach (
        $pdo->query($sql1) as $row1) {
                        
        $jobname $row1['jobname'];
                        
        $jobmoney $row1['jobmoney']; 
        Ich habe mit dem folgenden Script versucht, was aber nicht funktioniert:

        PHP-Code:
        $sql1 $pdo->prepare("SELECT jobname, jobmoney FROM artx_jobs");
                    foreach (
        $pdo->query($sql1) as $row1) {
                        
        $jobname $row1['jobname'];
                        
        $jobmoney $row1['jobmoney']; 

        Kommentar


        • #5
          Du hast es ja schon. Einfach deinen Insert anpassen.

          PHP-Code:
          $jobmoney$pdo->prepare("UPDATE artx_user SET money = ?, skills = ?, jobfinish = ? WHERE id = ?");
                          
          $jobmoney->execute(array($new_money$new_skills''$userid)); 
          Oder auf php.net, da gibts ganz viele Beispiele.
          http://php.net/manual/de/pdo.prepared-statements.php

          Kommentar


          • #6
            Ach Mensch, habe das "execute" vergessen. Mit dem folgenden Abschnitt geht das nun:

            PHP-Code:
            $sql1 $pdo->prepare("SELECT jobname, jobmoney FROM artx_jobs");
            $sql1 ->execute();
                        foreach (
            $sql1 as $row1) {
                            
            $jobname $row1['jobname'];
                            
            $jobmoney $row1['jobmoney'];  

            Danke!

            Kommentar

            Lädt...
            X