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
Márquez obeveklig i Misano

Misano gav Márquez hans fem...

Yamaha R7-vinnarens rapport: ”Ett riktigt monster på kurviga landsvägar!”

På MC-mässan i vintras anor...

Nisse Hedlund bortgången

Den legendariske motorkonst...

En dag på dragstrippen

Efter att ha varit aktiv so...

Steve McQueens Scott Squirrel till salu

Detta Scott Flying Squirrel...

Dags för Strängnäs Bike Show!

Sista lördagen i augusti är...

Bikeweekend på Kjula denna helg

Den 22-23 augusti är det da...

Motorcycle Inferno #8

Den 5 september blir Laxhol...

Tiotusentals körde Mälaren Runt

Lördagen den 15 augusti gen...

Mälaren Runt fyller 40 år

Nu på lördagen den 15 augus...

Back
Top