webForumDet fria alternativet

Hjälp snälla, jag har kört fast

PHP

3 svar · 1 008 visningar · startad av kluringen

Medlem sedan juli 2011156 inlägg
Frågan#1

Jag vill permanent kunna ändra värden i en array

Testsnitten fugerar så här långt:

<?php
//hårdkodad dummy för test ersätts med variabel när min funktion fungerar
$aktfil = 'yazx-fil.php';

include ("z-tabell.php");

foreach($fil as $ind){
if($ind['namn'] == $aktfil)
{
// alla echo är bara för test, användare ska inte se något av detta
echo $ind['namn'];
echo ", version ";
echo $ind['ver'];
$ind['ver']=$ind['ver']+1;
echo ", ny version ";
echo $ind['ver'];
}
}
?>

z-tabell.php som jag hämtar med include

<?php
$fil[0] ['namn'] = 'grupp1-fil.php';
$fil[0] ['ver'] = 1;

// totalt 17 tabellrader

$fil[17] ['namn'] = 'ezyx-fil.php';
$fil[17] ['ver'] = 1;
?>

Frid och fröjd, jag får det här resultatet ekat: yazx-fil.php, version 1, ny version 2
Nu vill jag ersätta den gamla z-tabbel.php med en ny som innhåller förändringen. Måste jag skriva om hela filen rad för rad och hur gör man det?
Har fösökt med fopen a+ men får inte till det. Tacksam för hjäp.

Tillägg:
Jag har kommit en bit på väg med att skriva rader. Får ut alla ['nam']= rätt värde och ['ver']= också rätt värde men får inte tabellen att se ut som den ska. "$fil [" tar den inte som en literal, inte den andra hakparentesn heller som ska omsluta ett indexnummer. Så det är väl stränghanteringen som är problemet som jag har kvar att lösa. Varken "]" eller "\]" gillar den. Sen vore det trevligt om jag kunde få radbrytningar så att den färdiga filen blir lättare att läsa och ändra i manuellt vid behov.

Medlem sedan juli 2011156 inlägg
#2

Så här blev lösningen till slut

Man får visst inte säga fula ord på forumet. Synd, jag har massor att vräka ur mig om stränghanteringen i PHP. x( Man måste ha hökögon för att få till koden där där jag skriver rader. Tur att man inte behöver kladda i kod som är testad och fungerar.

<?php
$aktfil = 'yazx-fil.php'; /*hårdkodad dummy för test */

include ("z-tabell.php");

$file = fopen("z-tabell.php", "w");
$nyrad = fwrite($file, "<?php ");
fclose($file);

$nyckel = 0;

$file = fopen("z-tabell.php", "a+");

foreach($fil as $ind){
if($ind['namn'] == $aktfil)
{
if ($ind['ver'] == 5)
$ind['ver']=1;
else
$ind['ver']=$ind['ver']+1;
}
$nyrad = fwrite($file, "\$fil"."[".$nyckel."]"."['namn'] = " ."'".$ind['namn']."'; ". "\$fil"."[".$nyckel."]"."['ver'] = ".$ind['ver']."; " );

$nyckel = $nyckel +1;

}
$nyrad = fwrite ($file, "?>");
fclose($file);
?>
Medlem sedan aug. 20039 340 inlägg
#3

Farligt farligt...
Dagens kluring: Vad händer om exempelvis $ind['namn'] innehåller en enkelfnutt? Vad händer om en användare lyckas trycka in en enkelfnutt följt av giltig PHP-kod?

Medlem sedan juli 2011156 inlägg
#4

nitro2k01 skrev:

Farligt farligt...
Dagens kluring: Vad händer om exempelvis $ind['namn'] innehåller en enkelfnutt? Vad händer om en användare lyckas trycka in en enkelfnutt följt av giltig PHP-kod?

Det händer inte. Användare kommer inte åt att mixtra med filnamnen. Jag har bara öppnat en möjlighet för ett begräsat antal personer att ändra i vissa texter/textavsnintt. Se tillfällig test demo Så här ser z-skriv.php ut i färdigt skick:

<?php session_start();
$filnamn = $_SESSION['filnamn'];
//hanterar versionsnummer

include ("z-tabell.php");

$file = fopen("z-tabell.php", "w");
$nyrad = fwrite($file, "<?php ");
fclose($file);

$nyckel = 0;

$file = fopen("z-tabell.php", "a+");

foreach($fil as $ind){
if($ind['namn'] == $_SESSION['filnamn'])
{
if ($ind['ver'] == 5)
$ind['ver']=1;
else
$ind['ver']=$ind['ver']+1;
$version = $ind['ver'];
}
$nyrad = fwrite($file, "\$fil"."[".$nyckel."]"."['namn'] = " ."'".$ind['namn']."'; ". "\$fil"."[".$nyckel."]"."['ver'] = ".$ind['ver']."; " );

$nyckel = $nyckel +1;

}
$nyrad = fwrite ($file, "?>");
fclose($file);

//sparar en backup version
$backfil = $_SESSION['sparfil']."-ver".$version.".php"; /*filnamn med versionsnummer*/

$file = fopen($backfil, "w");
$innehall = fwrite($file, $_SESSION['sparversion']);
fclose($file);

//sparar ändringarna
$file = fopen($filnamn, "w");
$innehall = fwrite($file, $_POST['gruppsida']);
fclose($file);
header('Location: ' .$_SESSION['sida1']);
exit;
?>

Tabellen är till för arr hantera versionsnummer. Jag sparar upp till 5 gamla versioner när användarna ändrar något själva. Fnuttarna är ett H-E, jag har väldigt svårt för dem själv.

254 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)