.txt met optelsysteem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dvd brander

dvd brander

30/06/2010 19:05:29
Quote Anchor link
ik wil graag dat er data in een .txt word opgeslagen.
hierbij zitten deze variabelen:
$ID, $NAME en $AMOUNT
nu wil ik, dat als id al in de lijst staat, hij bij amount+1 doet.
ik heb nu:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

include('config.inc.php');
echo $_GET["add"];
echo $_GET["name"];
echo $_GET["number"];
$file=file(getcwd()."/winkelwagens/".$_SESSION['gebruikersnaam'].".txt") or die("An error occured.");
$f=fopen(getcwd()."/winkelwagens/".$_SESSION['gebruikersnaam'].".txt","a") or die("An error occured.");
for ($i=0; $i<=sizeof($file); $i++){
$pos=strpos($file[$i],"ID: ".$_GET["add"]);
if (!pos==0){
echo "already";
}
}

$str="ID: ".$_GET["add"]."&NAME: ".$_GET["name"]."&AMOUNT: ".$_GET["number"]."\r\n";
fwrite($f, $str);

?>


maar nu kom ik niet meer verder.
kan iemand me een tip geven van hoe ik verder moet?
of iets van een voorbeeld ofzo.
 
PHP hulp

PHP hulp

24/11/2024 06:58:37
 
Joren de Wit

Joren de Wit

30/06/2010 19:14:10
Quote Anchor link
Heb je geen beschikking over een database? Als dat wel het geval is, gebruik die dan om dit soort data in op te slaan, dat maakt e.e.a. stukken eenvoudiger!

De stappen die je bij gebruik van een .txt file moet nemen:
1. Bestand inlezen (gebruik file())
2. Kijken of er een regel met het id bestaat (gebruik foreach en strpos?)
3. Zo ja, huidige aantal uitlezen en daarbij 1 optellen
4. Huidige regel uit de array verwijderen
5. Nieuwe regel schrijven en aan array toevoegen
6. Alle regels uit de array weer in het bestand wegschrijven.

Verder zou je ook het formaat waarin je data opslaat aan moeten passen, want dit is echt geen doen. Gebruik dan bijvoorbeeld gewoon id|naam|aantal. Dan kun je exploden op de | om de verschillende waarden eruit te halen.

Kortom, erg omslachtig, een database is veel makkelijker.
 

30/06/2010 19:22:17
Quote Anchor link
En anders gebruik je xml: dom en / of simplexml.
 
Dvd brander

dvd brander

30/06/2010 21:03:58
Quote Anchor link
oke, ik heb nu dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
include('config.inc.php');

$file=file(getcwd()."/winkelwagens/".$_SESSION['gebruikersnaam'].".txt") or die("An error occured.");
$f=fopen(getcwd()."/winkelwagens/".$_SESSION['gebruikersnaam'].".txt","a") or die("An error occured.");
for ($i=0; $i<=sizeof($file); $i++){
$pos=strpos($file[$i],"ID: ".$_GET["add"]);
if (!pos==0){

$str=substr($file[$i],strpos($file[$i],"AMOUNT: ")+8);
echo $str."<br>";
$str+=$_GET["number"];
echo $str;

$stri="ID: ".$_GET["add"]."&NAME: ".$_GET["name"]."&AMOUNT: ".$_GET["number"]."\r\n";
fwrite($f, $stri);

break;
}
}
else{
$str="ID: ".$_GET["add"]."&NAME: ".$_GET["name"]."&AMOUNT: ".$_GET["number"]."\r\n";
fwrite($f, $str);
}

fclose($f)
?>

maar nu voegt ie een regel toe, terwijl hij m moet vervangen.
hoe los ik dat op?
Gewijzigd op 30/06/2010 21:05:05 door dvd brander
 
Niels K

Niels K

30/06/2010 21:07:42
Quote Anchor link
Blanche PHP op 30/06/2010 19:14:10:
Heb je geen beschikking over een database?



?

"maar nu voegt ie een regel toe, terwijl hij m moet vervangen.
hoe los ik dat op?"

Dan moet je de parameter vervangen.

http://php.net/manual/en/function.fopen.php
Gewijzigd op 30/06/2010 21:09:16 door Niels K
 
Dvd brander

dvd brander

30/06/2010 21:13:41
Quote Anchor link
geen beschikking over een database nee
enne, welke parameter?
 

30/06/2010 21:21:49
Quote Anchor link
Dvd brander op 30/06/2010 21:13:41:
geen beschikking over een database nee
enne, welke parameter?


Dan raad ik jou toch nog een keer xml aan, want dat maak het onderhoud, en dingen als waar je nu mee zit toch een heel stuk makkelijker.
 
Niels K

Niels K

30/06/2010 21:31:50
Quote Anchor link
"welke parameter?"

Klik op de link, en lees de mogelijkheden.. Is dat zo moeilijk?

Verder ben ik het zeker met Karl eens.
 
Dvd brander

dvd brander

