Jump to content



Πως να περάσω μία γνωστή τιμή μαζί και με άλλες επιλογές μέσω φόρμας;


l2phile

Recommended Posts

Δημοσιεύτηκε

Παίδες την βοήθεια σας.

Φτιάχνω μία ιστοσελίδα που θα γίνεται reviewing άρθρων. Θέλω λοιπόν σε μία σελίδα να αντιστοιχίζω τα άρθρα και τους reviewers που μπορούν να τα κρίνουν βάση της υποκατηγορίας τους.

(text)article_name - (list)Reviewer1 - (list)Reviewer2 - (list)Reviewer3

....

....

(text)article_name - (list)Reviewer1 - (list)Reviewer2 - (list)Reviewer3

Τους κριτές τους περνάω με <select> και <option value>. Αλλά το article_id πως; Ειναι γνωστό, δεν το βάζω εκείνη την στιγμή.

τι εννοεις ακριβως..? αφου ξερεις την τιμη της παραμετρου θα την επιστρεψεις σαν php argument με ενα απλο http post η με ajax request και θα το επεξεργαστεις μετα απο την πλευρα του server με php...

Κάπως έτσι;

echo "<tr><td>{$line['subject']}</td>"; (Θέλω να δείχνει το θέμα)

echo "<input id=\"articleID\" type=\"hidden\" value=\"{$line['article_id']}\"></td>";

και

var artID = document.getElementById('articleID').value;

var queryString = "?artID=" + articleID;

ajaxRequest.open("GET", "revart.php" + queryString, true);

ajaxRequest.send(null);

Λοιπόν στην javascript χρειάζεσαι το εξής



function getHTTPObject(){ //δημιουργεί ένα Άζαξ object για τα τζάμια
if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
else if (window.XMLHttpRequest) return new XMLHttpRequest();
else {
alert("Your browser does not support AJAX.");
return null;
}
}

function GetResponse(){ //απλά κάνει trap το event βλέπει τι είναι και καλεί μια callback function
if(httpObject.readyState == 4){
server_response = httpObject.responseText;
HandleIncomingData(server_response); //callback
}
}

function AbortHttpObj() {
httpObject.abort();
httpObject = null;
}

function HandleIncomingData(data) { //callback function
//Ο κώδικάς σου εδώ, όπου χειρίζεσαι τα data, τα οποία έχουν έρθει από τον server
//
//
//

AbortHttpObj();
}

