webForumDet fria alternativet

"Återanvända" ett formulär?

PHP

4 svar · 1 597 visningar · startad av Guldstrand

Medlem sedan juli 20041 271 inlägg
Frågan#1

Finns det något bra OCH säkert sätt att "återanvända" ett formulär?

Har följande kod för att ändra en kategori i databasen:

if (isset($_GET["andra"]) && $_GET["id"] != "" && $_GET["id"] != 0) { 
$rad = @mysql_query("SELECT * FROM categories WHERE id = " .intval($_GET["id"]). "") or sqlerr(__FILE__, __LINE__);
$kat = mysql_fetch_array($rad) or die("Finns ingen kategori med detta ID (" .intval($_GET["id"]). ").");

if (isset($_POST["edit_cat"])) { 
mysql_query("UPDATE categories SET name = '" .htmlspecialchars($_POST["namn"]). "', id = " .intval($_POST["kat_id"]). " WHERE id = " .intval($kat["id"]). "") or sqlerr(__FILE__, __LINE__); 

$status = "<p>Kategorin med ID <b>" .intval($kat["id"]). "</b> har nu ändrats.</p>"; 
}

$edit_form = "<h3>Ändra kategorin <em>" .htmlspecialchars($kat["name"]). "</em></h3>";
$edit_form .= "<form method=\"post\" action=\"kategorier.php?andra&id=" .intval($kat["id"]). "\">\n<fieldset>";
$edit_form .= "<p><label for=\"kat_id\">ID:</label><input type=\"text\" name=\"kat_id\" value=\"" .intval($kat["id"]). "\" /></p>";
$edit_form .= "<p><label for=\"namn\">Namn:</label><input type=\"text\" name=\"namn\" value=\"" .htmlspecialchars($kat["name"]). "\" /></p>";
$edit_form .= "<p><label for=\"beskrivning\">Beskrivning:</label><input type=\"text\" name=\"beskrivning\" /></p>";
$edit_form .= "<p><label for=\"userfile\">Ikon:</label><input type=\"file\" name=\"userfile\" /></p>";
$edit_form .= "<p><input type=\"submit\" name=\"edit_cat\" value=\"ändra kategori\" /></p>";
$edit_form .= "</fieldset>\n</form>";
}

Längre ner på sidan, har jag ytterligare ett formulär där jag lägger till/skapar nya kategorier.

	<h3>Skapa ny kategori</h3>
		<form method="post" action="kategorier.php">
			<fieldset>
				<p><label for="namn">Namn:</label><input type="text" name="namn" /></p>
				<p><label for="beskrivning">Beskrivning:</label><input type="text" name="beskrivning" /></p>
				<p><label for="userfile">Ikon:</label><input type="file" name="userfile" /></p>
				<p><input type="submit" name="submit" value="skapa kategori" /></p>
			</fieldset>
		</form>

Det känns både onödigt och "klumpigt" att ha två formulär för detta.

Medlem sedan juli 20041 271 inlägg
#2

Är det verkligen ingen som vet hur man kan lösa ovanstående? :(

Medlem sedan juni 20019 519 inlägg
#3

Klart att du borde kunna göra det, det ända som diffar dom är väl din QS värde i formuläret?

Skapa en funktion eller liknande som du kan mata in vad QS skall eller inte vara och alla fält i ditt formulär, om det inte är något skriv ut som value="" istället för value="mitt värde".

Eller så förstå jag inte alls vad du försöker göra.

Medlem sedan sep. 201046 inlägg
#4

Det är inte klumpigt att använda två enskida formulär. Många stora webbapplikationer använder det, dock skulle jag som andra använda mig utav någon typ av template-engine (kod-mallar) eller skapa en själv istället för att skriva ut så mycket html i php-koden som blir väldig jobbig att läsa och arbeta med i framtiden och blir jobbig när man ska designa sidan (front-end)

Medlem sedan juni 200443 inlägg
#5

Skapa en variabel som avgör om man ändrar eller lägger till, typ $IsEditMode.
Och styr markup efter den.
Men följ annars typ denna kod princip för att hantera postningar .

  

$h3 = $IsEditMode ? "Ändra kategori" :"Skapa kategori";

if(empty($_POST)){ // ingen formulär postning skett

  if($_GET["id"] ){  // ändra
    $rad = @mysql_query("SELECT * FROM categories.."""

    $kat = mysql_fetch_array($rad);
    $Namn = htmlspecialchars($kat['namn']);
  }

}else{                  // formulär postat

 if(IsValidForm()){

   mysql_query("UPDATE ....."); 

   redirect();

  }else{ // populera fälten igen
 
    $Namn = htmlspecialchars($_POST["namn"]);

  }

}
 
  <h3><?php echo $h3 ?>

        <form method="post" action="kategorier.php"> 
            <fieldset> 
                <p><label for="namn">Namn:</label><input type="text" name="namn" value ="<?php $Namn ?>"/></p> 
                <p><label for="beskrivning">Beskrivning:</label><input type="text" name="beskrivning" /></p> 
                <p><label for="userfile">Ikon:</label><input type="file" name="userfile" /></p> 
                <p><input type="submit" name="submit" value="skapa kategori" /></p> 
            </fieldset> 
        </form>
267 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)