|  | 		    
					
        
         
          
         
	
          | |  | Problem med validering af form Fra : Lasse Jensen
 | 
 Dato :  28-06-06 23:23
 | 
 |  | 
 
            Godaften :)
 Jeg er igang med et system som skal kunne tilføje, rette og slette nogle 
 data i min database. Og det er lavet sådan så man ikke kan tilføje det 
 samme navn 2 gange. Og dog. Hvis man er på "forsiden" kan man ikke, der 
 virker valideringen. Men hvis man går ind og retter et navn, så kan man 
 godt rette det til et som allerede er der i forvejen, uden den melder 
 fejl. Og det kan jeg ikke forstå, da jeg ellers har smidt noget kode ind 
 der skulle forhindre dette. Her kommer I ind i billedet ;)
 Jeg håbede på I lige kunne se hvad problemet var.
 Jeg har klippet den væsentlige del af koden ud og smidt ud på PasteBin.
 Burde dette ikke virke;?
http://www.pastebin.dk/index.php?show=1827 Uanset om $fejl er TRUE eller FALSE, så bliver man ført til den første 
 URL. Den man burde blive sendt til, kun hvis der ikke er fejl altså, 
 hvor opdatering af databasen dermed går igennem.
 Hvis I ønsker kan hele scriptet ses her;
