webForumDet fria alternativet

skapa bildmapp

PHP

15 svar · 789 visningar · startad av tanten

Medlem sedan nov. 20051 596 inlägg
Frågan#1

Nu har jag kladdat och kluddat hur länge som helst med detta och är för grön för att förstå hur jag ska göra så det fungerar inte.
Jag har ett formulär som lägger in en ny häst i databasen. Så långt fungerar det helt OK.
Men nu försöker jag peta in att det samtidigt ska skapas en bildmapp för denna nya häst och jag får det inte att fungera. Har kortat ner koden, så det kanske fattas en eller annat tecken...

if (!isSet($_POST["insForm"]))
   header("Location: hest.html");

echo "namn = ".$_POST["namn"].", smeknamn = ".$_POST["smeknamn"].", insForm = ".$_POST["insForm"]."</p>";

$sql = "INSERT INTO hest (namn, smeknamn)
        VALUES('".$_POST["namn"]."', '".$_POST["smeknamn"]."')";
mysql_query($sql) or die("Något blev fel");
echo "Du har lagt till ".mysql_affected_rows()."ny häst";

och

<form action="inserthest.php" method="post">
   namn<input type="text" name="namn"  size="35" />
  smeknamn<input type="text" name="smeknamn"  size="35" />
   <input type="hidden" name="insForm" value="1" />
  <input type="submit" value="Registrera" />
</form>

Vad jag försökt få med är

mkdir('. $_POST['smeknamn']);

Hur gör jag? Enklast möjliga förslag... Bara en person som kommer använda formuläret... Skulle bli sååå glad...

Medlem sedan juli 20023 617 inlägg
#2

Din mkdir-kod är nog inte helt kurrant. Testa med:

$dir=$_POST['smeknamn'];
mkdir($dir);
Medlem sedan nov. 20051 596 inlägg
#3

Testade men ingen ny mapp skapades, men ny häst...inga fel rapporterades.
Vart skulle du lagt in koden? Gissar att den måste läggas in när uppgifterna om hästen kommit in i databasen...

Medlem sedan juli 20023 617 inlägg
#4

tanten skrev:

Gissar att den måste läggas in när uppgifterna om hästen kommit in i databasen...

Japp.

mkdir returnerar false resp true. Du kan ju lägga till "or die("Mappen kunde inte skapas");" efter din mkdir-sats, men det bekräftar ju bara det vi vet...

Måste man ha ett "/" före mappnamnet? Kommer inte ihåg...
/red. "/" behövs inte...

Medlem sedan okt. 20001 285 inlägg
#5

...

Medlem sedan nov. 20051 596 inlägg
#6

Lade in den direkt efter alla de andra POST-arna och då fungerade det. :)

...........'".$_POST["smeknamn"]."')";
$dir=$_POST['smeknamn'];
mkdir($dir);
mysql_query($sql) or die("Något blev fel");
echo "Du har lagt till ".mysql_affected_rows()."ny häst";

Tack så jättemycket :birp

Ska man ha med rättigheter?

Medlem sedan juli 20041 271 inlägg
#7

Jag har liknande "problem" med att skapa en mapp till användaren som laddar upp bilden.
Har följande:

$maxfilesize = 256 * 1024;
if ($HTTP_SERVER_VARS["REQUEST_METHOD"] == "POST")
{

if (!function_exists('mime_content_type')) {
function mime_content_type($f) {
$f = escapeshellarg($f);
return trim( `file -bi $f` );
}
}
$file = $_FILES["file"];
if (!isset($file) || $file["size"] < 1)
stderr("Upload failed", "Nothing received!");
if ($file["size"] > $maxfilesize)
stderr("Upload failed", "Sorry, that file is too large for the gallery.");
$filename = $file["name"];
if (strpos($filename, "..") !== false || strpos($filename, "/") !== false)
stderr("Upload failed", "Bad file name.");

$it = mime_content_type($file["tmp_name"]);
if ($it != "image/gif" && $it != "image/jpeg" && $it != "image/jpg" && $it != "image/png")
stderr("Upload failed", "Sorry, the file you uploaded was not recognized as a valid image file.");

$i = strrpos($filename, ".");
if ($i !== false)
{
$ext = strtolower(substr($filename, $i));
if (($it == "image/gif" && $ext != ".gif") || ($it == "image/jpeg" && $ext != ".jpg") || ($it == "image/jpg" && $ext != ".jpg") || ($it == "image/png" && $ext != ".png"))
stderr("Error", "Invalid file name extension: <b>$ext</b>");
}
else {
stderr("Error", "File name needs an extension.");
}
$filehash = md5($filename) . $ext;
$tgtfile = "./userpics/$userid/" . $filehash;
if (file_exists($tgtfile))
stderr("Upload failed", "Sorry, a file with the name <b>" . htmlspecialchars($filename) . "</b> already exists in the gallery.");

move_uploaded_file($file["tmp_name"], $tgtfile);

$update = get_date_time();
$update = sqlesc($update);
$userid = $CURUSER["id"];
//$username = $CURUSER["username"];
$filehash1 = sqlesc($filehash);
$filename1 = sqlesc($filename);
mysql_query("INSERT INTO profilbilder (added, userid, filename, location) VALUES($update, $userid, $filename1, $filehash1)") or sqlerr(__FILE__, __LINE__);

$url = str_replace(" ", "%20", htmlspecialchars("$BASEURL/userpics/$userid/$filehash"));
stderr("Success", "<a href=picture_gallery.php>View gallery</a></b><p><a href=picupload.php>Upload another Picture</a>.");

}

stdhead("Gallery upload");
?>
<h1>Picture gallery upload</h1>
<form method="post" action="picupload.php" enctype="multipart/form-data">
<p><b>Maximum file size: <?=number_format($maxfilesize); ?> bytes.</b></p>
<table border=1 cellspacing=0 cellpadding=5>
<tr><td class=rowhead>Upload file</td><td><input type="file" name="file" size=60></td></tr>
<tr><td colspan=2 align=center><input type=submit value="Upload" class=btn></td></tr>
</table>
</form>

En mapp med användarnamnet skall alltså skapas (och chmoddas till 777) under /userpics/
Vet inte rikigt var jag ska lägga "mkdir" i koden ovan. :r

Tacksam för all hjälp.

Medlem sedan nov. 20051 596 inlägg
#8

Vad jag gjorde var att skapa mappen direkt efter att hästen hade blivit klar med sina insert

 $sql ="INSERT INTO hest(frysid, osv... rubrik) values ('$frysid', osv... '$rubrik')"
mysql_query($sql) or die(mysql_error());
$path = "../stallet/";
mkdir($path . $smeknamn, 0777); 
};

och efter det formulär för att skicka upp bild.
Koden ser lite annorlunda ut nu än vad den gjorde då, men den gamla fungerade.
Har sett någonstans att man kan skapa mapp samtidigt som man skickar upp första bilden, men du kan kanske göra likadant att skapa mappen i samband med att användaren skrivs in i databasen också?

Medlem sedan juli 20041 271 inlägg
#9

tanten skrev:

men du kan kanske göra likadant att skapa mappen i samband med att användaren skrivs in i databasen också?

Vet faktiskt inte vilket som är "bäst" i detta läge!? :l
Alla användare ska alltså kunna ladda upp egna videoklipp samt bilder.
Har redan en mapp "/usermovies" som har 777. I den mappen ska det sedan skapas nya mappar med användarnas användarnamn när det laddar upp en film.

Medlem sedan juli 20041 271 inlägg
#10

Verkar fungera med...

mkdir( "usermovies/$CURUSER[username]", 0777 );

..men mappen får 0755 istället för 0777, hur löser jag det?

Medlem sedan juli 20023 617 inlägg
#11

Testa

chmod( "usermovies/$CURUSER[username]", 0777 );

efter din mkdir-sats.

Medlem sedan juli 20041 271 inlägg
#12

Fixade så att det skapades mappar direkt när en användare skapade ett konto istället.
Verkar fungera nu efter jag lade till " chmod( "usermovies/$CURUSER[username]", 0777 );". Tack!

Det enda jag inte gillar, är att det skapas enkelfnuttar i början och i slutet av den skapade mappen. 'användarnamn'

Hur löser jag det?

Har detta:

	mysql_query("INSERT INTO users (added, last_access, secret, username, passhash, status, email) VALUES(NOW(), NOW(), $secret, $username, $passhash, 'confirmed', $email)") or sqlerr(__FILE__, __LINE__);
       mkdir( "usermovies/$username", 0755 );
       chmod( "usermovies/$username", 0777 );

       mkdir( "userpics/profilbilder/$username", 0755 );
       chmod( "userpics/profilbilder/$username", 0777 );

       mkdir( "userpics/$username", 0755 );
       chmod( "userpics/$username", 0777 );
Medlem sedan juli 20023 617 inlägg
#13

Du kan ta bort andra parametern i mkdir (0755).

Enkelfnuttarna låter märkligt... Har du dem med dig från början på något sätt?

Medlem sedan juli 20041 271 inlägg
#14

fiddler skrev:

Enkelfnuttarna låter märkligt... Har du dem med dig från början på något sätt?

Nej, det finns ingen häntydning till några enkelfnuttar någonstans i koden. :l

Medlem sedan nov. 20051 596 inlägg
#15

Blir lite nyfiken på vad
'confirmed',
confirmed står för i din INSERT-rad?

Medlem sedan juli 20041 271 inlägg
#16

tanten skrev:

Blir lite nyfiken på vad
'confirmed',
confirmed står för i din INSERT-rad?

Den gör så att användaren INTE behöver aktivera kontot via email.
Den står redan som "confirmed" istället för "pending".

270 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
145 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)