Avatar billede Slettet bruger
01. december 2004 - 20:47 Der er 24 kommentarer og
1 løsning

ja/nej alert boks

Jeg skal have indsat noget php ind i en mysql database, men jeg vil have at man skal acceptere først, dette vil jeg lave med en javascript alert box

jeg har tænkt mig at skrive som "meddelelse" alle variablerne der bliver indsat, og så hvis man trykker "ok/ja/accepter" så indsætter den det, og ved nej vender den tilbage til forrige side..

kan dette laves, altså hvor man sætter php kode direkte ind i onconfirm, og ikke linker til andre sider?
Avatar billede skovenborg Nybegynder
01. december 2004 - 20:49 #1
hvis du laver en confirm-boks vil den returnere hvad brugeren har svaret:
if (!confirm("Ja eller nej")) {location.href = "forrigeside.html"}
Her tester den om man har svaret nej
Avatar billede skovenborg Nybegynder
01. december 2004 - 20:51 #2
Du kunne selvfølgelig også skrive:
if (!confirm("Ja eller nej")) {history.go(-1)} // hvis man svarer nej (annuller)
else { // hvis man svarer ja
    // indsæt i database (her skal du nok videresende til en anden side, da javascript ikke selv kan håndtere databaser
}
Avatar billede Slettet bruger
01. december 2004 - 20:51 #3
altså mit problem er at jeg ikke kan javascript overhovedet.. hvis jeg kunne få et eksempel med:

--her skal stå teksten--
--her står hvad der sker ved ja--
--hvad der sker ved nej--

så er jeg glad :D
Avatar billede Slettet bruger
01. december 2004 - 20:52 #4
under else kan man jo skrive <? mysqldelen ?>
Avatar billede Slettet bruger
01. december 2004 - 20:53 #5
jeg er ikke engang med dertil, hvor du siger if(!confirm).. jeg ved ikke hvordan man får boksen frem, jeg kan intet javascript o_O
Avatar billede skovenborg Nybegynder
01. december 2004 - 21:05 #6
Okay, det må du undskylde, men jeg skal prøve at forklare mig så godt jeg kan.

Det ovenstående kode havde jeg tænkt mig du skulle smide ind i <head>-sektionen mellem script-taggene:
<script type="text/javascript">
if (!confirm("Ja eller nej")) {location.href = "forrigeside.html"}
</script>

Det denne kode gør er først at lave en confirm-boks hvor man kan trykke annuller eller Ok. Koden:
(!confirm("Ja eller nej")) tester om man har svaret OK eller Annuller, og hvis man har svarert annuller så er if-sætningen (kender du nok fra PHP - hvis du altså kan det sprog) sand og den går videre til koden mellem { }. Denne kode, i dette tilfælde, går videre til siden forrigeside.html. Location.href er her den url man er inde på, og ved at ændre på den går browseren videre til den side du har ændret location.href til.

(!confirm("Ja eller nej")) er faktisk det samme som (confirm("Ja eller nej") == false) og confirm-boksen returnerer netop false (falsk) hvis man har trykket annuller.
Avatar billede Slettet bruger
01. december 2004 - 21:15 #7
jep, jeg er helt med :D

(og ja jeg kan php :P)

har 2 ting så
1. min side er opbygget så jeg ikke umiddelbart kan komme til <head>, kan det lade sig gøre på andre måde

