Avatar billede retake Nybegynder
12. januar 2010 - 09:56 Der er 2 kommentarer og
1 løsning

insert / update / delete i funktion

Lige nu ser min sql sådan ud.

if($_POST['do'] == "new"){ //-- ````````````````````````````````````````````NEW
        $subject = $_POST['subject'];
        $content = $_POST['content'];
        $date = date("M d, Y");
        $created_by = $_SESSION['username'];
        mysql_query("INSERT INTO osa_news (
        subject,
        content,
        date,
        created_by
        ) VALUES (
        '$subject',
        '$content',
        '$date',
        '$created_by'
        )") or die (Java::Alert("MySQL Error: ".mysql_error()));
        Java::GoToURL("?management=man_news&type=edit");
}

if($_POST['do'] == "edit"){ //-- ````````````````````````````````````````````EDIT
        $subject = $_POST['subject'];
        $content = $_POST['content'];
        $id = $_POST['id'];
        mysql_query("update osa_news set
        subject = '$subject',
        content = '$content'
        WHERE id = '$id'") or die (Java::Alert("MySQL Error: ".mysql_error()));
        Java::GoToURL("?management=man_news&type=edit");
}

if($_POST['do'] == "delete"){ //-- ````````````````````````````````DELETE
        $id = $_POST['id'];
        mysql_query("delete from osa_news where id = '$id'") or die (Java::Alert("MySQL Error: ".mysql_error()));
        Java::GoToURL("?management=man_news");
}

Dette vil jeg gerne lave om til en funktion og optimere det da der tit sker fejl når jeg laver updates til databasen. Men hvordan gør man det best? Hjælp søges
13. januar 2010 - 20:30 #1
retake, det tog lidt tid (det er komplekst og samtidig har jeg selv nogle spoergsmaal ude som jeg har maattet arbejde med.)  Er spoergsmaalet stadig aktuelt?

Jeg forstaar at du har forskellige php funktioner for insert, update, og delete og dem vil du gerne have samlet i en enkelt funktion.  Det kan ogsaa godt lade sig goere.  Jeg er kommet et stykke vej.  Foerst et par kommentarer:

(1)  Du definerer dato som date("M d, Y").  Det synes min mysql ikke om.  I den kode jeg har testet med har jeg har derfor brugt date("Y-m-d"), men det kan du bare bytte ud igen med dit foretrukne format hvis du kan faa det til at virke.

(2)  Saa er jeg ikke helt paa hoejde med det med Java::Alert.... og Java::GoToURL....  I den kode jeg har testet med har jeg blot brugt "or die(mysql_error())" og jeg har ikke testet Java::GoToURL...

(3)  Yderligere for at teste har jeg lavet en simpel html formular med input felter for do, id, subject, og content.  Jeg inkluderer ikke nogen validering.  Jeg gaar ud fra at du i din egen kode soerger for at do er forpliktet og kun kan have vaerdierne new, edit, og delete og at hvis metoden er new skal id vaere blank.

(4)  Saa har jeg i min testkode ikke lavet nogen session, saa $_SESSION['username'] er tom.  Men koden virker med og uden indhold i den variabel.

(5)  Yderligere gaar jeg ud fra at den tabel du bruger kun har felterne id, subject, content, date, and created by og at id er auto_increment.  I saafald er det ikke noedvendigt at sige "INSERT INTO osa_news(subject, content, date, created_by) VALUES(....)".  Det er kortere blot at indsaette '' for id og saa sige "INSERT INTO osa_news VALUES('', $subject, $content ....)"

(6)  For at teste har jeg lavet en mysql tabel der hedder retake.  Dette navn forekommer derfor i min test kode i stedet for osa_news.

(7)  Min foreslaaede loesning gaar saaledes:  Naar formularen er fyldt ind og der er trykket paa Submit, if($_POST['submit']), saa laver jeg foerst alle de noedvendige variable, dels fra input fra formen, dels date og $_SESSION['username'] og enkelte tekststrenge.  Saa tester jeg vaerdien af do og laver for hver af de tre muligheder en querystring sammensat af variabler, og derefter sender jeg det til mysql. Til den ende har jeg foreloebig kun lavet query strengen for new.  Men hvis du er interesseret kan jeg tilfoeje query strengene ogsaa for edit og delete.  Det bliver saa nok foerst i morgen aften paa grund af andre forpligtelser.

Jeg har lavet denne simple test hjemmeside som du kunne kikke paa:  http://christianjorgensen.be/retake.php

Her er saa min test kode: 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <title></title>
</head>

<body>
<?
$link = mysql_connect ('christianjorgensen.be.mysql', 'christianjoygen', 'dnyBKKbe') or die(mysql_erorr());
mysql_select_db('christianjoygen') or die('Could not select database');
 
if($_POST['submit'])
{
  if($_POST['do']) $do = $_POST['do'];
  if($_POST['id']) $id = $_POST['id'];
  if($_POST['subject']) $subject = $_POST['subject'];
  if($_POST['content']) $content = $_POST['content'];
  $date = date("Y-m-d");
  if($_SESSION['username']) $created_by = $_SESSION['username'];
  $table = "retake";
  $die = 'or die(mysql_error())';
  $java1 = 'Java::GoToURL("?management=man_news&type=edit")';
  $java2 = 'Java::GoToURL("?management=man_news")';

  if($do = "new") $query = "INSERT INTO " . $table . " VALUES('', '" . $subject . "', '" . $content . "', '" . $date . "', '" . $created_by . "')";
 
  mysql_query($query) or die(mysql_error());
}
 
mysql_close($link);
?>
<form action= "<? print $_SERVER["PHP_SELF"];?>" method=POST>
do <input type="text" name="do" /><br/>
id <input type="text" name="id" /><br/>
subject <input type="text" name="subject" /><br/>
content <input type="text" name="content" /><br/>
<input type="submit" name="submit" value="submit" />
</form> 
</body>
</html>
16. januar 2010 - 06:26 #2
retake, fik du mit indlaeg?  Var det nyttigt, eller soegte du noget andet?
02. september 2010 - 22:09 #3
retake, jeg proever lige en gang mere.  Du oprettede spoergsmaalet for at faa (frivillig og gratis) hjaelp, og jeg foreslog (ioevrigt som den eneste) en loesning.  Men du har ikke reageret, og spoergsmaalet haenger stadig som aabent i min liste af indlaeg.  Kunne jeg bede dig nu at lukke spoergsmaalet, med points til mig hvis du mener at mit indlaeg var til hjaelp, eller med points til dig selv (og lidt forklaring) hvis jeg fejlede.  Men under alle omstaendigheder, afslut hvad du begyndte og luk spoergsmaalet.  Please.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester