[PHP/MySQL]fwrite bestand

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BARO
  • Registratie: Mei 2003
  • Laatst online: 05-08 19:47
Ik ben op dit moment bezig met een nieuwssysteem waarbij er bij elke databasetoevoeging een compleet bestand wordt weggeschreven d.m.v. fwrite.
Een weggeschreven bestand moet er bijvoorbeeld zo uitzien:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php include("inc_top-lay-out.php"); ?>

<?php
 $query  = ("SELECT titel FROM nieuwsarchief WHERE ID = $id]"); // Deze id-variabele moet een toegewezen integer zijn (dus geen variabele).
 $result = mysql_query($query);
 $aadsg  = mysql_fetch_array($result);
 $titel   = $aadsg[0];

 echo("<H1>" . $titel . "</H1>");
 // etc..
?>

<?php include("inc_bottom-lay-out.php"); ?>


De code voor het weggeschrijven van gegevens is bij mij:

code:
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
 if(!empty($_POST)){
  $titel = addslashes($_POST['titel']);
  // andere variabalen die slashes toevoegen aan de variabalen die zijn toegekend via het form eronder

  include("db_connect.php");
  $query = ("INSERT INTO nieuws_archief (id, date, titel, korte_titel, bestandsnaam, mapnaam) VALUES (null, $date, '$titel', '$korte_titel', '$bestandsnaam', '$mapnaam')");
  $result = mysql_query($query);

  if(!file_exists("/" . $jaar . "/" . $mapnaam . "/" . $bestandsnaam)){
   $file = fopen("/$jaar/$mapnaam/$bestandsnaam", "w");
   fwrite($file, $fstring);
   fclose($file);
  }else{
    $error = "<font color='#FF0000' face='Verdana, sans-serif'><B>/" . $jaar . "/" . $mapnaam . "/" . $bestandsnaam . "bestaat al. Kies een andere bestandsnaam voor dit nieuwsitem.</B></font>";
  }
?>

HTML

<?php
 }else{
?>

HTML-form

<?php
 }
?>


Mijn probleem is het volgende: Ik wil een compleet bestand, zoals in de eerste code beschreven,
wegschrijven naar een ander bestand, waarbij de unieke id (verkregen bij de toevoeging van de database) in dat bestand wordt verwerkt
en de andere code met variabelen worden naar het nieuwe bestand weggeschreven waarbij het nog steeds variabelen blijven.

Dit moet kunnen. Hoe is dit mogelijk?

Alvast heel erg bedankt,
Bart Roorda

Btw: Sry voor het vern***en van de lay-out.

[ Voor 36% gewijzigd door BARO op 10-08-2004 17:09 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Even een stapje terug (ik weet dat je hier niet om gevraagd hebt, maar ik ben wel benieuwd):

Waarom wil je voor elk nieuw artikel een nieuwe PHP file aanmaken, in plaats van één PHP file te gebruiken die elk artikel kan tonen?

Als het om het URL gaat, je kan namelijk ook mod_rewrite gebruiken hè...

Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 14:39

Johnny

ondergewaardeerde internetguru

Dat lijkt me simpel, een backslash \ voor het dollarteken zetten zodat de variablen de eerste keer niet als variablen worden gezien.

Als ik echter naar je code kijk lijkt het er op dat je in plaats van een index.php?id=1 URL steeds een nieuw bestand wilt maken? Dan kan je toch veel beter mod_rewrite gebruiken zoals hirin de FAQ van P&W staat?

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Johnny schreef op 10 augustus 2004 @ 17:14:
Als ik echter naar je code kijk lijkt het er op dat je in plaats van een index.php?id=1 URL steeds een nieuw bestand wilt maken? Dan kan je toch veel beter mod_rewrite gebruiken zoals hirin de FAQ van P&W staat?
Dat, of je moet HTML files bouwen ipv PHP, dan heb je iig nog het voordeel dat het niet geparsed hoeft te worden, en dus sneller zou moeten zijn. Allemaal aparte PHP files maken heeft IMHO geen voordelen, hooguit wat betreft een fijnere URL. Maar dat is, zoals de mensen boven me al zeggen, dus ook op te lossen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • BARO
  • Registratie: Mei 2003
  • Laatst online: 05-08 19:47
Tja.. ik weet het niet.. ik ben er nog steeds heilig van overtuigd dat je site beter geïndexeerd wordt in zoekmachines als je bij elk stuk informatie een compleet nieuwe pagina aanmaakt :/. Is het zo ook mogelijk?

@ Johnny: Als ik een backslash voor elk dollarteken zet, blijft de eerste variabele '$id' ook een variabele, en dat is juist mijn probleem. Die variabele moet een integer worden met dezelfde waarde als de waarde die dat bestand in de database toegewezen gekregen heeft.

[ Voor 17% gewijzigd door BARO op 10-08-2004 17:33 ]


Acties:
  • 0 Henk 'm!

  • BARO
  • Registratie: Mei 2003
  • Laatst online: 05-08 19:47
Ik ga nu naar m'n bedje toe, zal morgen de reacties lezen :O :).

[ Voor 13% gewijzigd door BARO op 10-08-2004 23:26 ]


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 20:03
Eerst even op Google reageren: zolang je de pagina's in je site linkt met 'GET-links' kan elke (?) zoekmachine ze vinden tegenwoordig. Lastiger wordt het als je met POST-links gaat werken.

En Johnny's antwoord over escaping is wel degelijk waar... Probeer trouwens zo min mogelijk vars direct in een string te proppen:

code:
1
echo 'hallo '.$naam;

is netter, sneller, beter en veiliger dan

code:
1
echo "hallo $naam";


Zeker als je met objecten, arrays, alles gaat werken.

Laat je daadwerkelijk fwrite-statement eens zien om die eerste query weg te schrijven? ($fstring dus)

[ Voor 6% gewijzigd door sjroorda op 11-08-2004 11:34 ]


Acties:
  • 0 Henk 'm!

  • BARO
  • Registratie: Mei 2003
  • Laatst online: 05-08 19:47
Heel erg bedankt, Siemen, volgens mij gaat het nu wel lukken! Ik houd jullie op de hoogte!

Acties:
  • 0 Henk 'm!

  • BARO
  • Registratie: Mei 2003
  • Laatst online: 05-08 19:47
Voor het grootste deel is het gelukt, maar nu stuit ik op het probleem dat er een unexpected T_LNUMBER in voorkomt.

Wat houdt 'T_LNUMBER' in? Ik heb al gezocht op PHP.net en in Google, maar ik ben er nog niet uit.

Deze foutmelding krijg ik:
code:
1
Parse error: parse error, unexpected T_LNUMBER in /home/stripped_URL/2004/Test/test5.php on line 4


bij het simpele stukje code:

code:
1
2
3
4
<?php 

$fstring  = ''; 
$fstring .= '<?php' . "\n"; // dit is regel 4

Verwijderd

Dat is inderdaad vreemd, maar waarom doe je het niet gewoon zo:

PHP:
1
  $fstring = "<?php\n"; 


?

offtopic:
Je signature klopt niet. Want als er een parse error in je code zit wil dat niet automatisch zeggen dat er geen bugs in zitten :+

Acties:
  • 0 Henk 'm!

  • BARO
  • Registratie: Mei 2003
  • Laatst online: 05-08 19:47
Verwijderd schreef op 12 augustus 2004 @ 11:14:
Dat is inderdaad vreemd, maar waarom doe je het niet gewoon zo:

PHP:
1
  $fstring = "<?php\n"; 


?
Om de reden die sjroorda hierboven zei.
offtopic:
Je signature klopt niet. Want als er een parse error in je code zit wil dat niet automatisch zeggen dat er geen bugs in zitten :+
:/ :)

Acties:
  • 0 Henk 'm!

Verwijderd

BARO schreef op 13 augustus 2004 @ 14:51:
[...]
Om de reden die sjroorda hierboven zei.
[...]
:/ :)
Juh, "sneller, netter, beter en veiliger". What he said, maar dan zonder argumenten. Ik schijn hier toch weer in elke PHP thread op terug te komen, omdat het ik daar zó erg niet mee eens ben. Magoed, smaakje.

En in heb trouwens een typfout gemaakt in mijn offtopic commentaar zie ik, want het moest natuurlijk "geen parse errors" zijn :p.

Acties:
  • 0 Henk 'm!

  • BARO
  • Registratie: Mei 2003
  • Laatst online: 05-08 19:47
Verwijderd schreef op 13 augustus 2004 @ 15:43:
[...]


Juh, "sneller, netter, beter en veiliger". What he said, maar dan zonder argumenten. Ik schijn hier toch weer in elke PHP thread op terug te komen, omdat het ik daar zó erg niet mee eens ben. Magoed, smaakje.

En in heb trouwens een typfout gemaakt in mijn offtopic commentaar zie ik, want het moest natuurlijk "geen parse errors" zijn :p.
Het ging hem er meer om dat ik er later wellicht problemen mee zou kunnen krijgen bij arrays en objecten. En ik wil deze stijl in dit geval iig blijven gebruiken, vanwege hetgeen dat ik hieronder beschrijf.

Maar ziet iemand wát er fout is op lijn 4? Omdat ik na regel vier op dezelfde manier variabelen (die variabelen moeten blijven) aan een bestand toevoeg, is de manier die OneOfBorg beschreef geen optie.

Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 20:03
Verwijderd schreef op 13 augustus 2004 @ 15:43:
Juh, "sneller, netter, beter en veiliger". What he said, maar dan zonder argumenten. Ik schijn hier toch weer in elke PHP thread op terug te komen, omdat het ik daar zó erg niet mee eens ben. Magoed, smaakje.
offtopic:
- sneller: feit; zie benchmarks, o.a. deze, ooit eens voor hier in elkaar geklust (onderaan kijken, scheelt procentje of 40)
- netter: eigen mening, en gelukkig delen velen het met mij, maakt het over het algemeen een stuk overzichtelijker
- beter: onjuist, is puur een mening
- veiliger: in de zin van 'je maakt minder snel fouten'; wat doet bijv. echo "dit is $var->object->i[hallo]['a']->waarde";?????
BARO schreef op 13 augustus 2004 @ 17:17:
Maar ziet iemand wát er fout is op lijn 4? Omdat ik na regel vier op dezelfde manier variabelen (die variabelen moeten blijven) aan een bestand toevoeg, is de manier die OneOfBorg beschreef geen optie.
Die manier is natuurlijk nog steeds een optie: dubbele quotes doen, iig als je de vars erbuiten zet, hetzelfde als enkele. Even heel eigenwijs in je file gekeken (toch handig als je serveraccess hebt :P) : weet je zeker dat dit 'de' regel 4 is? Of heb je de file in de tussentijd gewijzigd? Ik zie namelijk dit staan:
code:
1
$query = ("SELECT date FROM nieuwsarchief WHERE ID = "9");

En daar zit uiteraard wel een fout in...

[ Voor 43% gewijzigd door sjroorda op 14-08-2004 16:44 ]

Pagina: 1