Avatar billede danic Nybegynder
28. marts 2004 - 10:02 Der er 18 kommentarer og
1 løsning

Indsætte mysql query i et javascript

Jeg har her et lille javascript, som kører når jeg trykker på submit i min form.

<script language="JavaScript" type="text/javascript">
function submitForm()
{
  updateRTEs();
  alert(document.textform.rte1.value);
  return false;
}
</script>

Jeg ønsker nu at ændre dette således at data ikke bliver udskrevet i en alert box, men bliver gemt i min database.

alert(document.textform.rte1.value); skal derfor ændres til:

<?
$sql = "UPDATE content SET text1='document.textform.rte1.value' WHERE menuid = '$menuid'";
?>

Jeg er usikker på hvordan sql sætningen skal smeltes ind i javascriptet og hvordan indholdet af formen 'document.textform.rte1.value' skal indgå i sql sætningen således at sql kan læse denne.
Avatar billede keysersoze Ekspert
28. marts 2004 - 10:07 #1
der er én ting du skal tage højde for - og det er at SQL er noget der skal køre serverside sammen med ASP/PHP hvorimod at javascript kører clientsite. Det vil sige at du ikke kan få javascript til direkte at skrive i databasen så det du forsøger er reelt set umuligt!

Det du i stedet kan gøre - måske - er at lave en skjult iframe der bliver opdateret af din javascriptkode og indholdet i iframen svarer til den PHP/SQL kode du vil have kørt og når den kode er kort korrekt (eller ikke korrekt) kan du kaste en javascript-alert eller andet tilbage
Avatar billede espersen Novice
28. marts 2004 - 11:11 #2
Jeg har med god hjælp fra en anden EXP-bruger fået smeltet lidt JavaScript og PHP sammen. MEN det henter jo dog data fra MySQL....

Reelt gøres det ved at stoppe og starte PHP-delen - da det netop kører hhv. clientsite og serversite.

fx:

?>
    <a href="kontakt.php" title="Send e-mail"
    onmouseover="this.href='mai' + 'lto:' + '<?php echo $row[mail2_1] ?>' + '&#64;' + '<?php echo $row[mail2_2] ?>'"
    onfocus="this.href='mai' + 'lto:' + '<?php echo $row[mail2_1] ?>' + '&#64;' + '<?php echo $row[mail2_2] ?>'">
<?php 
if($row[mail2_1] != "")
{
echo "<img src='images/email_icon.gif' alt='Send email' Border='0'>";
}
?>

fra tråden ; http://www.eksperten.dk/spm/462218 - ved ikke om det kan hjælpe
Avatar billede danic Nybegynder
28. marts 2004 - 11:29 #3
Ok, kan du hjælpe mig med at sende javascript data over i en iframe, da jeg ikke har prøvet at lave en iframe før?

Jeg går ud fra at jeg skal have variablen til at kalde en iframe:
onchange="skjult.location = 'updatedb.php?value'+document.textform.rte1.value;">
<iframe name="skjult" style="height:0px;width:0px;border:0px;"></iframe>



updatedb.php (iframen)skal så indeholde:

<?
opendb();
$sql = "UPDATE content SET text1=$_GET['value'] WHERE menuid = '$menuid'";   
  if (!mysql_query($sql)) {
  msgbox("Database fejl under processen, prøv igen!");
  closedb(); }
  closedb();
}
?>

???
Avatar billede espersen Novice
28. marts 2004 - 11:35 #4
hhmm.. Jeg er nok for grøn i det med PHP/JavaScript til at kunne gennemskue den.. desværre..

se evt. http://www.eksperten.dk/spm/441390 (der fik jeg kanon god hjælp)
Avatar billede espersen Novice
28. marts 2004 - 11:41 #5
en søgning her på EXP giver da lidt at se igennem (ved ikke om du har checket tidl. tråde..)
http://www.eksperten.dk/list.phtml?method=and&excerpt_on=1&find=php+javascript
Avatar billede danic Nybegynder
28. marts 2004 - 12:02 #6
Siden må gerne reloade, er det så nødvendigt med iframe?
Avatar billede roenving Novice
28. marts 2004 - 12:20 #7
Næh, så submitter du bare formen med text-feltet og aflæser den i dit php-script !-)