30/06/2010 21:32:16
Quote Anchor link
jep, maar daar moet ik dan echt effe tijd in gaan steken, en die heb ik nu bijna niet (deadline...)
dus aangezien dit volgens mij simpeler is om af te maken dan een heel nieuw deel te leren, zou ik graag als nog antwoord hebben.
parameters zijn er 4...
ik denk dat je mode bedoelt, maar naar welke moet ie dan?
Gewijzigd op 30/06/2010 21:35:39 door dvd brander
 

30/06/2010 21:40:40
Quote Anchor link
Dvd brander op 30/06/2010 21:32:16:
jep, maar daar moet ik dan echt effe tijd in gaan steken, en die heb ik nu bijna niet (deadline...)
dus aangezien dit volgens mij simpeler is om af te maken dan een heel nieuw deel te leren, zou ik graag als nog antwoord hebben.
parameters zijn er 4...
ik denk dat je mode bedoelt, maar naar welke moet ie dan?


Dan stel je die deadline wat verder uit en maak je een net systeem.
Het antwoord heb je al gehad.
Je kunt het zo op php.net lezen.
Zo moeilijk is dat toch niet?
En anders probeer je het een voor een uit.
 
Dvd brander

dvd brander

30/06/2010 22:01:31
Quote Anchor link
ik heb ze allemaal geprobeerd maar:
x/x+ gaat erroren omdat ie niet bestaat.
a/a+ voegt een lijn eronder toe terwijl hij m moet vervangen.
w/w+ verwijderd bij een nieuw id de oude.
r loopt te erroren en r+ geeft dezelfde error als w/w+

mn code is trouwens iets aangepast:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
include('config.inc.php');
$a=0;
$file=file(getcwd()."/winkelwagens/".$_SESSION['gebruikersnaam'].".txt") or die("An error occured.");
$f=fopen(getcwd()."/winkelwagens/".$_SESSION['gebruikersnaam'].".txt","r+") or die("An error occured.");
for ($i=0; $i<=sizeof($file); $i++){
$pos=strpos($file[$i],"ID: ".$_GET["add"]);
if ($pos===0){
$a=1;
$str=substr($file[$i],strpos($file[$i],"AMOUNT: ")+8);
echo $str."<br>";
$str+=$_GET["number"];
echo $str;

$stri="ID: ".$_GET["add"]."&NAME: ".$_GET["name"]."&AMOUNT: ".$str."\r\n";
fwrite($f, $stri);

break;
}
}

if ($a==0){
$stri="ID: ".$_GET["add"]."&NAME: ".$_GET["name"]."&AMOUNT: ".$_GET['number']."\r\n";
fwrite($f, $stri);
}

fclose($f)
?>


ook heb ik dit geprobeerd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
include('config.inc.php');
$a=0;
$file=file(getcwd()."/winkelwagens/".$_SESSION['gebruikersnaam'].".txt") or die("An error occured.");
$f=fopen(getcwd()."/winkelwagens/".$_SESSION['gebruikersnaam'].".txt","r+") or die("An error occured.");
for ($i=0; $i<=sizeof($file); $i++){
$pos=strpos($file[$i],"ID: ".$_GET["add"]);
if ($pos===0){
$a=1;
$str=substr($file[$i],strpos($file[$i],"AMOUNT: ")+8);
echo $str."<br>";
$str+=$_GET["number"];
echo $str;

$stri="ID: ".$_GET["add"]."&NAME: ".$_GET["name"]."&AMOUNT: ".$str."\r\n";
fwrite($f, $stri);

break;
}
}

fclose($f);
if ($a==0){
$f=fopen(getcwd()."/winkelwagens/".$_SESSION['gebruikersnaam'].".txt","a+") or die("An error occured.");
$stri="ID: ".$_GET["add"]."&NAME: ".$_GET["name"]."&AMOUNT: ".$_GET['number']."\r\n";
fwrite($f, $stri);
fclose($f);
}


?>

dit werkt al weer een heel wat beter, alleen veranderd hij dan altijd de 1e lijn, niet de lijn met het goede id
Gewijzigd op 30/06/2010 22:05:31 door dvd brander
 
- SanThe -

- SanThe -

30/06/2010 22:50:45
Quote Anchor link
- Lees de file in in een array().
- Wijzig de regel die je wilt wijzigen.
- Schrijf het complete array() weer weg.
 
Johan Dam

Johan Dam

01/07/2010 09:55:15
Quote Anchor link
Tja, als je met documenten gaat werken ben je gelimiteerd, xml zou het (ietsjes) makkelijker maken maar je zal nog steeds alles opnieuw moeten gaan wegschrijven bij een wijziging.

Aan de personen die steeds zeggen dat hij beter moet lezen voor de parameter / mode, doe niet zo flauw en probeer eens wat beter te helpen, hij wil een specifieke regel wijzigen, dat kan niet, jullie weten dat vast ook maar blijven hem toch zeggen dat hij moet blijven lezen?

Er zijn bovendien ook mogelijkheden voor externe databases, volgens mij zijn sommige zelfs gratis, ik heb dit zelf niet geprobeerd dus ik weet het niet zeker, misschien is het waard om daar eens naar te kijken.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.