Tutorials >
PHP >
Bestandssysteem
|
Gepost op: 08 oktober 2006 - 18:14 |
|
|
|
PHP ver gevorderde
|
Handige tutorial, alleen heb ik een vraag:
Als je bv. een ledensysteem maakt en in die bestaat uit:
id | gebruikersnaam | wachtwoord | mailadres
En er staat iets in als:
1 | Voldemort | **** | voldemort@voldemort.be
2 | svm | **** | svm@svm.nl
3 | Ander lid | **** | lid1@lid.com
4 | Ander lid 2 | **** | lid2@lid.com
5 | Ander lid 3 | **** | lid3@lid.com
6 | Ander lid 4 | **** | lid4@lid.com
En ik wil:
>> Alle info van "Ander lid 2"
>> De gebruikersnaam van het lid met id 2
>> Etc
Hoe kan je zo die dingen perfect uitlezen? Hoe plaats je ze best in je bestand (explode achteraf?)?
Dat mis ik.
Voor de rest een hele goede tutorial. |
|
|
|
Gepost op: 08 oktober 2006 - 18:41 |
|
|
|
PHP ver gevorderde
|
Ik heb zelf ook zo'n ledensysteem gescript.
Maar daarbij wordt er voor elke user een appart PHP-bestand aangemaakt.
In dit bestand staan zijn gegevens in variabellen opgeslagen.
Zo kun je deze includen en de gegevens er gemakkelijk uit halen.
Als je het op jou manier wilt doen, dan is het het slimste om een PHP-bestand aan te maken waar je voor elke user een array aanmaakt.
Hier staan dan alle gegevens in.
Bijvoorbeeld in users.php:
<?
$1 = array("gebruikersnaam" => "Voldemort", "w8w" => "ab12cd", "email" => "voldemort@voldemort.be");
$2 = array("gebruikersnaam" => "svm", "w8w" => "dc21ba", "email" => "svm@svm.be");
?>
<? $ 1 = array("gebruikersnaam" => "Voldemort", "w8w" => "ab12cd", "email" => "voldemort@voldemort.be");$ 2 = array("gebruikersnaam" => "svm", "w8w" => "dc21ba", "email" => "svm@svm.be");?>
Bij het eruithalen van de gegevens kun je nu dit bestand includen en via de $id oproepen.
Bij het erin zetten:
<?
$inhoud = file_get_contents("users.php");
for($i = 1; if(strpos($inhoud, ."\$".$i)); $i++){
$fp = fopen("users.php", 'a');
fwrite($fp, '\$'. $i .' = array("gebruikersnaam" => "'. $_POST["gebruikersnaam"].'", "w8w" => "'. md5($_POST["w8w"]).'", "email" => "'. $_POST["email"].'");');
fclose($fp);
}
?>
<? for($i = 1; if(strpos($inhoud, ."\$".$i)); $i++){ $fp = fopen("users.php", 'a'); fwrite($fp, '\$'. $i .' = array("gebruikersnaam" => "'. $_POST["gebruikersnaam"].'", "w8w" => "'. md5($_POST["w8w"]).'", "email" => "'. $_POST["email"].'");'); } ?>
:!:Fouten kunnen erin zitten:!:
Als het niet duidelijk is hoor ik het wel.
MVG
Stefan |
|
|
|
Gepost op: 10 oktober 2006 - 17:38 |
|
|
|
PHP ver gevorderde
|
Waarom heb je een for-lus nodig bij het erin zetten, het is toch maar 1 user in te zetten en 1 bestand te openen? |
|
|
|
Gepost op: 11 oktober 2006 - 11:51 |
|
|
|
PHP ver gevorderde
|
Er wordt gezocht wat het eerst volgende ID is, als je de code goed bekijkt, dan zie je dat daarvoor de for lus aanwezig is. |
|
|
|
Gepost op: 11 oktober 2006 - 16:41 |
|
|
|
PHP expert
|
$inhoud = substr(file_get_contents("bestand.php"), 4, 20);
geeft tekens 5 t/m 24 als ik het goed heb. misschien kan je er bij zetten dat dit voor grote bestanden niet echt efficient is..
en voor dat probleem van voldemort heeft men de functie file() |
|
|
|
Gepost op: 12 oktober 2006 - 21:09 |
|
|
|
PHP ver gevorderde
|
Het zou de tekens van 5 t/m 19 moeten geven, zie het overzihct maar van hier en php.net.
En waarom zou dit voor grote bestanden niet echt efficiënt zijn? |
|
|
|
Gepost op: 12 oktober 2006 - 21:19 |
|
|
|
PHP expert
|
bij mij geeft het script
<?
$string = "0123456789";
echo substr($string,4,5);
?>
<? $string = "0123456789"; ?>
de output:
45678
en wat die efficientie betreft: het hele bestand wordt uitgelezen en ergens in het werkgeheugen gezet. dit kost allemaal leestijd in je harde schijf en werkgeheugen |
|
|
|
Gepost op: 18 oktober 2006 - 14:03 |
|
|
|
Moderator
|
Enkele notities:
* Als je een niet-bestaand bestand probeert te openen, of een leeg bestand, dan gaat fread($fp, filesize($file)) niet goed, omdat filesize dan de mist in ging geloof ik.
* het belang van fclose
Het moet misschien wat beter benadrukt worden dat het sluiten van geopende bestanden zéér belangrijk is
* problemen bij simultaan openen / lezen / schrijven van bestanden
Webservers zijn multithreaded - dit houdt in dat een script meerdere keren "tegelijkertijd" aangeroepen kan worden. Een (inmiddels) klassiek voorbeeld van wanneer er problemen ontstaan bij het simultaan lezen / schrijven naar een bestand is bij een poll, waarbij voor de opslag van het aantal gekozen opties gebruik wordt gemaakt van een bestand. Problemen hiermee kun je omzeilen met flock().
@Voldemort
Waarom maak je geen gebruik van XML om hierin data op te slaan? Dan heeft deze informatie ook meteen structuur. |
|
|
|
Gepost op: 18 oktober 2006 - 14:11 |
|
|
|
PHP ver gevorderde
|
Over het eerste punt:
Dit kun je met if's controleren, ik zal het bij paragraaf 7 (oplossingen) vermelden.
Over het tweede punt:
Aangepast.
Over het derde punt:
Ik snap niet wat je bedoeld . |
|
|
|
Gepost op: 01 december 2006 - 22:56 |
|
|
|
PHP beginner
|
Ik vindt dit een fantastische tutorial, heb er heel wat uit geleerd |
|
|
|
Gepost op: 16 mei 2007 - 17:53 |
|
|
|
Lid
|
dit is nou typisch iets van php, gewoon prachtig, goed uitgelegd trouwens ik (als noob) heb hier veel van geleerd thanks |
|
|
Enkel aanvullende informatie is welkom. Geen prijzende of afkeurende reacties. |
|
|
|