Hjälp med PHP-script som jävlas

Linuus

Ny medlem
Gick med
11 Jun 2006
Ort
Göteborg
Hoj
Gixxer 600 "Corona", Suzuki GS 500 E (SÅLD!)
Tjena

Har problem med ett PHP-script som vägrar göra som jag vill... Har frågat på diverse programmeringsforum, men ingen verkar kunna hjälpa mig, så jag frågar här istället! :)

Såhär ser koden ut:
Code:
	$namn = $_POST['namn'];
	$epost = $_POST['epost'];
	$artistID = $_POST['artist'];
	$lat = $_POST['lat'];
	$albumID = $_POST['album'];
	$instrument = $_POST['instrument'];
	$bidrag = $_POST['bidrag'];
	
		$artist = mysql_fetch_array(mysql_query("SELECT * FROM artist WHERE artistID = '{$artistID}'"));
	
		$filename = $artist['artist']." - ".$lat.".txt";
		$dir = "filer/".$artist['artist']."/";
 
 		$ver=1;
		$exist = true;
		while($exist == true) {
		   if (!file_exists("$dir/$filename")) {
			  echo "Filnamnet blir <i>".$filename."</i>";
			  $exist = false;
		   } else {
			  $ver++;
			  $filename = preg_replace('/(\(ver\d+\))?\.txt/i', ' (Ver'.$ver.').txt', $filename);
		   }
		}

Jag ska spara info från ett formulär i en textfil, dock så kanske textfilen redan finns. Finns den INTE så ska den skapas, finns den så ska den döpas om till namnet (Ver2).txt

Ex.
Magnus Uggla - Trubaduren.txt //Kolla om den finns

Alt. 1:Finns INTE!
Skapa filen och spara den data som skall sparas.

Alt. 2: Filen FINNS!
Spara filen som Magnus Uggla - Trubaduren (Ver2).txt
Om (Ver2) redan finns så ska den heta (Ver3) osv.

Problemet med detta script:
Den funkar bra tills den kommer till (Ver3), finns (Ver3) så döper den ändå filen till (Ver3)! Allt upp till (Ver3) funkar fint...

Sjukt :(

Blir tokglad om någon kan lösa problemet!
 
Jag körde med str_replace istället plus några andra modifieringar, då fungerade det fint.

Tex. enligt

PHP:
$filename = str_replace(" (Ver".$ver.")", ' (Ver'.++$ver.")" ,$filename);

Titta på str_replace och låt str_replace bara förändra filnamnen då det verkligen är en version > 1.
 
Okej, ska titta på det och testa lite.
Tack för svaret :)
 
Vad gjorde du mer för ändringar? Får inte till det...:va
 
Du har ett problem med ditt regexp.
Losning som borde funka :tummenupp
$filename = preg_replace('/(\ ?\(ver\d+\))?\.txt/i', ' (Ver'.$ver.').txt', $filename);

For ovrigt hoppas jag du har en funktion for input validation da jag ser tendens pa SQL-Injection i din kod.

Det har blev ju ett ganska nordigt forsta inlagg for mej pa sporthoj.com! :D
 
Tack så mycket för svaren

Dock så har jag löst det redan... :) Skrev om koden lite så jag slapp hela replace skiten... :D
 
2975072 Du har ett problem med ditt regexp.
Losning som borde funka :tummenupp
$filename = preg_replace('/(\ ?\(ver\d+\))?\.txt/i', ' (Ver'.$ver.').txt', $filename);

For ovrigt hoppas jag du har en funktion for input validation da jag ser tendens pa SQL-Injection i din kod.

Det har blev ju ett ganska nordigt forsta inlagg for mej pa sporthoj.com! :D
Okej, "nörden" :tungan (Ditt rykte på SH är besudlat för all framtid!!! :D )

Vart finns injection-tendenserna? :)

Om du menar $artistID så är det något man väljer från en rullist, inget användaren skriver själv med andra ord.
 
Okej, "nörden" :tungan (Ditt rykte på SH är besudlat för all framtid!!! :D )

Vart finns injection-tendenserna? :)

Om du menar $artistID så är det något man väljer från en rullist, inget användaren skriver själv med andra ord.

Det spelar ingen roll om det är en rullist som skickar parametern. Det går alltid att göra manuellt, och därför bör du alltid kontrollera inparametrar som ska skickas till databaser.

Exempelvis om artist_id bara får innehålla siffor:
if(preg_match('/^[0-9]+$/', $inData)
// gör något
else
die('nej du');
 
2980373 Det spelar ingen roll om det är en rullist som skickar parametern. Det går alltid att göra manuellt, och därför bör du alltid kontrollera inparametrar som ska skickas till databaser.

Exempelvis om artist_id bara får innehålla siffor:
if(preg_match('/^[0-9]+$/', $inData)
// gör något
else
die('nej du');
Jo det är sant... "Tänkte inte på det" ;)
 
Anledningen till att det inte fungerar är för att du replacear "(Ver x)" med " (Ver x)", notera space. Alltså lägger du på ett space för varje version... gissar jag på. Men ett ganska fult sätt att lösa det på... :) men du ahde som sagt skrivit om det.
 
Bade joch och jayjay har ratt. :)

Ett extra tips ar att ha Magic Quotes igang i php. (default)
http://uk2.php.net/magic_quotes
Men lita inte endast pa Magic Quotes utan gor som joch skrev och putta in olika globala validerings funktioner i koden som du bara kan kalla pa nar du behover och behandla all potentiell user input som farlig.

:tuttar
 
Nyheter
Tierp Arena värd för EM i Dragracing

Den 7–10 augusti 2025 förva...

120 unga motocrosstalanger från hela världen möts i Uddevalla

Screenshot Den 16–17 aug...

En vecka kvar!

Nu är det exakt en vecka kv...

Farligt vilseledande alkomätare på marknaden

Ett stort oberoende test ut...

Specialbyggd Yamaha XSR900 GP hyllar Rainey

För att fira den trefaldige...

Vi provkör Indian Sport Chief RT

I Allt om MC nummer 8 som k...

Ducati 996 SPS – fabriksny 99:a – såld för rekordsumma

När en hojfirma i Tombolo i...

Äldre än en gentleman

Vi har fotograferat en 100 ...

MV Agusta återgår till 100% eget ägande

MV Agusta Motor S.p.A. till...

MV Agusta åter självständigt

MV Agusta Motor S.p.A. till...

Back
Top