goedenavond iedereen,

ik ben met een script bezig die ervoor zorgt dat ik directorys kan aanmaken met een automatisch gegenereerde naam in mijn user panel. maar ik wil nu er ook voor zorgen dat er daarna een txt file met wat info van me inputfield automatisch word toegevoegd aan de directory die net is aangemaakt. hier is een voorbeeld van mijn script.

een map aanmaken lukt, maar txt file met content van me input fields toevoegen aan de net aangemaakte map krijg ik niet voor elkaar dus wat zou ik hierbij toe moeten voegen om dat te laten lukken.

ik heb in mijn html 4 input fields en al die info moet in een txt komen met dus de aangemaakt directory.
hopelijk is het te volgen en kan iemand me helpen!


<?php 

  $bytes = 5;
  $result = bin2hex(random_bytes($bytes));
  
  if(isset($_POST['submit'])) {
  $folder = $_POST['pathname'];
$dirPath = 'c:/xampp/htdocs/amkscript/'.$folder;
$result = mkdir($dirPath);

if ($result == '1') {

echo $dirPath . " has been created";

} else {
echo $dirPath . " has NOT been created";
}


header('location:index.php');
}
?>

Je wilt dus een txt-file plaatsen in de directory?
Heb je al gekeken naar [php]file_put_contents[/php] ?

Enne... op lijn 11 kijk je of de waarde van $result '1' is (een string)? Waarom?
Dit staat in de PHP manual:

Returns TRUE on success or FALSE on failure.

Verder is het verstandig om een exit() na je location-header te plaatsen. Nu maakt het weinig uit, maar als je script nog uitgebouwd zal worden, moet het wel meteen na het doorsturen stoppen.
ik heb het script gedeeltelijk ergens anders vandaan en zelf verder aangepast, dus ik zou ook niet weten waarom lijn 11 er zo uitziet.

ik heb naar file_put_content gekeken maar ik kom er niet helemaal aan uit hoe ik dit samen aan mijn huidige php script toevoeg zodat het gelijk na het toevoegen van mij directory de txt erbij toevoegt met de input info die is meegestuurd. graag een voorbeeld in code

