|
| 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
| |
|
|