-- men det kan også gøres ved at submitte indholdet ved at have den form, som submittes i en iframe, som er skjult, og så vil brugeren ikke opleve at siden reloader ...
Avatar billede danic Nybegynder
28. marts 2004 - 12:26 #8
roenving> hvordan skal variabele skrives så sendes over(document.textform.rte1.value) således at jeg kan hente den med $_GET fra den anden fil?
Avatar billede roenving Novice
28. marts 2004 - 12:41 #9
window.IFRAMENAVN.document.FORMNAVN.FELTNAVN.value=document.textform.rte1.value
Avatar billede danic Nybegynder
28. marts 2004 - 12:50 #10
roenving> hvordan $_GET 'er jeg den så i min iframe således at jeg kan bruge den i min mysql query?
Avatar billede roenving Novice
28. marts 2004 - 12:59 #11
I din iframe skal du loade et helt html-dokument, så i det dokument sætter du en hel form med ...

Iframen laver du bare som:

<iframe src="minActionside.php" name="IFRAMENAVN" style="display:none;"></iframe>

-- og så kunne minActionside.php se sådan ud:

<html>
<head><title></title></head>
<body>
<form name="FORMNAVN" action="ditScript.php">
<input type="text" name="FELTNAVN">
</form>
</body>
</html>

Og så kan du f.eks. i det script, som udfylder teksten:

window.IFRAMENAVN.document.FORMNAVN.FELTNAVN.value=document.textform.rte1.value;
window.IFRAMENAVN.document.FORMNAVN.submit();
Avatar billede danic Nybegynder
28. marts 2004 - 14:14 #12
Skal det sendes over ti en form??? kan jeg ikke bare droppe formen og kører koden?

<html>
<head><title></title></head>
<body>

<?php
$contenttext = $_GET['textcontent'];
$sql = "UPDATE content SET text1='$contenttext' WHERE menuid = '$menuid'";
  if (!mysql_query($sql)) {
    msgbox("Database fejl under processen, prøv igen!");
    closedb();
    }
  closedb();
?>
</body>
</html>

Jeg har både prøvet med og uden form i iframen uden held.

window.updatedb.document.textcontent.value=document.textform.rte1.value;
window.updatedb.document.submit();
<iframe src="text_iframe.php" name="updatedb" style="display:none;"></iframe>
Avatar billede roenving Novice
28. marts 2004 - 14:23 #13
Man kan kun submitte en form !-)

Så du kan ikke udelade formen !o]

Men f.eks. sætte filen sammen sådan:

<?php
$contenttext = $_GET['textcontent'];
if($contenttext!=""){
$sql = "UPDATE content SET text1='$contenttext' WHERE menuid = '$menuid'";
  if (!mysql_query($sql)) {
    msgbox("Database fejl under processen, prøv igen!");
    closedb();
    }
  closedb();
}
?>

<html>
<head><title></title></head>
<body>
<form name="form1" action="ditScript.php">
<input type="text" name="textcontent">
</form>
</body>
</html>

-- og du skal selvfølgelig bemærke at iframe-definitionen ikke må stå i dit javascript ...

window.updatedb.document.form1.textcontent.value=document.textform.rte1.value;
window.updatedb.document.form1.submit();
Avatar billede danic Nybegynder
28. marts 2004 - 14:39 #14
Det vil sige jeg både har formen på hovedsiden (der hvor javascriptet ligger) og så har jeg nummer 2 form i iframe filen?
Avatar billede roenving Novice
28. marts 2004 - 14:47 #15
Ja, hvis du skal overføre data, kan det kun gøres med en submit af en form, men så længe det sker fra en skjult iframe, vil det ikke påvirke resten af siden !-)

Alternativet er jo, at du simpelthen submitter dokumentet ...
Avatar billede danic Nybegynder
28. marts 2004 - 14:58 #16
Du kan se hele koden her:

