Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
JS mit PHP und SQL
#1
Hallo liebe Helfergemeinde Undecided 

mit PHP und SQL habe ich schon einiges geschrieben. Nun muss aber JS hinzu - und schon gehen die Probleme los.
Mein Anliegen: Ich habe ein Upload-Formular, welches nach dem Upload die Daten in eine SQL schreibt. Das funktioniert auch bestens. Ich kann Daten hochladen, abrufen und ansehen und auch wieder löschen. (Nicht in diesem Teil des Programmes...)

Ich muss aber auch große Dateien (bis ca. 150MB) hochladen können. Deshalb muss da eine Fortschrittsanzeige hin, sonst weiß der User nicht, dass da im HG etwas passiert. Hier ist mein PHP-Programm, welches auch schon funktioniert. (Aber noch in Entwicklung)

Code:
<?php
session_start();
$dat_id = $_GET['ID'];
include "akt_head.php";
?>
<script src="upload.js" type="text/javascript"></script>
<style>
#Inhalte-werden-zentriert {
  display: flex;
  align-items: center;
  justify-content: center;
}
</style>
<div id="header">Dateien einf&uuml;gen</div>
<div id="inhalt">
<a name="Oben"></a>
<?php
function post_slug($str)
{
  return strtolower(preg_replace(array('/[^a-zA-Z0-9 -]/', '/[ -]+/', '/^-|-$/'),
  array('', '_', ''), remove_accent($str)));
}
function remove_accent($str)
{
  $a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'Ð', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', '?', '?', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', '?', '?', 'L', 'l', 'N', 'n', 'N', 'n', 'N', 'n', '?', 'O', 'o', 'O', 'o', 'O', 'o', 'Œ', 'œ', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'Š', 'š', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Ÿ', 'Z', 'z', 'Z', 'z', 'Ž', 'ž', '?', 'ƒ', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', '?', '?', '?', '?', '?', '?');
  $b = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'l', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o');
  return str_replace($a, $b, $str);
}
// Hier geht es richtig los
include "db_conn.inc";
if (isset($_POST["dele1"])) {
    if(is_file('Akten/'.htmlentities($_SESSION['dat_datei']))) {
        unlink ('Akten/'.htmlentities($_SESSION['dat_datei']));
        $_SESSION['dat_datei'] = $dat_datei = "";
    }
    $dat_id = $_SESSION['dat_id'];
    $sqlupdate = "UPDATE akt_archiv SET dateiname = '', dateiort = '' WHERE id = '$dat_id'";
    $result = mysqli_query($dbank, $sqlupdate);
    if (!$result) {
        echo "Konnte Abfrage nicht erfolgreich ausführen von DB: " . mysql_error();
        echo "<a href='akten-sql.php'>Zurück zur Tabelle</a>";
        //echo "<input type='button' value='Schließen und zurück' onclick='close()'>";
        exit;
    }
    echo "<meta http-equiv='refresh' content='0; URL=bildload.php?ID=".htmlentities($dat_id)."'>";
}

if (isset($_POST["abbruch"])) {
    $dat_id = $_SESSION['dat_id'];
    echo $dat_id;
    echo "<meta http-equiv='refresh' content='0; URL=akten-sql.php#".htmlentities($dat_id)."'>";
    exit;
}
if (isset($_POST["lokalinsert"])) {
    $dat_id = $_SESSION['dat_id'];
    $dat_datei = $_POST['file2'];
    $sqlupdate = "UPDATE akt_archiv SET Dateiname = '$dat_datei', dateiort = 'l' WHERE id = '$dat_id' ";
    $result = mysqli_query($dbank, $sqlupdate);
    if (!$result) {
        echo "Konnte Dateiname nicht speichern! " . mysqli_error();
        echo '<meta http-equiv="refresh" content="20; URL=akten-sql.php#'.$dat_id.'">';
        exit;
    }
    echo '<meta http-equiv="refresh" content="0; URL=akten-sql.php#'.$dat_id.'">';
}

// ausgewählte Bilder nach umrechnen und laden
//if ($_SERVER["REQUEST_METHOD"] === "POST") {
if (!isset($_POST["bildinsert"])) {
    $sql = mysqli_query ($dbank, "SELECT * FROM akt_archiv WHERE id = $dat_id");
    $daten = mysqli_fetch_assoc($sql);
    $dat_id = $daten['id'];
    $dat_datei = $daten['dateiname'];
    $dat_dateiort = $daten['dateiort'];
    $_SESSION['dat_id'] = $dat_id;
    $_SESSION['dat_datei'] = $dat_datei;
} else {
    // Hier muss der DIR-Name aus der Datenbank hinein, mit SESSION übergeben?
    $dat_id = $_SESSION['dat_id'];
    $dat_datei = $_FILES['file1']['name']; //$_SESSION['dat_datei'];
    $targetDir = 'Akten/'; //Zum Ablegen der Dateien
    foreach($_FILES as $fieldName => $fileData){
        if(!$fileData['name']){
            echo "Keine Datei im Feld '{$fieldName}' angegeben.<br />\n";
            continue;
        }
        if($fileData['error']){
            echo "Fehler beim Upload von '{$fileData['name']}'.<br />\n";
            echo "<pre>" ;
                print_r($_GET);
                print_r($_POST);
                print_r($_SESSION) ;
                print_r ($_FILES) ;
                echo "</pre>" ;
                $dat_id = $_SESSION['dat_id'];
                echo "<meta http-equiv='refresh' content='20; URL=bildload.php?ID=".htmlentities($dat_id)."'>";
                exit;
        }
        //$dateiname = explode(".", $fileData['name']);
        //$namekorrekt = post_slug($dat_datei);
        //$fileData['name'] = $namekorrekt.".".$dateiname[1];
        $filepath_old =  $fileData['tmp_name'];
        $filepath_new = $targetDir . $fileData['name'];        
        move_uploaded_file($filepath_old, $filepath_new);
        
        $sqlupdate = "UPDATE akt_archiv SET Dateiname = '$dat_datei', dateiort = 'w' WHERE id = '$dat_id' ";
        $result = mysqli_query($dbank, $sqlupdate);
        if (!$result) {
            echo "Konnte Fotoname nicht speichern! " . mysqli_error();
            echo '<meta http-equiv="refresh" content="20; URL=fotos-sql.php#'.$dat_id.'">';
            exit;
        }
    }
    echo '<meta http-equiv="refresh" content="0; URL=akten-sql.php#'.$dat_id.'">';
}
//}
?>
<form name="load" method="post" enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"]; ?>" >
// onsubmit="ajaxForm(this);return false;"
<table id="newtab">
    <tr>
        <td colspan="5"><h5><?PHP echo $daten['titel'];?></h5></td>
    </tr>
    <tr>
        <td>PDF-Datei ausw&auml;hlen: <?PHP echo $dat_datei; ?></td>        
        <td width="150"><?PHP if (!$dat_datei) { echo ' <input type="hidden" name="MAX_FILE_SIZE" value="60000000" /><input type="file" name="file1" accept="application/pdf">'; } ?></td>    
        <td width="100"><?PHP if ($dat_datei) { echo '<button type="submit" name="dele1"> L&ouml;schen</button>'; } ?></td>            
    </tr>
    <tr>
        <td><?PHP echo '<input type="hidden" name="dat_datei" value="'.$dat_datei.'">'; ?></td>
        <td width="150"><button type="submit" name="bildinsert"> Hochladen </button></td>
        <td width="100"></td>        
    </tr>
</table>
</form>
<?PHP
if ($_SESSION['archiv'] == "Ja"){
    echo <<<FORM
    <form action="{$_SERVER['PHP_SELF']}" method="post">
    <table id="newtab">
    <tr>
<td colspan="5"><h5>{$daten['titel']}</h5></td>
    </tr>
    <tr>
        <td width="170">Datei ausw&auml;hlen: </td>
        <td width="250">{$dat_datei}</td>        
        <td width="150"><input type="file" name="file2" ></td>    
        <td width="100"><button type="submit" name="dele1"> L&ouml;schen</button></td>            
    </tr>
    <tr>
        <td width="170">{$dat_datei}</td>
        <input type="hidden" name="dat_datei" value="{$dat_datei}">
        <td width="250"><button type="submit" name="abbruch"> Abbrechen </button></td>
        <td width="150"><button type="submit" name="lokalinsert"> Hochladen </button></td>
        <td width="100"></td>        
    </tr>
    </table>
    </form>
FORM;
}
echo <<<FORM
    <form action="{$_SERVER['PHP_SELF']}" method="post">
    <table id="newtab">
    <tr>
        <td width="250"><button type="submit" name="abbruch"> Abbrechen </button></td>
    </tr>
    </table>
    </form>
FORM;

echo "Ende";
?>
</div>

Für die Uploadanzeige habe ich mich für eine Datei von Tristan Radke entschieden: Upload
Ich habe eine *.JS erstellt und die eingebunden. Zum Glück funktionierte es auf Anhieb.
Aber nun hänge ich in der Luft und sehe vermutlich nur den Wald vor lauter Bäumen nicht:

Wenn ich den im FORM jetzt auskommentierten Teil mit  onsubmit  einbinde zeigt er mir den Upload an, aber danach bleibt er "irgendwo" hängen.
Also ich komme nicht in den Programmteil, wo meine Daten in die Datenbank geschrieben werden und ich dann ins Hauptprogramm zurückkomme. Hat da jemand einen Tipp für mich? Irgendwie stehe ich da auf dem Schlauch...

Danke schon mal.
Zitieren
#2
Zitat:Ich muss aber auch große Dateien (bis ca. 150MB) hochladen können.

Funktioniert das denn schon ohne Fortschrittsanzeige? Das Hochladen von großen Dateien kann nämlich Probleme machen weil es da Begrenzungen für POST-Parameter gibt.
Glaube denen, die die Wahrheit suchen, und zweifle an denen, die sie gefunden haben.
(Andrι Gide (1869-1951), frz. Schriftst., 1947 Nobelpreis)
Zitieren
#3
(21.08.2023, 17:48)Sempervivum schrieb:
Zitat:Ich muss aber auch große Dateien (bis ca. 150MB) hochladen können.

Funktioniert das denn schon ohne Fortschrittsanzeige? Das Hochladen von großen Dateien kann nämlich Probleme machen weil es da Begrenzungen für POST-Parameter gibt.

Die Größen kann ich mit PHP und der PHP.INI verändern. Jetzt stehen sie bei 64MB.
Aber darum geht es gar nicht, das ist auch nicht mein Problem.

Nur, dass ich jetzt irgendwo im Nirvana lande und nicht weiß, wie ich meinen weiteren Code in PHP abarbeiten kann...
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen:
1 Gast/Gäste