2. jeg vil helst _ikke_ linke til sider med javascript, jeg vil gerne sætte php kode ind hvis man siger ja, og noget andet hvis man siger nej
Avatar billede Slettet bruger
01. december 2004 - 21:22 #8
hvis det kan lade sig gøre?
Avatar billede skovenborg Nybegynder
01. december 2004 - 21:32 #9
Men tilbage til dit problem. Her er der nemlig den hage ved det da man nemlig ikke kan skrive <? mysql-delen ?> under else (hvis man har trykket OK), da Php-afvikles fra serveren (før siden bliver vist) og vil være upåvirket af hvad javascript-delen gør (da denne køres på selve browseren (når siden er vist).

En Ide' kunne nu være at lave en side hvor du kan indsætter variablerne og har en anden side hvor du kan teste om brugeren vil sætte variablen ind eller ej. Nu ved jeg ikke helt hvordan du havde tænkt dig indsætning af variablerne skulle foregå, og løsningen på problemmet afhænger også hvor de forskellige variabler kommer fra, men jeg antager du vil have en simpel side hvor en masse confirm-bokse skal poppe op.

Side1.php:
<script type="text/javascript">
  var str = "";
  function insVar(name,value) {
      if (confirm("Vil du indsætte variablen " + name + "?")) { str += name+"="+value+"&";} 
  }
 
  insVar("foo","værdi1");
  insVar("bar","værdi2");
  insVar("baz","værdi3");
  str = str.substring(0,str.length-1); // Fjerner det sidste &-tegn
  location.href = "side2.php?"+str;
 
</script>
Før laves en tekst-streng ved navn str. Denne vil vi indsætte de variabler og deres værdier, som brugeren vil have med i databasen. Til dette formål laves en funktion insVar, som skal spørge om dette. insVar er en funktion som kræver at man som argumenter (det man skriver indenfor de to parenteser når man kalder funktionen, fx insVar("navn","værdi") er navn og værdi er argumenterne), skriver navnet på variablen og værdien for variablen.
Nu spørges der til om man vil indsætte variablen:
if (confirm("Vil du indsætte variablen " + name + "?"))
Hvis man her trykker OK returnerer confirm-boksen true (sandt), og nu if-sætningen blive sand, da vi ikke har sat et udråbstegn foran confirmboksen, hvilket vil sige den tester om man confirm-boksen bliver sand og ikke som før falsk).
Sætningen:
{ str += name+"="+value+"&";}
lægger nu navnet=værdien ind i strengen str (+= betyder man lægger til og +-tegnet imellem de forskellige dele er det samme som PHP's punktum, altså den adskiller teksten fra hinanden). & tegnet til sidst er krævet fordi vi skal bruge strengen str i en url.

Til sidst går vi videre til den side hvor man indsætter variablerne
location.href = "side2.php?"+str;
Hvis man nu har trykket ja ved variablen "foo" og nej ved de andre bliver stien til den nye side:
side2.php?foo=værdi2

Alt efter spørgsmålstegnet er den såkaldte search-string, og den kan PHP omfange med $_GET (eller $_REQUEST). Din side2.php side kan nu teste om man har svaret OK ved variablen foo således:
if (isset($_GET['foo']) { // nu har man trykket OK}
Da $_GET er et array (håber du ved hvad det er ellers læs http://www.webcafe.dk/artikler/php/arrays/) kan du løbe det igennem med en løkke og indsætte variablerne én for én. På den måde behøver du ikke teste en gang til.
Avatar billede skovenborg Nybegynder
01. december 2004 - 21:35 #10
Og lige for at svare på dine to spørgsmål

1: Ja, det behøver ikke være i head-området, Javascript kan afvikles overalt - men det er bare mest normalt at gøre det i head.

2: Næ, desværre. Her kommer problemmet med at PHP er et serverside sprog og javascript client-side. Men se min (meget store) kommentar før.

Og som sagt afhænger løsningen af netop dit problem meget af hvor du får variablerne fra - er det nogen der bare er der (som du definerer) eller har brugeren selv indtastet navnet og værdien?
Avatar billede Slettet bruger
01. december 2004 - 21:38 #11
jep, det kan også sagtens klares det med at sende til en ny side, det er mit spg1 der var vigtigst :P mange tak

jeg vil ikke helt gøre det som du skriver..

jeg vil bare have 1 enkelt confirm boks, hvor den f.eks. skriver

vil du indsætte:

$var til kolonne i tabel
$var2 til kolonne2 i tabel2
$var3 til kolonne3 i tabel3

osv.. så det er take it or leave it.. ikke vælg dem du vil indsætte :D

jeg har en følelse af at det jeg vil er en del nemmere end det andet.. ikke?
Avatar billede Slettet bruger
01. december 2004 - 21:44 #12
ej jeg kan ikke engang finde ud af hvor jeg kan skrive php i:

<script type="text/javascript">
        var str = "";
        function insVar(name,value) {
        if (confirm("Vil du indsætte variablen " + name + "?")) { str += name+"="+value+"&";} 
        </script>
Avatar billede Slettet bruger
01. december 2004 - 21:55 #13
mange tak for hjælpen, jeg smutter lige for i dag
Avatar billede skovenborg Nybegynder
01. december 2004 - 22:04 #14
Hvis du vil bruge ovenstående script skulle du have skrevet:
<script type="text/javascript">
        var str = "";
        function insVar(name,value) {
        if (confirm("Vil du indsætte variablen " + name + "?")) { str += name+"="+value+"&";}
}
<?php
$var = "værdi";
echo "insVar('".$$var."','".$var."')";
?>
        </script>

så bliver outputtet nemlig:
if (confirm("Vil du indsætte variablen " + name + "?")) { str += name+"="+value+"&";}
}
insVar('var','værdi');

Men når det er sagt, så kunne du også vælge en anden strategi når du alligevel kun har en enkelt confirm-boks. Du kunne nemlig lave en knap/link et sted på den side hvor du vil indsætte variablerne fra, og når du så trykker på den knap/link vil den spørge dig om du vil indsætte dem eller ej:

<form>
<input type="button" value="Indsæt halløj" onclick="if (confirm('Vil du indsætte: <?php echo $streng_med_variablerne;?>?')) {location.href= 'sideHvorDuIndsætterVariablerneIDatabasen.php';}" />
<a href="#" onclick="if (confirm('Vil du indsætte: <?php echo $streng_med_variablerne;?>?')) {location.href= 'sideHvorDuIndsætterVariablerneIDatabasen.php';};return false;">Indsæt</a>
</form>

Skal nok lige forklare det, men vil først lige teste det lidt af først.
Avatar billede Slettet bruger
01. december 2004 - 22:07 #15
det ser godt ud.. mange tak, jeg prøver det desværre først i morgen :P
Avatar billede skovenborg Nybegynder
01. december 2004 - 22:16 #16
Det helt i orden, jeg har også lavet lidt ændringer:
<?php
$var1 = "variable1";
$var2 = "variable2";
$var3 = "variable3";
$streng_med_variablerne = "$var1 i tabel1\\n$var2 i tabel2\\n$var3 i tabel3";
?>
<form>
<input type="button" value="Indsæt halløj" onclick="if (confirm('Vil du indsætte:\n <?php echo $streng_med_variablerne;?>?')) {location.href= 'test.php';}" />
<a href="test.php" onclick="if (!confirm('Vil du indsætte:\n <?php echo $streng_med_variablerne;?>?')) {return false;}">Indsæt</a>
</form>

Okay, dette er bare en test, men jeg håber du kan ud fra dette og de andre eksempler bygge et færdigt resultat (eller må du spørge igen ;-)

Først skal der fra serverens side laves en php-variabel med den tekst der skal stå i din confirm-boks (hvordan den skal se ud kan du helt selv styre herfra. Jeg vil ikke gå i detaljer med det, men blot sige at det er vigtigt at hele variablens værdi skal, når den bliver skrevet ud, være på samme linie. Javascript kan kun klare strenge på samme linie (i selve koden), og derfor vil den give en fejl hvis ens php-variabel bare har et enkelt linieskift. Derfor bruger jeg også \\n til at lave et \n-tegn med, så selve confirm-boksens tekst indeholder linieskift - bare husk at javascript-strengen i koden skal være på samme.

Nu laves der lidt samme trick som i starten at hvis confirm('Vil du indsætte:\n <?php echo $streng_med_variablerne;?>?') er sand (man har trykket OK så går den til en ny side. Her kan du også set hvordan php-variablen skal sættes ind.
Jeg har lavet det lidt anderledes for linket, for her udnyttes der at et link i sig selv godt kan henvise til en anden side, så location.href er overflødig. Nu skal der bare testes for om man har trykket annuller (confirm returnerer false - dette testes ved at sætte udråbstegnet foran), og hvis man gjort det så skal linket også annullers. Dette gøres så med return false; hvormed linket ikke virker (hvilket det jo heller ikke skal, hvis man trykker annuller).

Håber du har nok til at arbejde videre med :-)
Avatar billede Slettet bruger
02. december 2004 - 16:45 #17
er der forskel på dit link, og på knappen?
Avatar billede Slettet bruger
02. december 2004 - 16:55 #18
linket*
Avatar billede Slettet bruger
02. december 2004 - 17:05 #19
hmm.. kan jeg få fat i variablerne fra samme form som knappen er i?

jeg kan ikke med $_POST['navnet_paa_input_feltet']
Avatar billede skovenborg Nybegynder
02. december 2004 - 17:31 #20
Ikke hvordan de i sidste ende virker, men den ene tester du om du har svaret OK og den anden (linket)  tester du om der er svaret annuller. Men i grunden nej, de virker på samme måde.

$_POST bruger du til at få fat i variabler du har sendt via en formular (når du submitter den), men når du trykker på den her knap submitter den slet ikke formen, den går bare videre til en ny side.
Hvis du gerne vil bruge post kan du lave dette lille trick:
<form action="side.php" method="post" onsubmit="return confirm('Vil du indsætte <?php echo $streng_med_variablerne;?>?');">
<input type="hidden" value="<?php echo $streng_med_variablerne;?>" />
<input type="submit" value="Indsæt variabler" />
</form>

Når du trykker på submit-knappen så kører eventen onsubmit. Hvis man i onsubmit skriver "return false" vil formen ikke blive submittet videre, men hvis man skriver "return true", gør den.
Nu kan man udnytte at confirm-boksen netop returnerer true eller false afhængigt af hvad man skriver, så du kan korte det hele ned til "return confirm('goddav goddav');".

Den felt med type="hidden" er godt nok kun nødvendigt, hvis du vil sende variablerne videre.
Avatar billede Slettet bruger
02. december 2004 - 17:58 #21
ok, mange tak :D

smid svar tak.. forhøjer lige til 100
Avatar billede skovenborg Nybegynder
02. december 2004 - 19:12 #22
okay - håber du har noget at arbejde videre med nu :-)
Avatar billede Slettet bruger
02. december 2004 - 19:13 #23
det har jeg da :P
Avatar billede skovenborg Nybegynder
02. december 2004 - 21:38 #24
super - og tak for points :-)
Avatar billede Slettet bruger
02. december 2004 - 22:12 #25
velbekomme
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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