Ankündigung

Einklappen
Keine Ankündigung bisher.

Dynamische Tabelle erstellen

Einklappen

Neue Werbung 2019

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

  • Dynamische Tabelle erstellen

    Hallo zusammen

    Ich versuche seit einigen Stunden vergebens eine Mysql tabelle in HTML aus zu geben. Das ganze soll eine Art Downloadseite werden, mit einer Tabelle un in jeder Zeile ist eine Beschreibung welcher indirekt auf den Download verlinkt.
    Das ganze sollte auch einen Downloadzähler integriert haben.

    Das error_reporting(E_ALL) in der 2. Zeile habe ich nur eingefügt, weil sonst kein Error angezeigt wird. (Auch jetzt nicht)

    PHP-Code:
    <?
    error_reporting(E_ALL);
    include "config.php";
    $dlcode = $_SERVER['QUERY_STRING'];
    if($dlcode==""){
    ?>
    <html>
    <head>
        <title>Downloads</title>
    </head>
    <body>
        <table width="100%" cellpadding="0" cellspacing="0";>
            <tr>
                <td width="22%" bgcolor="#666666">
                    <div align="center">
                        <a>Downloads</a>
                    </div>
                </td>
            </tr>
            <?php
            
    if(!isset($bgcolorswithcer))        { $bgcolorswithcer=0; }
            
    $query "Select * from ".$DBprefix."dl";  
            
    $result mysql_query($query); 
        
            
    // while schlaufen zum ausgeben
            
    while($row mysql_fetch_array($result)){
            
    ?>
            <tr> 
                <td bgcolor="<?PHP if ($bgcolorswithcer == 0) { echo "#999999"$bgcolorswithcer 1;}else{ echo "#666666"$bgcolorswithcer 0;} // zum jede zweite zeile anderst zu färben    ?>">
                    <div align="center">
                        <font color="#FFFFFF"> 
                            <?PHP $code=$row["code"]; $bes=$row["bes"]; $echo="<a href='downloads.php?$code'>$bes</a>"; echo $echo?> <!-- DB ausgeben-->
                        </font>
                    </div>
                </td>
            <tr>
            <?php // and very important end the while loop ?>
        </table>
    </body>
    </html>
    <?php
    }else{

    //Anzahl erhöhen
    $query "SELECT * FROM ".$DBprefix."dl WHERE code='$dlcode'";    
    $result mysql_query($query);
    if(
    $row mysql_fetch_array($result)){
    $download_zahl $row["zahl"];     //zahl = spalte mit download anzahl
    $linkt1 $row["dlurl1"];        //dlurl1 = spalte mit link teil 1
    $linkt2 $row["dlurl2"];        //dlurl2 = spalte mit link teil 2 
    $dlzn $download_zahl 1;        //download anzahl erhöhen
    $query "UPDATE ".$DBprefix."dl SET zahl ='$dlzn' WHERE code='$dlcode'";//DB updaten
    $result mysql_query($query);
    echo 
    "Anzahl erhöt<br>";
    }
    ///////////////////////////////////////////////////////////////////////////////////////////
    $link $linkt1.".".$linkt2;
    echo 
    "eingetragen <br>link = $link";
    header("Location: downloads/$link");
    }
    ?>

    Die Config.php die am Anfang eingebettet wird
    PHP-Code:
      $server "localhost";     // oft localhost
    $username "root";         // Dein MySQL server benutzername
    $password "";             // Dein MySQL server password
    $database "Download";     // Datenbank die benutz wird (wird erstellt)
    $DBprefix "dl";            // Prefix für die Tabellen
    // ErrorStrings:
    $couldNotConnectMysql "Could not connect MySQL<BR>";
    $couldNotOpenDatabase "Could not open database<BR>";
    // if the prefix is not empty add an _ (underscore)
    if ($DBprefix != ""){$DBprefix $DBprefix "_";}
    if(!isset(
    $noconnect)){
    $conn mysql_connect($server,$username,$password) or die ($couldNotConnectMysql); 
    mysql_select_db($database,$conn) or die ($couldNotOpenDatabase);


  • #2
    Schön.... und? Was ist jetzt deine konkrete Frage?

    Kommentar


    • #3
      Na, das Lokal in Xampp alles funktioniert und sobalt es online ist nur eine Weisse Seite angezeigt wird. Ich habe es bei 2 Hostern versucht. Zusätzlich noch auf 2 eigenen unabhängigen Servern. Immer das selbe. Nur eine Weisse Seite. Dabei habe ich überall einträge in der Datenban, sowie Dateien zum Herunterladen.

      Kommentar


      • #4
        Weiße Seite deutet auf Fehler hin... setze zusätzlich mal noch display_errors:
        PHP-Code:
        error_reporting(E_ALL);
        ini_set("display_errors"1); 
        Außerdem ist dein Script gegen SQL-Injections anfällig.

        Kommentar


        • #5
          PHP-Code:
          error_reporting(E_ALL);
          ini_set("display_errors"1); 
          Hilft nicht. Es wird immer noch nichts angezeigt.

          Ich stimme dir 100% zu, das das Script SQL-Injections anfällig ist. Das ist mir bei diesem Script gar nicht aufgefallen.
          Ist es richtig, wenn ich zu begin des Scripts nach einlesen des Querystrings diesen Code einfüge?
          PHP-Code:
          $bad = array("union","'",'"',"select","where","from","delete","mysql");
          foreach(
          $bad as $b){
          if (
          strpos($dlcode,$b))die("An Unknown Error Occured"); 

          Kommentar


          • #6
            Ein einfaches [MAN]mysql_real_escape_string[/MAN] reicht vollkommen aus, probier dir da nichts eigenes zusammen zu schrauben. Oder du benutzt PDO (oder ähnliches) mit Prepared Statements, dann musst du dich gar nicht um das Escaping kümmern und hast eine Abstraktion zu deinem verwendeten Datenbanksystem.

            Wird denn auch im Quelltext gar nichts angezeigt? Hast du mal in dein PHP-Errorlog geguckt?

            Kommentar


            • #7
              Zitat von Feelex Beitrag anzeigen
              Ein einfaches [MAN]mysql_real_escape_string[/MAN] reicht vollkommen aus, probier dir da nichts eigenes zusammen zu schrauben. Oder du benutzt PDO (oder ähnliches) mit Prepared Statements, dann musst du dich gar nicht um das Escaping kümmern und hast eine Abstraktion zu deinem verwendeten Datenbanksystem.

              Wird denn auch im Quelltext gar nichts angezeigt? Hast du mal in dein PHP-Errorlog geguckt?
              Also wenn ich das richtig verstanden habe:
              PHP-Code:
              $query sprintf("SELECT * FROM ".$DBprefix."dl WHERE code='$dlcode'"mysql_real_escape_string($dlcode); 
              Die anderen Mysql anfragen sind nicht auf Benutzereingaben bassierend.

              Nach ändern der php.ini Datei bekam ich den Fahler, das die "}" Klammer nach der ersten Variante falsch ist. Demnach habe ich versucht das ganze als echo wieder zu geben. Das hat auch geklappt. Neben beio habe ich auch den <!DOCTYPE HTML> hinzugefügt. Nach dem ich das ganze auf mein Server kopiert habe, bekam ich als erstes nur den Quelltext zu sehen. Ich musste also PHP installieren (obwoh ich dachte, dass ich das schon installiert habe.) Und siehe da, es funktioniert.
              Aber! Wenn ich das nun auf einen gemieteten Hoster kopiere, bekomme ich auch nur den PHP Quelltext! und ich kann mir nicht vorstellen, das PHP dort nicht läuft, vorallem, weil dies nicht die erste PHP Anwendung ist, die ich auf diesem Server betreibe.
              Diese Scripts laufen ohne Probleme weiter.
              PHP-Code:
              <?
              error_reporting(E_ALL);
              ini_set("display_errors", 1);  
              include "config.php";
              $dlcode = $_SERVER['QUERY_STRING'];
              if($dlcode==""){
              echo "
              <!DOCTYPE HTML>
              <html>
              <head>
                  <title>Downloads</title>
              </head>
              <body>
                  <table width='100%' cellpadding='0' cellspacing='0'>
                      <tr>
                          <td width='22%' bgcolor='#666666'>
                              <div align='center'>
                                  <a>Downloads</a>
                              </div>
                          </td>
                      </tr>
                      ";
                      if(!isset($bgcolorswithcer))        { $bgcolorswithcer=0; }
                      $query = "Select * from ".$DBprefix."dl";  
                      $result = mysql_query($query); 
                  
                      // use a while loop to print al the results
                      while($row = mysql_fetch_array($result)){
                      echo "
                      <tr> 
                          <td bgcolor="; if ($bgcolorswithcer == 0) { echo "#999999"; $bgcolorswithcer = 1;}else{ echo "#666666"; $bgcolorswithcer = 0;} echo ">
                              <div align='center'>
                                  <font color='#FFFFFF'>"; 
                                      $code=$row["code"]; $bes=$row["bes"]; $echo="<a href='downloads.php?$code'>$bes</a>"; echo $echo; echo "
                                  </font>
                              </div>
                          </td>
                      <tr>";
                      } echo "
                  </table>
              </body>
              </html>
              ";
              }else{


              //Anzahl erhöhen
              $query = sprintf("SELECT * FROM ".$DBprefix."dl WHERE code='$dlcode'", mysql_real_escape_string($dlcode));    
              $result = mysql_query($query);
              if($row = mysql_fetch_array($result)){
              $download_zahl = $row["zahl"]; //zahl = spalte mit download anzahl
              $linkt1 = $row["dlurl1"];
              $linkt2 = $row["dlurl2"];
              $dlzn = $download_zahl + 1;
              $query = "UPDATE ".$DBprefix."dl SET zahl ='$dlzn' WHERE code='$dlcode'";
              $result = mysql_query($query);
              }
              ///////////////////////////////////////////////////////////////////////////////////////////
              $link = $linkt1.".".$linkt2;
              echo "eingetragen <br>link = $link";
              header("Location: downloads/$link");
              }
              ?>

              Kommentar


              • #8
                Lass das sprintf weg, am besten du escapsed die Variable direkt:
                PHP-Code:
                dlcode mysql_real_escape_string($dlcode); 
                Eventuell sind auch short-tags deaktiviert. Probiere mal <?php anstatt <?

                Kommentar


                • #9
                  Wow, vielen Dank wenn ich das <? am Anfang mit <?php ersetze funktioniert das ganze. Ich benutze eigentlich immer <?php deshalb habe ich keine Angaben, wie das passieren konnte. Vielen Dank!

                  Kommentar


                  • #10
                    Okay, dann musst du nur noch das mit den mysql_real_escape machen Deine vorherige Variante mit sprintf hat dir nämlich 0% mehr Schutz gegeben

                    Kommentar


                    • #11
                      Habe nach deinem letzten Post
                      PHP-Code:
                      $query sprintf("SELECT * FROM ".$DBprefix."dl WHERE code='$dlcode'"mysql_real_escape_string($dlcode); 
                      mit
                      PHP-Code:
                      $query "SELECT * FROM ".$DBprefix."dl WHERE code='$dlcode'"
                      ersetzt und dafür am Anfang
                      PHP-Code:
                      $dlcode $_SERVER['QUERY_STRING'];
                      $dlcode mysql_real_escape_string($dlcode); 
                      eingefügt. Ist das richtig? Oder wie muss das gelöst sein?

                      Kommentar

                      Lädt...
                      X