function SendReqToServer(req) { //Με αυτό κάνεις azax requests
httpObject = getHTTPObject();
if ( httpObject != null ) {
var data = document.getElementById('httpData'); /* παίρνεις κάποιο string από ένα object
της φόρμας σου που λέγεται httpData */
httpObject.open("GET", "answermeplease.php?data=" + data, true);`//κάνεις ένα http GET
}
}

και στην php σε ένα αρχείο στο server που λέγεται answermeplease.php και βρίσκεται στο ίδιο web directory με το html/php το οποίο έχει φορτώσει το απο πάνω javascript


<?php

if (isset($_GET["data"])) {
$data = $_GET["data"];
}else {
echo "FAIL!";
exit(0);
}

$response = "";

if ($data === "ta dedomena pou perimeneis na breis") {
//Κάνεις ότι θες με τα δεδομένα
//
//
$response = "ότι θες να στείλεις πίσω σαν απάντηση";
}
else {
//Χειρίζεσαι τα λάθη σου
//
//
$response = "ότι θες να στείλεις πίσω σαν σφάλμα";
}

echo $response;

clearstatcache(); //αυτό να το καλείς πάντα και ας μην χρειάζεται

?>

Αυτά... αν θες να δεις περισσότερα θα σου πρότεινα να έριχνες μια ματιά στον κώδικα του web interface για το myrapbook, στο οποίο τα χρησιμοποιώ συνέχεια μαζί με sockets κτλ...

Δηλαδή στο παράδειγμα μου αν στείλω τις 4 μεταβλητές (articleID + 3reviewers) που θέλω στο answermeplease.php, μπορώ μετά από εκεί να τις καταχωρήσω στη βάση, χωρίς να αλλάξει η αρχική σελίδα;

Το θελω αυτό για να περνάω όποιο άρθρο θέλω με την σειρά που θέλω και να μην με πετάει σε άλλη σελίδα για καταχώρηση.

Για την ώρα το έκανα με post, αλλά δεν είναι το ιδανικό.

Επίσης θέλω να βρω πως να δείχνει στα <option value> των reviewers τις παλιές επιλογές που έχουν γίνει.

Η σελίδα είναι κάπως έτσι:

41368d1288635142-pws-na-perasw-mia-gnwsti-timi-mazi-clipboard03.jpg

post-8837-1416074663,8396_thumb.jpg

Δηλαδή στο παράδειγμα μου αν στείλω τις 4 μεταβλητές (articleID + 3reviewers) που θέλω στο answermeplease.php, μπορώ μετά από εκεί να τις καταχωρήσω στη βάση, χωρίς να αλλάξει η αρχική σελίδα; Το θελω αυτό για να περνάω όποιο άρθρο θέλω με την σειρά που θέλω και να μην με πετάει σε άλλη σελίδα για καταχώρηση.

Αυτό κάνει το azax, δουλεύει στο background και δεν σου αλλάζει η αρχική σελίδα... επίσης μέσα από το answermeplease.php και με την προυπόθεση ότι έχεις εγκατεστημένο το module της mysql για php, θα κάνεις όλα τα queries που θες για να σώζεις ή να τραβάς δεδομένα...

Επίσης θέλω να βρω πως να δείχνει στα <option value> των reviewers τις παλιές επιλογές που έχουν γίνει.

Μέσα στο callback θα κάνεις buffer την λίστα σου (αν δεν θες να είναι στο global scope του κώδικά σου) και θα την ξαναδημιουργείς με τα νέα δεδομένα...

μια σημείωση μόνο

αν για τις ίδιες παραμέτρους που θα περνάς μεσα από το ajax (πχ responder.php?foo=bar) παίρνεις διαφορετικά αποτελέσματα (γιατί κάτι άλλαξε στην βάση πχ)

τότε μην κάνεις GET αλλά κάνε POST, ειδικά αν θέλεις να δουλεύει σωστά η εφαρμογή σου σε ΙΕ.

Στη φόρμα βάζω event -> onsubmit="SendReqToServer();" σωστά;

Και ο κώδικας είναι κάπως έτσι:

function SendReqToServer(req) {    //Με αυτό κάνεις azax requests
httpObject = getHTTPObject();
if ( httpObject != null ) {
var artID = document.getElementById('articleID');
var reviewer1 = document.getElementById('rev1');
var reviewer2 = document.getElementById('rev2');
var reviewer3 = document.getElementById('rev3');
httpObject.open("GET", "revart1.php?artiID=" + artID + "reviewer1=" + reviewer1 + "reviewer2=" + reviewer2 + "reviewer3=" + reviewer3, true);`
}

Δεν δουλεύει.

Με το submit πάντως εμφανίζονται κανονικά στην μπάρα τα δεδομένα

attachment.php?attachmentid=41389&stc=1&d=1288756197

αλλά με το script δεν γίνεται τίποτα. Γενικά πάντως θα χρειαστεί να βάλω POST γιατί δεν λέει και πολύ να φαίνονται τα δεδομένα.

post-8837-1416074666,742_thumb.jpg

httpObject.open("GET", "revart1.php?artiID=" + artID + "&reviewer1=" + reviewer1 + "&reviewer2=" + reviewer2 + "&reviewer3=" + reviewer3, true);`

Αν έχεις πρόβλημα με την cache είτε του server είτε του browser, τότε πρέπει να προσθέσεις στο τέλος σαν php argument και έναν random αριθμό ή κάποιο timestamp, το οποίο μπορείς να το αγνοείς από την πλευρά του server ή να το κρατάς σαν reference ή να το χρησιμοποιείς για ασφάλεια και anti-spam...

Archived

This topic is now archived and is closed to further replies.

×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.