Tack för era bådas kommentarer!
Såhär ligger det till:
Gregoff: Jag har för mycket kod i test.php för att vilja skriva ut allt. Men jag vet att detta fungerar, eftersom att jag har gjort precis som Jonas skrev.
Jonas: Jag har gjort precis som du skrev tidigare, så jag vet att det är mycket enklare.
Problemet och skälet varför jag vill använda mig av ajax är för att det tar för lång tid att ladda upp produkterna, vilket gör att, på vissa webbhotell (city network), så får jag en 505 error. (jag får inte det på binero).
Jag kan visa hur jag har gjort tidigare:
PHP-kod:
<?php include('includes/header.php');
if (checkAccess() == false) {header("Location: login.php");}; /* om man är inte inloggad */
?>
<div id="admin-menu">
<div id="menu">
<ul>
<li class="hem"><a href="/admin/">Hem</a></li>
<li class="produkter current"><a href="produkter.php">Produkter</a></li>
<li class="reklam"><a href="ads.php">Reklam</a></li>
<li class="sidor"><a href="sidor.php">Sidor</a></li>
</ul>
</div><!-- menu -->
<div class="clear"></div>
</div>
<?php
if (isset($_POST['submit'])) { // när man klickar på OK knappen
if (!empty($_FILES["file"]["name"])) {
if (!empty($_POST['store'])) {
$allowedExts = array("xml");
$array = explode(".", $_FILES["file"]["name"]);
$extension = $array['1'];
if (($_FILES["file"]["type"] == "text/xml") && in_array($extension, $allowedExts)) {
if ($_FILES["file"]["error"] <= 0) {
$filed_store = $_POST['store']; // Hämtar datan ur radio-knapparna
if ($filed_store == "nelly") { // om man valt nelly
include('xml_upload_nelly.php');
} elseif ($filed_store == "ellos") { // om man valt ellos
include('xml_upload_ellos.php');
} else {$message = "Det verkar som om du har valt <strong>fel butik till xml filen</strong>. Kontrollera en extra gång så att xml filen tillhör " . $filed_store . ".";};
} else { $message = "Error: " . $_FILES["file"]["error"]; };
} else { $message = "Det verkar som om filen du försöker använda inte är en xml fil."; };
} else { $message = "Du måste välja någon av de ovanstående butikerna."; };// om någon av radio knapparna är ifyllda
} else { $message = "Du måste välja en xml fil att ladda upp."; };
};
?>
<div class="clear"></div>
<h2>Lägg till en XML-produktlista</h2>
<div id="progress"></div>
<form action="" method="post" enctype="multipart/form-data" id="xml_form">
<label for="file" id="for_file">Välj xml fil</label> <span id="label_for"></span> <input type="file" name="file" id="file" />
<div class="clear"></div>
<div class="clear"></div>
<div id="xml_stores">
<div class="xml_box"><input type="radio" name="store" value="nelly" class="xml_store" /> <span>Nelly</span></div>
<div class="xml_box"><input type="radio" name="store" value="ellos" class="xml_store" /> <span>Ellos</span></div>
<div class="clear"></div>
</div>
<input type="submit" name="submit" value="Ladda upp" id="submit_xml" /> <?php if (isset($message)) {echo "<div class=\"xml_message\">" . $message . "</div>";}; ?>
</form>
<div class="clear"></div>
<?php include('includes/footer.php'); ?>
xml_upload_nelly.php
PHP-kod:
<?php
$xml_file = $_FILES["file"]["tmp_name"];
$xml = simplexml_load_file($xml_file);
$query = "UPDATE products SET fresh = 0";
$update = mysql_query($query);
foreach($xml->product as $product){
set_time_limit(0);
$categori = $product->fields->productGroup;
$gender = $product->fields->gender;
if (empty($categori) || !isset($categori)) {$categori = "-";};
if (
$gender == "Kille" ||
$gender == "Tjej" ||
$gender == "Unisex" ||
$gender == "Mamma") {} // om $gender innehåller "kille, tjej, unisex eller mamma", gör inget
elseif ($categori == "Baddräkter" ||
$categori == "Bikinis" ||
$categori == "Blusar & skjortor" ||
$categori == "Byxor" ||
$categori == "Byxor & shorts" ||
$categori == "Festklänningar" ||
$categori == "Jackor" ||
$categori == "Jeans" ||
$categori == "Jumpsuit" ||
$categori == "Kjolar" ||
$categori == "Klänningar" ||
$categori == "Leggings" ||
$categori == "Linnen" ||
$categori == "Shorts" ||
$categori == "Sport bh" ||
$categori == "Strandplagg" ||
$categori == "T-shirts" ||
$categori == "Toppar" ||
$categori == "Tröjor" ||
$categori == "-") // om $categori innehåller "något av ovanstående", gör inget
{
if ($product->fields->sale == "true") {
$img = mysql_real_escape_string($product->fields->extraImageProductLarge);
$title = mysql_real_escape_string($product->name); if ($title == "") {$title = "-";};
$brand = mysql_real_escape_string($product->brand); if ($brand == "") {$brand = "-";};
$store = "Nelly";
$price = mysql_real_escape_string($product->price); if ($price == "") {$price = "-";};
$url = mysql_real_escape_string($product->productUrl);
$category = mysql_real_escape_string($categori); if ($category == "") {$category = "-";};
$gender = mysql_real_escape_string($product->fields->gender); if ($gender == "") {$gender = "-";};
$info = mysql_real_escape_string($product->description); if ($info == "") {$info = "-";};
$xml_url = $product->advertiserProductUrl;
$new_xml_url_without = substr($xml_url, 7);
$new_xml_url = urlencode($new_xml_url_without);
$delete_url = array("%2F");
$replace_url = array("/");
$new_url_function = str_replace($delete_url, $replace_url, $new_xml_url);
$advertiserProductUrl = "http://" . $new_url_function;
$query = "INSERT INTO products (img, title, brand, store, price, url, category, gender, visible, info, advertiserProductUrl, fresh, new) VALUES ";
$query .= "('$img', '$title', '$brand', '$store', $price, '$url', '$category', '$gender', 1, '$info', '$advertiserProductUrl', 1, 1) ";
$query .= "ON DUPLICATE KEY UPDATE fresh = 1";
$insert = mysql_query($query) or die (mysql_error());
};
};
};
$query = "SELECT id, advertiserProductUrl FROM products WHERE `new` = 1";
$select = mysql_query($query) or die(mysql_error());
while ($result = mysql_fetch_array($select)) {
set_time_limit(0);
$url = $result['advertiserProductUrl'];
$id = $result['id'];
$org_price = getOrgPrice($url);
if (!empty($org_price)) {
$query = "UPDATE `products` SET `org_price`=$org_price,`new`=0 WHERE id = $id";
$insert = mysql_query($query) or die (mysql_error());
};
};
$query = "DELETE FROM products WHERE fresh = 0";
$delete = mysql_query($query) or die(mysql_error());
$message = "<strong>Super!</strong> Allt fungerade som det skulle, och databasen är nu uppdaterad med nya produkter från <strong>". $filed_store . "</strong>.";
?>
Detta fungerar kanon, bara att det tar för lång tid. Ibland så överstiger webbläsarens minne, och man får börja om (göra en refresh och skicka med den datan man valt i formuläret igen).
Ibland så tar det för lång tid, så att man får 505 error (händer bara på city network).
Så det jag strävade efter egentligen, var att hitta ett sätt där uppladdningen (xml_upload_nelly.php) sköts bakom stängda dörrar, så att webbläsaren slipper jobba medans koden körs.
Förstod ni?
PS. test.php innehöll samma kod som xml_upload_nelly.php innehåller, förutom att $xml_file = $_FILES["file"]["tmp_name"]; byttes ut mot $path = $_POST['path'];