Form word niet gepost

Status
Niet open voor verdere reacties.

lord4163

Banned
Lid geworden
17 dec 2007
Berichten
3.155
Hallo,

Ik ben bezig met een simpele filemanager, ik laat alle bestanden in een map zien en vervolgens kun je die downloaden en verwijderen, dat lukt ook prima, alleen het hernoemen wil niet werken. Zodra er op renameButton geklikt word open ik een modal met JavaScript waar de nieuwe naam moet worden ingevuld. Alleen krijg ik geen response van renameButton via PHP.

Ik krijg het niet voor elkaar, ik ben nu drie dagen bezig om dit werkend te krijgen.

PHP:
// class

public function generateFileTable() {
	if (is_dir($this->xml->library)) {
		$dir = opendir($this->xml->library);
		while(($file = readdir($dir)) !== false) {
			if ($file != "." && $file != "..") {
				echo '<tr>';
					echo '<td class="filename">'.$file.'</td>';
					echo '<td>';
						echo '<form style="padding:0; margin:0;" method="post">';
							echo '<button type="submit" name="delete" style="margin-right: 10px;" class="btn btn-danger" value="'.$file.'">Delete</button>';
							echo '<button type="submit" name="renameButton" onclick="showRenameModal();" value="'.$file.'" role="button" data-toggle="modal" style="margin-right: 10px;" class="btn btn-primary">Rename</button>';
							echo '<button type="submit" name="download" class="btn btn-success" value="'.$this->xml->library.$file.'">Download</button>';
						echo '</form>';
					echo '</td>';
				echo '</tr>';
			}
		}
		closedir($dir);
	}
}

public function renameFile($oldFileName, $newFileName) {
	rename($this->xml->library.$oldFileName, $this->xml->library.$newFileName);
	//header('Location: index.php#library');
}

//index.php

if(isset($_POST['rename'])) {
	$oldFileName = $_POST['oldFileName'];
	$newFileName = $_POST['newFileName'];
	echo($oldFileName."<br />".$newFileName);
	$easySignage->renameFile($oldFileName, $newFileName);
}

<table class="table table-bordered">
	<tr>
		<th>Filename</th>
		<th>Action</th>
	</tr>
	<?php $class->generateFileTable(); ?>
</table>
<form method="post">
	<div id="renameFile" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="renameFile" aria-hidden="true">
		<div class="modal-header">
			<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
			<h3>Rename</h3>
		</div>
		<div class="modal-body">
			<label for="newFileName">Name:</label>
				<input name="newFileName" id="newFileName" type="text" />
[COLOR="#FF0000"]				<?php
					if(isset($_POST['renameButton'])) {
						$oldFileName = $_POST['renameButton'];
						echo '<input name="oldFileName" value="'.$oldFileName.'" type="hidden" />';
						echo "blub blub renameButton clicked!";
					}
				?>[/COLOR]
		</div>
		<div class="modal-footer">							
			<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
			<input name="rename" type="submit" class="btn btn-success" value="Save" />
		</div>
	</div>
</form>

Met vriendelijke groeten,
Fabian
 
Laatst bewerkt door een moderator:
De enige betrouwbare en juiste manier om te controleren of een formulier is verzonden is zo:
PHP:
if('POST' === $_SERVER['REQUEST_METHOD']) {
    // Een formulier is verzonden, inhoud dumpen
    var_dump($_POST);
} else {
    echo 'Er is geen formulier verzonden';
}

Verder is het wel handig om de inhoud van de javascript functie showRenameModal() te zien, aangezien die aangeroepen wordt bij een klik-event op <button type="submit" name="renameButton" />
 
@Tha Devil

Ik zat al op je te wachten, ik heb ook al geprobeerd een var_dump te doen, en ik krijg niets te zien in de array. De onclick heb ik er al uitgehaald, het JavaScript heeft er niets mee te maken in principe. Ik hoop dat je een fout vind. De output is helaas: Er is geen formulier verzonden.
 
Laat ik ten eerste zeggen dat het niet gebruikelijk is om binnen functies "echo" te gebruiken, meestal schrijf je functies om iets terug te krijgen dat je dan verwerkt.

Verder is het nu zo dat binnen "generateFileTable" per item een formulier wordt aangemaakt welke naar dezelfde pagina zal worden verstuurd.