http://www.webweaver.dk/edit_breadcrumb.phps Hvis I gerne vil se det i aktion, så sig lige til.
 Det er under en admin sektion i et CMS, så skal lige sende password samt 
   brugernavn så.
 PS: Og en anden lille ting. I mit script, bliver jeg nødt til at 
 connecte til DB utrolig mange gange. Er det ikke muligt kun at skulle 
 connecte 1 eller 2 gange?
 På forhånd tak :)
 Mvh. Lasse Jensen
            
             |  |  | 
  Dan Storm (29-06-2006) 
 
	
          | |  | Kommentar Fra : Dan Storm
 | 
 Dato :  29-06-06 08:00
 | 
 |  | 
 
            Lasse Jensen skrev:
 > Burde dette ikke virke;?
 > 
 > http://www.pastebin.dk/index.php?show=1827 Umiddelbart kan jeg ikke udlede andet end at din kode blot kaster en 
 alertboks ud i fjæset på brugeren hvis $_POST['renameFromUpdate'] 
 allerede ligger i DB. Og så fortæller din kode egentlig ikke mere end det...
 > PS: Og en anden lille ting. I mit script, bliver jeg nødt til at 
 > connecte til DB utrolig mange gange. Er det ikke muligt kun at skulle 
 > connecte 1 eller 2 gange?
 Du skal kun connecte én gang. Hvis du har behov for at forbinde til 
 databasen mere end den ene gang, er det fordi du ikke har styr på din kode.
 -- 
 Dan Storm - storm at err0r dot dk / http://err0r.dk Tro ikke brugerne vil gøre noget for at undgå dit killfilter
 - Så vigtig er du heller ikke!
            
             |  |  | 
  Lasse Jensen (29-06-2006) 
 
	
          | |  | Kommentar Fra : Lasse Jensen
 | 
 Dato :  29-06-06 18:00
 | 
 |  | Dan Storm skrev:
 >
 > Umiddelbart kan jeg ikke udlede andet end at din kode blot kaster en
 > alertboks ud i fjæset på brugeren hvis $_POST['renameFromUpdate']
 > allerede ligger i DB. Og så fortæller din kode egentlig ikke mere end
 > det...
 
 Præcis. Problemet er bare den aldrig kommer frem alert boksen. I stedet
 bliver man sendt videre og den smider data'en ind i databasen. Også
 selvom den samme data allerede ligger der. Ikke meningen.
 
 >
 > Du skal kun connecte én gang. Hvis du har behov for at forbinde til
 > databasen mere end den ene gang, er det fordi du ikke har styr på din kode.
 >
 
 Okay det vil jeg kigge på. Mener bare at jeg fik en fejl sidst jeg
 prøvede. Mener den sagde noget med T-String eller sådan noget, så
 regnede ikke med man kunne smide ubegrænset SQL statements på den.
 
 Mvh. Lasse Jensen
 
 
 
 |  |  | 
   Lasse Jensen (29-06-2006) 
 
	
          | |  | Kommentar Fra : Lasse Jensen
 | 
 Dato :  29-06-06 22:19
 | 
 |  | Lasse Jensen skrev:
 > Dan Storm skrev:
 >>
 >> Du skal kun connecte én gang. Hvis du har behov for at forbinde til
 >> databasen mere end den ene gang, er det fordi du ikke har styr på din
 >> kode.
 >>
 >
 > Okay det vil jeg kigge på. Mener bare at jeg fik en fejl sidst jeg
 > prøvede. Mener den sagde noget med T-String eller sådan noget, så
 > regnede ikke med man kunne smide ubegrænset SQL statements på den.
 >
 
 Så har jeg lige prøvet lidt ad, og du har ret. Det var nok kun at
 connecte 1 gang, så det er jo dejligt nok :) Så røg der lige 30 linier
 fra eller sådan noget. Hehe
 
 Mvh. Lasse Jensen
 
 
 |  |  | 
  Michael Zedeler (29-06-2006) 
 
	
          | |  | Kommentar Fra : Michael Zedeler
 | 
 Dato :  29-06-06 09:27
 | 
 |  | 
 
            Lasse Jensen wrote:
 > Godaften :)
 > 
 > Jeg er igang med et system som skal kunne tilføje, rette og slette nogle 
 > data i min database. Og det er lavet sådan så man ikke kan tilføje det 
 > samme navn 2 gange. Og dog. Hvis man er på "forsiden" kan man ikke, der 
 > virker valideringen. Men hvis man går ind og retter et navn, så kan man 
 > godt rette det til et som allerede er der i forvejen, uden den melder 
 > fejl. Og det kan jeg ikke forstå, da jeg ellers har smidt noget kode ind 
 > der skulle forhindre dette. Her kommer I ind i billedet ;)
 > 
 > Jeg håbede på I lige kunne se hvad problemet var.
 > 
 > Jeg har klippet den væsentlige del af koden ud og smidt ud på PasteBin.
 > 
 > Burde dette ikke virke;?
 > 
 > http://www.pastebin.dk/index.php?show=1827 > 
 > Uanset om $fejl er TRUE eller FALSE, så bliver man ført til den første 
 > URL. Den man burde blive sendt til, kun hvis der ikke er fejl altså, 
 > hvor opdatering af databasen dermed går igennem.
 Hvor er det lige at $fejl får en boolean-værdi?
 Mvh. Michael.
 -- 
 Which is more dangerous? TV guided missiles or TV guided families?
 I am less likely to answer usenet postings by anonymous authors.
 Visit my home page at http://michael.zedeler.dk/ |  |  | 
  Lasse Jensen (29-06-2006) 
 
	
          | |  | Kommentar Fra : Lasse Jensen
 | 
 Dato :  29-06-06 18:05
 | 
 |  | Michael Zedeler skrev:
 >
 > Hvor er det lige at $fejl får en boolean-værdi?
 >
 > Mvh. Michael.
 
 Det gør den ikke.
 
 Jeg kan godt skrive $fejl = FALSE; før den tjekker i DB, og dermed har
 den værdi som standard, men det virker ikke alligevel. Så er det nødvendigt?
 
 Mvh. Lasse Jensen
 
 
 |  |  | 
  Martin (29-06-2006) 
 
	
          | |  | Kommentar Fra : Martin
 | 
 Dato :  29-06-06 19:18
 | 
 |  | $query = mysql_query("
 SELECT 1
 FROM Breadcrumb
 WHERE kategori = 'rename'
 AND navn LIKE '{$_POST[renameFrom]}'
 ");
 
 $therealready = mysql_num_rows($query);
 
 Her ville du få en query fejl, hvis du ellers brugte
 $sql = mysql_query("SEL....") OR DIE (mysql_error());
 
 Jeg mener nemlig ikke man kan have en række med kun tal.
 
 men brug mysql_error() ALTID! når du leger med databasen.
 og når man får en mysql fejl, så vil $therealready altid indeholde
 FALSE, og FALSE er IKKE ligmed 0 (jvf: if ($therealready != 0) { )
 så derfor vil den altid være opfyldt.
 
 så $fejl vil aldrig blive sat, og da fejl ikke er blevet sat, så ville
 denne betingelse if (!$fejl) { ikke blive opfyldt.
 
 
 |  |  | 
  Martin (29-06-2006) 
 
	
          | |  | Kommentar Fra : Martin
 | 
 Dato :  29-06-06 19:21
 | 
 |  | Martin wrote:
 > og når man får en mysql fejl, så vil $therealready altid indeholde
 > FALSE, og FALSE er IKKE ligmed 0 (jvf: if ($therealready != 0) { )
 
 Retter lige migselv, dette er selvfølgelig omvendt :)
 FALSE == 0, men FALSE er IKKE ligmed === 0 :)
 
 copy paste
 ---
 $a + $b   Union   Union of $a and $b.
 
 $a == $b   Equality   TRUE if $a and $b have the same key/value pairs.
 
 $a === $b   Identity   TRUE if $a and $b have the same key/value pairs in
 the same order and of the same types.
 
 $a != $b   Inequality   TRUE if $a is not equal to $b.
 
 $a <> $b   Inequality   TRUE if $a is not equal to $b.
 
 $a !== $b   Non-identity   TRUE if $a is not identical to $b.
 ---
 
 
 |  |  | 
  Lasse Jensen (29-06-2006) 
 
	
          | |  | Kommentar Fra : Lasse Jensen
 | 
 Dato :  29-06-06 21:50
 | 
 |  | Martin skrev:
 > $query = mysql_query("
 > SELECT 1
 > FROM Breadcrumb
 > WHERE kategori = 'rename'
 > AND navn LIKE '{$_POST[renameFrom]}'
 > ");
 >
 > $therealready = mysql_num_rows($query);
 >
 > Her ville du få en query fejl, hvis du ellers brugte
 > $sql = mysql_query("SEL....") OR DIE (mysql_error());
 >
 > Jeg mener nemlig ikke man kan have en række med kun tal.
 
 Jeg er ikke helt med tror jeg. Hvor henne i koden kigger du?
 Jeg plejer altid at bruge en or die, så hvis den mangler, så er det
 fordi jeg har glemt den. Men der hvor fejlen opstår, der er en or die på
 SQL'en.
 
 Man kan vel sagtens have en række med tal i? id?
 Jeg har brugt samme kode andre steder, hvor det virker uden problemer.
 
 Mvh. Lasse Jensen
 
 
 |  |  | 
  Lasse Jensen (29-06-2006) 
 
	
          | |  | Kommentar Fra : Lasse Jensen
 | 
 Dato :  29-06-06 22:04
 | 
 |  | Martin skrev:
 > $query = mysql_query("
 > SELECT 1
 > FROM Breadcrumb
 > WHERE kategori = 'rename'
 > AND navn LIKE '{$_POST[renameFrom]}'
 > ");
 >
 > $therealready = mysql_num_rows($query);
 >
 > Her ville du få en query fejl, hvis du ellers brugte
 > $sql = mysql_query("SEL....") OR DIE (mysql_error());
 
 
 Jeg har nu smidt or die(mysql_error()); ind overalt hvor det mangler,
 og der er ikke nogle fejl overhovedet. Det virker som det skal.
 Undtagen lige der hvor jeg nævner her i tråden. Det driller sku endnu!
 
 Mvh. Lasse Jensen
 
 
 |  |  | 
   Michael Zedeler (29-06-2006) 
 
	
          | |  | Kommentar Fra : Michael Zedeler
 | 
 Dato :  29-06-06 23:05
 | 
 |  | 
 
            Lasse Jensen wrote:
 > Jeg har nu smidt or die(mysql_error()); ind overalt hvor det mangler,
 > og der er ikke nogle fejl overhovedet. Det virker som det skal.
 > Undtagen lige der hvor jeg nævner her i tråden. Det driller sku endnu!
 Der er ikke andet for end at skrive alle mellemresultater ud, hvor det 
 kan lade sig gøre. Skriv mysql_num_rows($query) ud og skriv 
 $therealready ud før og efter tildelingen.
 Iøvrigt burde du overveje om du ikke bare skal stoppe en UNIQUE 
 constraint på feltet. Så får du en fejlbesked fra databasen når en 
 bruger prøver at oprette eller redigere sig til en dublet.
 Mvh. Michael.
 -- 
 Which is more dangerous? TV guided missiles or TV guided families?
 I am less likely to answer usenet postings by anonymous authors.
 Visit my home page at http://michael.zedeler.dk/ |  |  | 
    Lasse Jensen (29-06-2006) 
 
	
          | |  | Kommentar Fra : Lasse Jensen
 | 
 Dato :  29-06-06 23:24
 | 
 |  | 
 
            Michael Zedeler skrev:
 > 
 > Der er ikke andet for end at skrive alle mellemresultater ud, hvor det 
 > kan lade sig gøre. Skriv mysql_num_rows($query) ud og skriv 
 > $therealready ud før og efter tildelingen.
  >
 Nu har jeg prøvet at udskrive dem. Og jeg kan se problemet ligger i den 
 tæller sig til 0, når man går ind på siden. Og dermed ingen fejl. Det må 
 være fordi variablerne er tomme. (bliver først angivet værdi, når man 
 submitter). Så man skal vel have et input felt som "hide" og så ha noget 
 ala:
 if (isset($_POST['postet'])) (
 koden der tæller etc...
 }
 Så bliver der ikke givet nogen værdi (0) før man submitter.
 Kan det være noget i den stil?
 > 
 > Iøvrigt burde du overveje om du ikke bare skal stoppe en UNIQUE 
 > constraint på feltet. Så får du en fejlbesked fra databasen når en 
 > bruger prøver at oprette eller redigere sig til en dublet.
 > 
 > Mvh. Michael.
 Det kunne man selvfølgelig overveje    Mvh. Lasse Jensen
            
             |  |  | 
     Lasse Jensen (30-06-2006) 
 
	
          | |  | Kommentar Fra : Lasse Jensen
 | 
 Dato :  30-06-06 13:00
 | 
 |  | Lasse Jensen skrev:
 >
 > Nu har jeg prøvet at udskrive dem. Og jeg kan se problemet ligger i den
 > tæller sig til 0, når man går ind på siden. Og dermed ingen fejl. Det må
 > være fordi variablerne er tomme. (bliver først angivet værdi, når man
 > submitter). Så man skal vel have et input felt som "hide" og så ha noget
 > ala:
 >
 > if (isset($_POST['postet'])) (
 > koden der tæller etc...
 > }
 >
 > Så bliver der ikke givet nogen værdi (0) før man submitter.
 >
 > Kan det være noget i den stil?
 >
 
 Det kunne det ikke. Det virker heller ikke. ;(
 
 Mvh. Lasse Jensen
 
 
 |  |  | 
      Dan Storm (01-07-2006) 
 
	
          | |  | Kommentar Fra : Dan Storm
 | 
 Dato :  01-07-06 09:19
 | 
 |  | 
 
            Lasse Jensen skrev:
 > Lasse Jensen skrev:
 [snip]
 Indimellem har jeg prøvet at lave noget der har været så omfattende i 
 koden at jeg har stirret mig blind i det når jeg har prøvet at rette 
 koden til.
 Indimellem må man bare indse at det script man har lavet måske er for 
 indviklet at redde, og så hjælper det indimellem at starte forfra.
 Slet det script du har problemer med og lav det forfra igen. Så opdager 
 man indimellem nogle ting der kunne gøres smartere.
 Eksempel:
 $query = mysql_query("SELECT 1 FROM Breadcrumb WHERE kategori = 'rename' 
 AND navn='".$_POST['renameFromUpdate']."'");
 if(mysql_num_rows($query) > 0)
 {
 $fejl = "Filen er allerede omdøbt!";
 }
 -- 
 Dan Storm - storm at err0r dot dk / http://err0r.dk Tro ikke brugerne vil gøre noget for at undgå dit killfilter
 - Så vigtig er du heller ikke!
            
             |  |  | 
       Lasse Jensen (02-07-2006) 
 
	
          | |  | Kommentar Fra : Lasse Jensen
 | 
 Dato :  02-07-06 16:15
 | 
 |  | Dan Storm skrev:
 >
 > Indimellem har jeg prøvet at lave noget der har været så omfattende i
 > koden at jeg har stirret mig blind i det når jeg har prøvet at rette
 > koden til.
 >
 > Indimellem må man bare indse at det script man har lavet måske er for
 > indviklet at redde, og så hjælper det indimellem at starte forfra.
 >
 > Slet det script du har problemer med og lav det forfra igen. Så opdager
 > man indimellem nogle ting der kunne gøres smartere.
 >
 > Eksempel:
 >
 > $query = mysql_query("SELECT 1 FROM Breadcrumb WHERE kategori = 'rename'
 > AND navn='".$_POST['renameFromUpdate']."'");
 >
 > if(mysql_num_rows($query) > 0)
 > {
 > $fejl = "Filen er allerede omdøbt!";
 > }
 >
 
 Der er desværre nok ikke andet for. Tak for hjælpen ellers :)
 
 Mvh. Lasse Jensen
 
 
 |  |  | 
       Lasse Jensen (02-07-2006) 
 
	
          | |  | Kommentar Fra : Lasse Jensen
 | 
 Dato :  02-07-06 17:11
 | 
 |  | Dan Storm skrev:
 >
 > Indimellem må man bare indse at det script man har lavet måske er for
 > indviklet at redde, og så hjælper det indimellem at starte forfra.
 >
 
 Jeg er ikke begyndt forfra endnu. Jeg har lige prøvet med
 $_SERVER['PHP_SELF'] i stedet for en sti som sender en videre i formen,
 og så virker det som det skal. Det lader til at problemet er at man
 bliver sendt videre, ligeså snart man submitter. - Den når ikke at komme
 med fejlen, fordi sitet ikke blivet refreshet. Altså må det vel være
 ligesom med en gæstebog fx eller en anden form, at man skal smide koden
 som tjekker i den fil som man bliver sendt til, og derfra virker det.
 
 Men ihh det vil jo sige give et andet problem, da men dermed at kommet
 væk fra redigerings siden, og så skal man selv gå ind i den og starte
 forfra med at redigere.
 
 Kan man mon lave noget, som sender en til en fil, man får fejl beskeden,
 og så derefter sender den en tilbage til redigerings sitet. Det må
 være muligt.
 
 Mvh. Lasse Jensen
 
 
 |  |  | 
        Lasse Jensen (02-07-2006) 
 
	
          | |  | Kommentar Fra : Lasse Jensen
 | 
 Dato :  02-07-06 17:31
 | 
 |  | 
 
            Lasse Jensen skrev:
 > 
 > Kan man mon lave noget, som sender en til en fil, man får fejl beskeden, 
 >  og så derefter sender den en tilbage til redigerings sitet. Det må være 
 > muligt.
 > 
 Jeg har prøvet at kigge på det, og det virker godt nok med 
 fejl-meddelelsen efter jeg har flyttet koden over i den anden fil.
 Dog sender den mig ikke tilbage igen af en eller anden grund?
 Jeg har prøvet sådan her; (Undskyld koden i indlægget)
 if ($Key == 10) {
         
          $queryUpdate = mysql_query("SELECT * FROM Breadcrumb WHERE kategori = 
 'rename' AND navn LIKE '{$_POST[renameFromUpdate]}'") or 
 die(mysql_error());
                                                               
          if (mysql_num_rows($queryUpdate) > 0) {
          $fejl = "Filen er allerede omdøbt!";
         
          ?>
                        
          <script type="text/javascript">
          var fejl = "<? print "$fejl"; ?>";
          alert ( fejl );
          </script>
         
          <?
         
          }
         
          if ($fejl) {
         
          header("location:http://www.webweaver.dk/ban.php");          exit;
          } else {
         
          $renameFromUpdate = $_POST['renameFromUpdate'];
          $renameTooUpdate = $_POST['renameTooUpdate'];
          $rename_kategori = "rename";
          $breadcrumb_brugernavn = $_SESSION["username"];
          $dato = strftime("%d/%m-%Y");
                                 
          mysql_query("UPDATE Breadcrumb SET navn = '$renameFromUpdate', 
 renamed_navn = '$renameTooUpdate', kategori = '$rename_kategori', 
 brugernavn = '$breadcrumb_brugernavn', dato = '$dato', ip = '$ip' WHERE 
 id = '$tjek_id'") or die(mysql_error());
               
          }
         
          } else if ($Key == 20) {
 ..... ....
 Man bliver bare ikke sendt videre. Nogle som kan se hvorfor?
 Mange tak :)
 Mvh. Lasse Jensen
            
             |  |  | 
         Dan Storm (04-07-2006) 
 
	
          | |  | Kommentar Fra : Dan Storm
 | 
 Dato :  04-07-06 08:15
 | 
 |  | 
 
            Lasse Jensen skrev:
 > Dog sender den mig ikke tilbage igen af en eller anden grund?
 Det er fordi du sender en header ud efter du har sendt output.
 En header virker kun hvis du sætter den før alt andet.
 -- 
 Dan Storm - storm at err0r dot dk / http://err0r.dk Tro ikke brugerne vil gøre noget for at undgå dit killfilter
 - Så vigtig er du heller ikke!
            
             |  |  | 
          Lasse Jensen (05-07-2006) 
 
	
          | |  | Kommentar Fra : Lasse Jensen
 | 
 Dato :  05-07-06 00:14
 | 
 |  | Dan Storm skrev:
 
 >
 > Det er fordi du sender en header ud efter du har sendt output.
 > En header virker kun hvis du sætter den før alt andet.
 >
 
 Præcis det ved jeg. Har også flyttet lidt om på koden og så videre, men
 det virker ikke. Heller ikke selvom det er det øverste i koden, eller om
 jeg bruger ob_start(); / ob_end_flush();
 
 Men jeg er kommet frem til jeg ikke gider rode med det mere. Jeg dropper
 det bare, man bliver ikke sendt tilbage automatisk, - man må bare selv
 bevæge sig "derind" igen.
 
 Tak for hjælpen til alle.
 
 Mvh. Lasse Jensen
 
 
 |  |  | 
 |  |