alvast bedankt
Ga eerst een GOED controleren op lijn 11 of de directory aangemaakt is. (controleer op een boolean (true/false)
Ga in het geval dat het gelukt is dan het bestand aanmaken. Zie ook example #1 op de genoemde pagina over file_put_contents.
zoiets?


<?php 

  $bytes = 5;
  $result = bin2hex(random_bytes($bytes));
  
  if(isset($_POST['submit'])) {
  $folder = $_POST['pathname'];
$dirPath = 'c:/xampp/htdocs/script/'.$folder;
$result = mkdir($dirPath);

if ($result == 'TRUE') {

$file = 'people.txt';
// Open the file to get existing content
$current = file_get_contents($pathname);
// Append a new person to the file
$current .= "John Smith\n";
// Write the contents back to the file
file_put_contents($file, $current);

echo $dirPath . " has been created";

} else {
echo $dirPath . " has NOT been created";
}


header('location:index.php');
}
?>





en hoe zorg ik er nu dan voor dat mijn 3 input values worden toegevoegd in people.txt via post method?
TRUE is een boolean, geen string!
Dus weg met die quotes eromheen!

Je kan toch $_POST['person_1'], $_POST['person_2'] en $_POST['person_3'] gebruiken, of hoe die inputs maar mogen heten. Dat kan ik niet opmaken uit je script.
ik krijg nu een fout melding ( ik ben geen pro met php ik ben nog steeds elke dag aan het leren) wat doe ik fout?:


<?php 

  $bytes = 5;
  $result = bin2hex(random_bytes($bytes));
  
  if(isset($_POST['submit'])) {
  $folder = $_POST['pathname'];
$dirPath = 'c:/xampp/htdocs/script/'.$folder;
$result = mkdir($dirPath);

if ($result == TRUE) {

$file = 'people.txt';
// Open the file to get existing content
$current = file_get_contents($pathname);
// Append a new person to the file
$current .= $_POST['naam'], $_POST['achternaam'], $_POST['leeftijd'], $_POST['geslacht']; 
// Write the contents back to the file
file_put_contents($file, $current);

echo $dirPath . " has been created";

} else {
echo $dirPath . " has NOT been created";
}


header('location:index.php');
}
?>
Wordt XAMPP tegenwoordig niet standaard uitgerust met een (MySQL) database?

Waarom zou je deze gegevens in een tekstbestand willen opslaan?

Of, een betere vraag:
Waarom zou je deze gegevens ongestructureerd in een tekstbestand willen opslaan?

Als je dat dan toch om een of andere reden wilt doen (wat is hiervoor de motivatie?) dan zou ik op zijn minst denken aan een standaard formaat zoals CSV of JSON.

Wat er hierboven misgaat is waarschijnlijk het volgende:
- $pathname bestaat niet (deze variabele wordt nergens gedefinieerd in het bovenstaande fragment), dus het uitlezen lukt niet
- $file is enkel de bestandsnaam, en niet het volledige pad naar het bestand, dus het wegschrijven lukt ook niet
- je controleert nergens of het lezen of schrijven misgaat door de waarden die file_get_contents() en file_put_contents() retourneren te inspecteren

Je krijgt waarschijnlijk ook een E_WARNING "fout"melding wanneer je de directory probeert te creëren op het moment dat deze al bestaat.

Maar nogmaals, vanwaar dit gepiel met bestanden en directories?

NB: omdat je hier meteen een header('Location: ...') achteraan gooit die je naar index.php doorstuurt zie je waarschijnlijk ook geen meldingen op het scherm. Ik zou deze in eerste instantie weglaten zodat je kunt zien/onderzoeken wat er misgaat.
even uit de losse pols, zoiets?
Leuk om weer eens wat te pielen zoals Thomas hierboven zegt, lang geleden haha..


<?php 
  
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
	//$dirPath = 'c:/xampp/htdocs/amkscript/'.$folder;
        // even van mijn eigen wampserverje
	$dirPath = 'C:/wamp64/www/test/'.$_POST['pathname'];

	$result = mkdir($dirPath);

	if($result === true)
	{
		echo $dirPath . " has been created";
		$file = 'naam.txt';

		$current  = $_POST['voornaam']."\n";
		$current .= $_POST['achternaam']."\n";
		$current .= $_POST['pathname']."\n";
		file_put_contents($dirPath.'/'.$file, $current);

	}
	else 
	{
		echo $dirPath. " not been created";
	}

}

?>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>demo</title>
</head>

<body>
<form name="form" method="post" action="test.php">
	eerste naam<br>
	<input type="text" name="voornaam"><br>
	tweede naam<br>
	<input type="text" name="achternaam"><br>
	path<br>
	<input type="text" name="pathname"><br>
	<input type="submit" name="submit" value="toevoegen">
</body>

</html>


edit typo..
Er ontbreekt nog een FILE_APPEND flag denk ik? Anders wordt de vorige inhoud overschreven? Maar dit hangt af van wat de topicstarter wil I suppose, misschien wil 'ie wel per gebruiker een bestandje maken ofzo, geen idee.

Als je dan toch geen formattering gebruikt zou ik denk ik alle informatie van een enkele gebruiker wel op één regel zetten misschien, gescheiden door een of ander karakter. Als je dit over meerdere regels gaat verspreiden wordt het fatsoenlijk uitlezen (nog) bewerkelijker. Plus dan moet mogelijk veel code op de schop op het moment dat je besluit hier een of meer stukken informatie aan toe te voegen (ander "aantal regels" per gebruiker etc.).
True Thomas.
Ik denk dat TS nog een beetje moet oefenen met de code syntax.
Dan is het denk ik nog niet zo van belang dat er allemaal extra toeters en bellen aan zitten.
Vandaar dat ik het zo kaal mogelijk en dichtbij zijn eigen code heb gelaten. ;)

Reageren