<? include($_SERVER["DOCUMENT_ROOT"] . "/admin/security.php"); ?>
           
<script language="JavaScript" type="text/javascript" src="/admin/rte/richtext.js"></script>

<?
function RTESafe($strText) {
    //returns safe code for preloading in the RTE
    $tmpString = trim($strText);
   
    //convert all types of single quotes
    $tmpString = str_replace(chr(145), chr(39), $tmpString);
    $tmpString = str_replace(chr(146), chr(39), $tmpString);
    $tmpString = str_replace("'", "&#39;", $tmpString);
   
    //convert all types of double quotes
    $tmpString = str_replace(chr(147), chr(34), $tmpString);
    $tmpString = str_replace(chr(148), chr(34), $tmpString);
//    $tmpString = str_replace("\"", "\"", $tmpString);
   
    //replace carriage returns & line feeds
    $tmpString = str_replace(chr(10), " ", $tmpString);
    $tmpString = str_replace(chr(13), " ", $tmpString);
   
    return $tmpString;
}
?>

   
<script language="JavaScript" type="text/javascript">
function submitForm()
{
    //make sure hidden and iframe values are in sync before submitting form
    //to sync only 1 rte, use updateRTE(rte) to sync all rtes, use updateRTEs
    //updateRTE('rte1');
    updateRTEs();
    // alert(document.textform.rte1.value);
    window.updatedb.document.form1.textcontent.value=document.textform.rte1.value;
    window.updatedb.document.form1.submit();

    return true;
}
</script>

<iframe src="/admin/content/text_iframe.php" name="updatedb" style="display:none;"></iframe>


<form  name="textform" target="_self" onsubmit="return submitForm();" method="post" action="<?php echo $_SERVER['PHP_SELF?attach=design']; ?>">
<script language="JavaScript" type="text/javascript">
<?
$content = "$contentrow[text1]";
$content = RTESafe($content);
?>
//Usage: initRTE(imagesPath, includesPath, cssFile)
initRTE("images/", "", "");

//Usage: writeRichText(fieldname, html, width, height, buttons)
writeRichText('rte1', '<?=$content?>', 520, 200, true, false);

</script>

<p><input type="submit" name="submit" value="Gem"></p>
</form>

Men jeg forstår stadig ikke hvorfor jeg ikke kan gemme data i min database når der klikkes submit:

// Jeg har data i mit javascript, omsæt til php variabel
thedata.value=document.textform.rte1.value;

// nu hvor jeg har en phpvariabel
<?
$contenttext = $_GET['thedata'];
$sql = "UPDATE content SET text1='$contenttext' WHERE menuid = '$menuid'";
?>
// back to javascript
return true;
}
</script>


???
Avatar billede olebole Juniormester
28. marts 2004 - 15:03 #17
<ole>

Jeg har ikke helt overblik over, hvad det er for værdier, du vil sende - men vær lige opmærksom på, du ikke kan sende e-mail-adresser med method="get" - eller i en URL  ;o)

Derudover kan jeg ikke se årsagen til at splitte 'mailto' i dit script:
  onmouseover="this.href='mai' + 'lto:' ... osv

Du burde blot kunne skrive:
  onmouseover="this.href='mailto:' ... osv

/mvh
</bole>
Avatar billede olebole Juniormester
28. marts 2004 - 15:04 #18
Oooops ... der kom mere kode, mens jeg skrev  :)
Avatar billede danic Nybegynder
28. marts 2004 - 19:19 #19
svaret var meget enkelt, jeg skulle hverken bruge iframes eller andet, blot hente $_POST['rte1'] som svar submittet i den første form.

<?
if (isset($_POST['rte1']))
{
    opendb();
    $sql2 = "UPDATE content SET text1='" . $_POST['rte1'] . "' WHERE menuid = '$menuid'";
    if (!mysql_query($sql2)) {
        msgbox("Database fejl under processen, prøv igen!");
        closedb();
    }
    msgandlink("Du har nu ændret på siden!", "http://www.blabla.dk");
    closedb();
}
?>
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