Ik wil een bestand door een gebruiker laten hernoemen. De aanroep wordt FileRename.php?id=text.txt
Er wordt dan een formulier getoond met de naam. Deze kan dan aangepast worden. Nu komt het. Dat gebeurt dus niet. Hier mijn code, zonder <! Doc...
<?php
$filenaam=($_GET["id"]);
If (isset($_POST['submit'])) {
$nieuwenaam = $_POST['nieuwenaam'];
if (!file_exists($nieuwenaam)) {
copy($filenaam, $nieuwenaam);
unlink($filenaam);
echo '<script type="text/javascript">alert("Gelukt\n\nHet bestand is hernoemd. U keert nu terug.");</script>' ;
header('Location: EditDir.php');
} else {
echo '<script type="text/javascript">alert("Helaas \n\nHet bestand bestaat al. U keert nu terug.");</script>' ;
header('Location: EditDir.php');
}
}
?>
<br>
<br>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name="hernoemen" onkeypress="return event.keyCode != 13;">
<table width="50%" border="0" bgcolor="fefefe">
<tr>
<td><div align="center">Bestand hernoemen</div></td>
</tr>
<tr><td><div align="center">Huidige naam: <i>'<?php echo $filenaam; ?>'</i></div></td></tr>
<tr>
<td><div align="center">Hernoemen naar:<br>
<input type="text" name="nieuwenaam" size="90" minsize="5" maxsize="90" placeholder="<?php echo $filenaam; ?>" value='<?php echo $filenaam; ?>' required />
</div></td></tr>
<tr><td><div align="center">
<input type="hidden" name="submit" value="true" />
<input type="submit" value=" Hernoem het bestand " />
</div>
</td></tr>
</table>
</form>
Wat SanThe zegt.
Tevens zie ik een hoop fouten in je code waar je tegenaan kan lopen:
- Ik zie nergens een controle of je $_GET['id'] bestaat. Dit kan eenvoudig in combinatie met [php]isset[/php]
- Ik zie dat je output (javascript alert) voor je header plaatst, en dat dat kan niet. Er mag GEEN output voor een header staan. Tevens als je een location-header gebruikt moet je deze beëindigen met een exit(). Je script wil je ook daadwerkelijk stoppen vanaf dat moment.
- Verder is <?php echo $_SERVER['PHP_SELF'];?> overbodig in je action en kan je deze weglaten. je voer immers toch het script uit in hetzelfde bestand. Ook mag je zelfs het action-attribuut volledig weglaten in HTML5, in dit geval.
En nog een kanttekening: Tabellen zijn niet meer nodig hiervoor. Met de juiste CSS-regels op je formulier elementen kan je prima je formulier opmaken en indelen.
@SanThe: Ik heb dit gebruikt en ik kreeg geen foutmelding meer.
@Ariën: Check id komt fase 2. Dank voor de opmerkingen/aanwijzingen. Heb ik echt wat aan. Dank! CSS had ik eruit gehaald om zo min mogelijk code te hebben en te testen.
[size=xsmall]Toevoeging op 11/10/2017 13:05:17:[/size]
Dank!. Ik heb de code aangepast en helemaal opgenomen.
Vraag: Ik weet alleen niet waar ik de header nu moet neerzetten, omdat ik terug wil gaan.
CSS: styling wel opgenomen, allen tabel nog niet eruit gehaald.
Moet nog een hoop leren, en leer een hoop dank jullie!
je realiseert je dat als het kopieren niet goed gaat, bijvoorbeeld omdat de nieuwe naam onmogelijk is door rare tekens, je in de volgende regel wel de oorspronkelijke file weggooit?
De functie rename() lijkt me beter geschikt. Ook al, omdat je dan niet eerst een file van 2GB kopieert (overdreven, maar om even aan te geven wat je doet) om daarna de oorsprong weg te gooien
[size=xsmall]Toevoeging op 11/10/2017 14:05:02:[/size]
En je moet natuurlijk ook als PHP zijnde, schrijfrechten hebben op die file/locatie
@Ivo, Ariën:
Ik heb eea aagenaspt. Schrijfrechten zijn goed. En een goede tip op te renamen. Ik krijg echter geen melding of het nu goed of slecht gegaan is. Kennelijk doe ik nog iets niet goed. De header('Location heb ik er uit gehaald.
Willen jullie nog eens meekijken en mij de goede kant op zetten?
dank
Jan
[size=xsmall]Toevoeging op 11/10/2017 14:26:19:[/size]
@Ivo, Ariën:
Ik heb eea aagenaspt. Schrijfrechten zijn goed. En een goede tip op te renamen. Ik krijg echter geen melding of het nu goed of slecht gegaan is. Kennelijk doe ik nog iets niet goed. De header('Location heb ik er uit gehaald.
Willen jullie nog eens meekijken en mij de goede kant op zetten?
dank
Jan
[size=xsmall]Toevoeging op 11/10/2017 14:29:19:[/size]
@Ivo, Ariën:
Ik heb eea aagenaspt. Schrijfrechten zijn goed. En een goede tip op te renamen. Ik krijg echter geen melding of het nu goed of slecht gegaan is. Kennelijk doe ik nog iets niet goed. De header('Location heb ik er uit gehaald.
Willen jullie nog eens meekijken en mij de goede kant op zetten?
dank
Jan
[size=xsmall]Toevoeging op 11/10/2017 14:29:31:[/size]
@Ivo, Ariën:
Ik heb eea aagenaspt. Schrijfrechten zijn goed. En een goede tip op te renamen. Ik krijg echter geen melding of het nu goed of slecht gegaan is. Kennelijk doe ik nog iets niet goed. De header('Location heb ik er uit gehaald.