Ik zou het zo ombouwen:
PHP:
public function generateFileTable()
{
    $output = '';
    if (is_dir($this->xml->library)) {
        $dir = opendir($this->xml->library);
        while(($file = readdir($dir)) !== false) {
            if ($file != "." && $file != "..") {
                $output .= sprintf('
                <tr>
                    <td class="filename">%1$s</td>
                    <td class="fileactions">
                        <form action="" method="post">
                            <input type="hidden" name="file" value="%1$s" />
                            <button type="submit" name="action" class="btn btn-danger" value="delete">Delete</button>
                            <button type="submit" name="action" class="btn btn-primary" value="rename">Rename</button>
                            <button type="submit" name="action" class="btn btn-success" value="download">Download</button>
                        </form>
                    </td>
                </tr>
                ',
                $file);
            }
        }
        // Check for empty directory
        if('' === $output)
        {
            $output = sprintf('
                <tr>
                    <td colspan="2">%1$s</td>
                </tr>
                ',
                'There are no files in this directory');
        }
        closedir($dir);
        return $output;
    }
}
PHP:
if('POST' === $_SERVER['REQUEST_METHOD']) {
    if(isset($_POST['file']) && '' !== $_POST['file'])
    {
        if(isset($_POST['action'])) {
            switch($_POST['action'])
            {
                // Actie uitvoeren om $_POST['file'] te verwijderen
                case 'delete':
                    printf('Delete %1$s', $_POST['file']);
                break;
                // Toon formulier om $_POST['file'] te kunnen hernoemen
                case 'rename':
                    printf('
                        <h1>Edit file name %1$s</h1>
                        <form action="" method="post">
                            <input type="hidden" name="file" value="%1$s" />
                            <label for="newFileName">Name:</label>
                            <input id="newFileName" name="newFileName" type="text" />
                            <button type="submit" name="action" value="renamefile" class="btn btn-primary">Rename</button>
                        </form>
                    ',
                    $_POST['file']);
                break;
                // Actie uitvoeren om $_POST['file'] daadwerkelijk te hernoemen
                case 'renamefile':
                    var_dump($_POST);
                break;
                // Actie uitvoeren om $_POST['file'] te downloaden
                case 'download':
                    printf('Download %1$s', $_POST['file']);
                break;
                default:
                    echo 'No valid action was given';
                break;
            }
        } else {
            echo '$_POST[\'action\'] was not set';
        }
    } else {
        echo 'No file was given';
    }
}
?>
<table class="table table-bordered">
    <tr>
        <th>Filename</th>
        <th>Action</th>
    </tr>
    <?= $class->generateFileTable(); ?>
</table>

Uiteindelijk zou ik het zo bouwen dat er één formulier over je tabel heen zit en er één setje knoppen is.
Je zult dan per rij een checkbox of radio moeten hebben zodat je aan kunt geven voor welk(e) bestand(en) de gekozen actie moet worden uitgevoerd.

Zo dus:
PHP:
public function generateFileTable()
{
    $output = '';
    if (is_dir($this->xml->library)) {
        $dir = opendir($this->xml->library);
        while(($file = readdir($dir)) !== false) {
            if ($file != "." && $file != "..") {
                $output .= sprintf('
                <tr>
                    <td><input type="radio" name="file" value="%1$s" /></td>
                    <td class="filename">%1$s</td>
                </tr>
                ',
                $file);
            }
        }
        // Check for empty directory
        if('' === $output)
        {
            $output = sprintf('
                <tr>
                    <td colspan="2">%1$s</td>
                </tr>
                ',
                'There are no files in this directory');
        }
        closedir($dir);
        return $output;
    }
}
PHP:
if('POST' === $_SERVER['REQUEST_METHOD']) {
    if(isset($_POST['file']) && '' !== $_POST['file'])
    {
        if(isset($_POST['action'])) {
            switch($_POST['action'])
            {
                // Actie uitvoeren om $_POST['file'] te verwijderen
                case 'delete':
                    printf('Delete %1$s', $_POST['file']);
                break;
                // Toon formulier om $_POST['file'] te kunnen hernoemen
                case 'rename':
                    printf('
                        <h1>Edit file name %1$s</h1>
                        <form action="" method="post">
                            <input type="hidden" name="file" value="%1$s" />
                            <label for="newFileName">Name:</label>
                            <input id="newFileName" name="newFileName" type="text" />
                            <button type="submit" name="action" value="renamefile" class="btn btn-primary">Rename</button>
                        </form>
                    ',
                    $_POST['file']);
                break;
                // Actie uitvoeren om $_POST['file'] daadwerkelijk te hernoemen
                case 'renamefile':
                    var_dump($_POST);
                break;
                // Actie uitvoeren om $_POST['file'] te downloaden
                case 'download':
                    printf('Download %1$s', $_POST['file']);
                break;
                default:
                    echo 'No valid action was given';
                break;
            }
        } else {
            echo '$_POST[\'action\'] was not set';
        }
    } else {
        echo 'No file was given';
    }
}
?>
<form action="" method="post">
    <button type="submit" name="action" class="btn btn-danger" value="delete">Delete</button>
    <button type="submit" name="action" class="btn btn-primary" value="rename">Rename</button>
    <button type="submit" name="action" class="btn btn-success" value="download">Download</button>
    <table class="table table-bordered">
        <tr>
            <th>Filename</th>
            <th>Action</th>
        </tr>
        <?php echo $class->generateFileTable(); ?>
    </table>
</form>
Als de lijst erg lang is kun je er ook nog voor kiezen om de knoppen nogmaals onderaan de pagina te tonen (kwestie van kopiëren, plakken)
Succes :thumb:
 
Ik heb dit bericht eerder al gezien, maar had nog geen tijd gehad om het te lezen en uit te proberen, ziet er geweldig uit, en weer allemaal nieuwe dingen geleerd. Hartstikke bedankt!

Nog een vraagje, hoe kan ik nu een modal openen zodra ik op de Rename knop klik?
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan