Ankündigung

Einklappen
Keine Ankündigung bisher.

Kontakt php script mit mysql Datenbank, Heavy fail!

Einklappen

Neue Werbung 2019

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

  • Kontakt php script mit mysql Datenbank, Heavy fail!

    Guten Tag,

    ich bin neu hier im Forum und mein Grund mich hier zu regestrieren waren diese Fehler! Kurz zu mir : Ich heiße Jan und bin 14 Jahre alt.

    Ich arbeite momentan an eine Mysql Tabelle die ich per php script editieren kann. Dabei scheint mir ein fehler untergeschmuggelt worden zu sein, diesen ich auf anhieb nicht finde. Ich habe schon 2 für mich "unbehebare" Fehler gefunden, aber ich denke ihr könntet es
    1. Beheben
    2. Resourcen sparender schreiben
    3. Mehr fehler entdecken.

    Fehler 1:
    Also es soll eine Tabelle erstellt werden mit einer "Headline", nur DIREKT neben der "Headline" wird schon der erste Datensatz aus der Mysql Tabelle angezeigt.

    Fehler 2:
    Wenn ich etwas fertig editiert habe und auf Speichern drücke passiert folgendes:
    1. Die editierte Zeile verschwindet
    2. Erst nach erneutem Manuellen laden der Seite wird die Editierte Zeile richtig angezeigt!

    Hier mal das PHP script, welches ich mühselig zusammen geflickt habe:
    PHP-Code:
    <?php
    ##GENERAL##
    $db_link mysqli_connect (Privat);
    $_GET array_map('strip_tags'$_GET); 
    $sqlred "SELECT * FROM ReallifeDaten";

    ##CHECK##
    $checkid "ID = '".$_GET['id']."'";

    ##UPDATE##
    $sqlupalter "UPDATE `ReallifeDaten` SET `Alter` = YEAR(curDate()) - YEAR(Geburtstag) - (DATE_FORMAT(curDate(), '%m%d') < DATE_FORMAT(`Geburtstag`, '%m%d')) WHERE YEAR(curDate()) - YEAR(Geburtstag) - (DATE_FORMAT(curDate(), '%m%d') < DATE_FORMAT(`Geburtstag`, '%m%d')) < 99"
    mysqli_query$db_link$sqlupalter );

    ##TABELLE##
    #-Ergebnis-#
    $db_erg mysqli_query$db_link$sqlred );
    if ( ! 
    $db_erg )
    {
      die(
    'Error: ' mysqli_error());
    }

    #-Head-#
    echo '<table border="1">';
    echo 
    "<tr>";
        echo 
    "<td>ID</td>";
        echo 
    "<td width=225px>I Vorname</td>";
        echo 
    "<td width=225px>II Vorname</td>";
        echo 
    "<td width=225px>Nachname</td>";
        echo 
    "<td width=225px>Alter</td>";
        echo 
    "<td width=225px>Geburtstag</td>";
        echo 
    "<td width=225px>Aktion</td>";
        
        while (
    $zeile mysqli_fetch_array$db_ergMYSQL_ASSOC )) {
            echo 
    "<form name=theform action=index.php method=get>";
            
    #-Delete-#
            
    if (isset($_GET['del'])) {
                if (
    $zeile['ID']==$_GET['id']) {
                    
    $sqldel "DELETE FROM ReallifeDaten WHERE "$checkid ."";
                    
    $checkdel mysqli_query$db_link$sqldel );
                    if (
    $checkdel==true) {
                        echo 
    "Löschen war erfolgreich!";
                    }else{
                        echo 
    "Löschen war nicht erfolgreich!";
                    }
                }
            }
            
    #-Save-#
            
    if (isset($_GET['save'])) {
                if (
    $zeile['ID']==$_GET['id']) {
                    
    $IVorname "IVorname = '".$_GET['IVorname']."'";
                    
    $IIVorname "IIVorname = '".$_GET['IIVorname']."'";
                    
    $Nachname "Nachname = '".$_GET['Nachname']."'";
                    
    $Geburtstag "Geburtstag = '".$_GET['Geburtstag']."'";
                    
    $sqlsave "UPDATE ReallifeDaten SET "$IVorname ." , "$IIVorname ." , "$Nachname ." , "$Geburtstag ." WHERE "$checkid ."";
                    
    $checksave mysqli_query $db_link$sqlsave );
                    if (
    $checksave==true) {
                        echo 
    "Eintrag wurde erfolgreich gespeichert!";
                    }else{
                        echo 
    "Eintrag wurde nicht erfolgreich gespeichert!";
                    }
                }
            }
            
    #-Edit-#
            
    if (isset($_GET['edit'])) {
                if (
    $zeile['ID']==$_GET['id']) {
                    echo 
    "<td>"$zeile['ID'] . "</td>";
                    echo 
    "<td> <input type='text' value="$zeile['IVorname']. " name=IVorname> <input type='hidden' name=id value="$zeile['ID'] .">" "</td>";
                    echo 
    "<td> <input type='text' value="$zeile['IIVorname']. " name=IIVorname>" "</td>";
                    echo 
    "<td> <input type='text' value="$zeile['Nachname']. " name=Nachname>" "</td>";
                    echo 
    "<td>"$zeile['Alter'] . "</td>";
                    echo 
    "<td> <input type='text' value="$zeile['Geburtstag']. " name=Geburtstag>" "</td>";  
                    
    $button="<td> <input type='submit' name=save value=Speichern></td>";
                    echo 
    $button;    
                }
            }
            if (
    $zeile['ID']!=$_GET['id']) {
                echo 
    "<td>"$zeile['ID'] . "</td>";
                echo 
    "<td>"$zeile['IVorname'] . "</td>";
                echo 
    "<td>"$zeile['IIVorname'] . "</td>";
                echo 
    "<td>"$zeile['Nachname'] . "</td>";
                echo 
    "<td>"$zeile['Alter'] . "</td>";
                echo 
    "<td>"$zeile['Geburtstag'] . "</td>";
                echo 
    "<input type=hidden name=id value=".$zeile['ID'].'>';
                
    $button="<td>""<input type='submit' name=edit value=Editieren>" "<input type='submit' name=del value=Löschen></td>";
                echo 
    $button;
            }
        echo 
    '</form>';
        echo 
    "</tr>";
        }
    echo 
    "</table>";
    mysqli_free_result$db_erg );    
    ?>
    Ich hoffe das es euch nicht alszu viel Augenkrebs bereitet das durchzulesen oder nicht zu viele Probleme mir zu Helfen
    Dieser Beitrag wird bei Fehler Fixes editiert

    Danke im Voraus :*
    CU

  • #2
    Mod > Verschoben nach PHP Einsteiger

    Dir ist klar das in deinem Source beim 3-9ten echo Konstanten verwendet werden ?

    Kommentar


    • #3
      Sorry, wenn ich doof frage aber was meinst du mit konstanten?

      Kommentar


      • #4
        Kein $

        http://lmgtfy.com/?q=Php+konstanten

        Kommentar


        • #5
          Achso, dass waren Konstanten.
          Ja also da ich mir meistens scripts angucke und diese dann per gedächnis kopiere habe ich gedacht dor müsste dass auch hin. Ihr habt auch recht, dass ich dort was ändern könnte und dass mach ich auch jetzt mal

          Mal schauen ob die Probleme Bleiben
          @Edit:
          Okay ist geändert, werde ich mir für die Zukunft merken.
          Trodzdem bleiben die Probleme bestehen

          Kommentar


          • #6
            Zitat von ToMke Beitrag anzeigen
            Fehler 1:
            Also es soll eine Tabelle erstellt werden mit einer "Headline", nur DIREKT neben der "Headline" wird schon der erste Datensatz aus der Mysql Tabelle angezeigt.
            Dein erzeugtes HTML ist defekt, du bist zu sparsam mit <tr> bzw. </tr>, außerdem darf um eine Zeile (<tr>…</tr>) kein <form> stehen. Außerdem: gewöhne dir an um Attributwerte immer Anführungszeichen zu setzen.

            Fehler 2:
            Wenn ich etwas fertig editiert habe und auf Speichern drücke passiert folgendes:
            1. Die editierte Zeile verschwindet
            2. Erst nach erneutem Manuellen laden der Seite wird die Editierte Zeile richtig angezeigt!
            Du hältst das EVA-Prinzip nicht ein, zu dem Zeitpunkt an dem du DELETE-/UPDATE-Aktionen durchführst hast du die anzuzeigenden Daten bereits geholt - schiebe diese Sachen nach oben.

            $_GET = array_map('strip_tags', $_GET);
            $checkid = "ID = '".$_GET['id']."'";
            Du hast das Prinzip des Kontextwechsels noch nicht verstanden. werfe die Funktion strip_tags() ersatzlos raus und behandele den Kontextwechsel zu HTML weiter unten wenn du tatsächlich was ausgibst und entschärfe unbedingt das was in $_GET['id'] steht!

            $sqlred = "SELECT * FROM ReallifeDaten";
            Verwende niemals SELECT *, gib immer die Spalten an die du brauchst.

            $sqlupalter = "UPDATE `ReallifeDaten` SET `Alter` = YEAR(curDate()) - YEAR(Geburtstag) - (DATE_FORMAT(curDate(), '%m%d') < DATE_FORMAT(`Geburtstag`, '%m%d')) WHERE YEAR(curDate()) - YEAR(Geburtstag) - (DATE_FORMAT(curDate(), '%m%d') < DATE_FORMAT(`Geburtstag`, '%m%d')) < 99";
            Was hat das Alter der User in der Datenbank zu suchen? Du hast das Geburtsdatum drinstehen, daraus kannst du doch das Alter berechnen wenn du die Daten holst.

            Dieser Beitrag wird bei Fehler Fixes editiert
            Nein! Dadurch werden alle Postings zusammenhangslos weil sie nicht mehr zum Code im Ursprungsposting passen. Poste gelegentlich (v.a. nach größeren Änderungen) den überarbeiteten Code.

            Kommentar


            • #7
              Danke für diese Umfangreiche Antwort, ich habe gestern schon mit hilfe eines Kumpels das Script sehrr überarbeitet. Es klappt so wie es soll. Selbst einen Neuen User hinzufügen klappt. Bei fehlern macht mich mal drauf aufmerksam

              PHP-Code:
              <?php
              ini_set
              ('display_errors''1');
              error_reporting(E_ALL);
              ##TEST##

              ##GENERAL##
              $db_link mysqli_connect ("PRIVAT");
              $_POST array_map('strip_tags'$_POST); 

              ##CHECK##
              $checkid = (isset($_POST['id']))? mysqli_real_escape_string($db_link,$_POST['id']):-1;

              #-Delete-#
              if (isset($_POST['del'])) {
                  echo 
              "<form action=viewpage.php method=post>kann das weg oder ist das Kunst?<input type=hidden name=id value=".$checkid."><input type=\"submit\" name=del_true value=Löschen></form>";
              }
              if (isset(
              $_POST['del_true'])) {
                  
              $sqldel "DELETE FROM ReallifeDaten WHERE ID = ".$checkid;
                  
              $checkdel mysqli_query$db_link$sqldel );
                  if (
              $checkdel==true) {
                      echo 
              "Löschen war erfolgreich!";
                  }else{
                      echo 
              "Löschen war nicht erfolgreich!";
                  }    
              }
              #-Save-#
              if (isset($_POST['save'])) {
                  
              $IVorname "IVorname = '".mysqli_real_escape_string($db_link$_POST['IVorname'])."'";
                  
              $IIVorname "IIVorname = '".mysqli_real_escape_string($db_link$_POST['IIVorname'])."'";
                  
              $Nachname "Nachname = '".mysqli_real_escape_string($db_link$_POST['Nachname'])."'";
                  
              $Geburtstag "Geburtstag = '".mysqli_real_escape_string($db_link$_POST['Geburtstag'])."'";
                  
              $sqlsave "UPDATE ReallifeDaten SET "$IVorname ." , "$IIVorname ." , "$Nachname ." , "$Geburtstag ." WHERE ID = ".$checkid;
                  
              $checksave mysqli_query $db_link$sqlsave );
                  if (
              $checksave==true) {
                      echo 
              "Eintrag wurde erfolgreich gespeichert!";
                  }else{
                      echo 
              "Eintrag wurde nicht erfolgreich gespeichert!";
                  }
              }
              #-Add-#
              if (isset($_POST['add'])) {
                  
              $IVorname "'".mysqli_real_escape_string($db_link$_POST['IVorname'])."'";
                  
              $IIVorname "'".mysqli_real_escape_string($db_link$_POST['IIVorname'])."'";
                  
              $Nachname "'".mysqli_real_escape_string($db_link$_POST['Nachname'])."'";
                  
              $Geburtstag "'".mysqli_real_escape_string($db_link$_POST['Geburtstag'])."'";
                  
              $sqladd "INSERT INTO ReallifeDaten (`IVorname`, `IIVorname`, `Nachname`, `Geburtstag`) VALUES ("$IVorname ." , "$IIVorname ." , "$Nachname ." , "$Geburtstag .")";
                  
              $checkadd mysqli_query $db_link$sqladd );
                  if (
              $checkadd==true) {
                      echo 
              "Eintrag wurde erfolgreich hinzugefügt!";
                  }else{
                      echo 
              "Eintrag wurde nicht erfolgreich hinzugefügt!".mysqli_error$db_link ).$sqladd;
                  }
              }

              ##TABELLE##
              #-Ergebnis-#
              $sqlred "SELECT *, YEAR(curDate()) - YEAR(Geburtstag) - (DATE_FORMAT(curDate(), '%m%d') < DATE_FORMAT(`Geburtstag`, '%m%d')) as `Alter` FROM ReallifeDaten ORDER BY ID";
              $db_erg mysqli_query$db_link$sqlred );
              if ( ! 
              $db_erg )
              {
                die(
              'Error: ' mysqli_error());
              }

              #-Head-#
                  
              echo '<table border="1">';
                  echo 
              "<tr>";
                  echo 
              "<td>ID</td>";
                  echo 
              "<td width=225px>I Vorname</td>";
                  echo 
              "<td width=225px>II Vorname</td>";
                  echo 
              "<td width=225px>Nachname</td>";
                  echo 
              "<td width=225px>Alter</td>";
                  echo 
              "<td width=225px>Geburtstag</td>";
                  echo 
              "<td width=225px>Aktion</td>";
                  echo 
              "</tr>";
                  
                  while (
              $zeile mysqli_fetch_array$db_ergMYSQL_ASSOC )) {
                      echo 
              "<tr>";
                      echo 
              "<form name=theform action=viewpage.php method=post>";

                      
              #-Edit-#
                      
              if (isset($_POST['edit']) and ($zeile['ID']==$_POST['id'] ) && ($zeile['ID']==$_POST['id'])) {
                          echo 
              "<td>"$zeile['ID'] . "</td>";
                          echo 
              "<td> <input type='text' value="$zeile['IVorname']. " name=IVorname> <input type='hidden' name=id value="$zeile['ID'] .">" "</td>";
                          echo 
              "<td> <input type='text' value="$zeile['IIVorname']. " name=IIVorname>" "</td>";
                          echo 
              "<td> <input type='text' value="$zeile['Nachname']. " name=Nachname>" "</td>";
                          echo 
              "<td>"$zeile['Alter'] . "</td>";
                          echo 
              "<td> <input type='text' value="$zeile['Geburtstag']. " name=Geburtstag>" "</td>"
                          
              $button="<td> <input type='submit' name=save value=Speichern></td>";
                          echo 
              $button;    
                      }else{
                          echo 
              "<td>"$zeile['ID'] . "</td>";
                          echo 
              "<td>"$zeile['IVorname'] . "</td>";
                          echo 
              "<td>"$zeile['IIVorname'] . "</td>";
                          echo 
              "<td>"$zeile['Nachname'] . "</td>";
                          echo 
              "<td>"$zeile['Alter'] . "</td>";
                          echo 
              "<td>"$zeile['Geburtstag'] . "</td>";
                          echo 
              "<input type=hidden name=id value=".$zeile['ID'].'>';
                          
              $button="<td>""<input type='submit' name=edit value=Editieren>" "<input type='submit' name=del value=Löschen></td>";
                          echo 
              $button;
                      }
                      echo 
              '</form>';
                      echo 
              "</tr>";
                  }
                  echo 
              "<tr>";
                  echo 
              "<form name=newuser action=viewpage.php method=post>";
                  echo 
              "<td></td>";
                  echo 
              "<td> <input type='text' value='' name=IVorname></td>";
                  echo 
              "<td> <input type='text' value='' name=IIVorname></td>";
                  echo 
              "<td> <input type='text' value='' name=Nachname></td>";
                  echo 
              "<td></td>";
                  echo 
              "<td> <input type='date' value='' name=Geburtstag></td>"
                  
              $button="<td> <input type='submit' name=add value=Hinzufügen></td>";
                  echo 
              $button;
                  echo
              "</form>";
                  echo 
              "</tr>";
                  
                  echo 
              "</table>";
                  
              mysqli_free_result$db_erg );    
              ?>

              Kommentar


              • #8
                PHP-Code:
                $_POST array_map('strip_tags'$_POST); 
                Immer noch unnötig, wie tk1234 schon meinte, behandle den Kontextwechsel dann wenn er auftritt, mit den richtigen Mitteln:
                Speichern in die Datenbank: Prepared Statements ODER die von der API vorgesehene Escape-Funktion z.B. mysqli_real_escape_string()
                Ausgabe: htmlspecialchars()

                Deine Ausgabe mit den vielen echo's wirkt sehr unübersichtlich. Wenn du die den Code in einem halben Jahr nochmal ansiehst, wirst du dich drüber ärgern. Zudem können dich die meisten IDEs nicht auf Fehler im HTML hinweisen wenn du es so schreibst.
                + Du gibst die Werte aus der Datenbank einfach so aus. Auch hier ist der Kontextwechsel zu beachten.

                PHP-Code:
                    $button="<td> <input type='submit' name=add value=Hinzufügen></td>";
                    echo 
                $button
                super unnötig^^ Da fehlen auch Anführungszeichen für die Attribute des inputs.

                Kommentar

                Lädt...
                X