Een directory aflopen .??
Kan iemand mij zeggen hoe ik het volgende kan doen in php.
1. Ik heb een directory waarin vele text files staan.
2. Ik wil deze directory aflopen en telkens de naam van de text file doorgeven aan een variable.
Momenteel doe ik dit nu stuk voor stuk via html
<input type="file" id="avatar" name="zoekterm" accept=".txt"><br><br>
Ik zou het dus willen automatiseren .
Dank bij voorbaat.
https://www.google.com/search?q=php+list+all+txt+files+in+directory
kwam ik dit tegen :
https://stackoverflow.com/questions/3062154/php-list-of-specific-files-in-a-directory
Bedankt voor deze reactie maar blijkbaar wordt dit niet stuk voor stuk opgeslagen in een variable.
Ik zal eens verder zoeken.
Wat doet $file dan?
gaat het om een map op de server of op de pc van de bezoeker?
Bestanden op de servercomputer langslopen is heel eenvoudig, daarvoor gebruik je scandir().
Bestanden op de client langslopen kan op de volgende manieren:
1.) Je stuurt eerst alle bestanden naar PHP, waarna je ze afloopt. Dat doe je met een HTML-attribuut multiple op een enkele input tag in een HTML form dat de gegevens opstuurt via HTTP POST (<form method="post" ..>), vervolgens krijg je meerdere bestanden in het globale $_FILES array in PHP, dat je kunt gebruiken.
2.) Als 1, maar je loopt de bestanden meteen na het selecteren na via JavaScript. Je kunt die (eventueel alvast gefilterde) lijst vervolgens op de achtergrond (dus zonder het hele formulier te versturen) versturen via een XmlHttpRequest of Fetch., en de invoer daarvan verwerken in PHP.
3.) Misschien is het niet nodig om de verwerking in PHP te doen, en is JavaScript genoeg. Je kunt in veel browsers (helaas nog niet in Firefox) echt een directory kiezen, en de bestanden langslopen via JavaScript. Eventueel kan je dan altijd nog informatie toesturen naar PHP via XmlHttpRequest of Fetch.
Iedereen hartelijk bedankt met deze tips, het is mij dan ook gelukt om de bestanden stuk voor stuk uit te lezen en ze te importeren in mijn mysql database.
Ik stuit juist op het volgende probleem :
Aangezien er een key staat op de code kan er maar 1 van dezelfde code ingegeven worden.
Maar komt er een file aan met dezelfde code dan krijg ik een error en stopt het met verder doen.
Terwijl ik deze error opvang met :
if (mysqli_query($con,$sql))
{
echo "<span style=\"color: #D2691E;\"> De Code : " ."</span>" ."<span style=\"color: white;\">" .$code ." Is geimporteerd" ."</span>";
echo "<br />";
}
if(mysqli_errno($con) == 1062)
{
echo "<span style=\"color: Green;\"> De Code : " ."</span>" ."<span style=\"color: red;\">" .$deel ."<span style=\"color: Green;\"> bestaat reeds" ."</span>";
//echo "Error: " . $sql . "<br>" . $con->error;
}
Tot hier komt het progje niet want geeft direkt
Fatal error: Uncaught mysqli_sql_exception: Duplicate entry
wat is de juiste oplossing om deze error op te vangen en verder de directory af te lopen.
Dank bij voorbaat
Maar heb je de error al opgezocht?
Die moet je of afvangen of eerst kijken of die unieke waarde bestaat.
Dit is een Stored Procedure waarmee je dat kunt testen. Wel de veldnaam en tabel aanpassen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DELIMITER ;;
DROP PROCEDURE IF EXISTS `spBestaatAccount`;;
CREATE PROCEDURE `spBestaatAccount`(IN `accountnum` char(15))
BEGIN
SET @x = (SELECT 1 FROM users WHERE account = accountnum);
#SELECT @x ;
SELECT COALESCE(@x, 0) AS bestaat;
END;;
DELIMITER ;
CALL spBestaatAccount('DE UNIEKE WAARDE DIE JE WILT CONTROLEREN');
# retourwaarde is een 1 of een 0. bestaat wel of niet
DROP PROCEDURE IF EXISTS `spBestaatAccount`;;
CREATE PROCEDURE `spBestaatAccount`(IN `accountnum` char(15))
BEGIN
SET @x = (SELECT 1 FROM users WHERE account = accountnum);
#SELECT @x ;
SELECT COALESCE(@x, 0) AS bestaat;
END;;
DELIMITER ;
CALL spBestaatAccount('DE UNIEKE WAARDE DIE JE WILT CONTROLEREN');
# retourwaarde is een 1 of een 0. bestaat wel of niet
Iedereen hartelijk bedankt voor de vele tips, ondertussen is alles in orde.
Ik lees een directory uit file per file en input deze gegevens in mijn DB.
Hierdoor is mijn manuele overgeschakeld naar automatisch.
Nogmaals bedankt iedereen.