Ho creato questo script che dovrebbe avere il compito di aggiornare un campo del mio db "spedizione" nel mio db in base al risultato del parsing fatto..
Ora il meccanismo è questo ( a parte i commenti nel codice ):
1 - Estraggo dal db i prodotti di cui voglio modificare il campo spedizione ( che inizialmente sono settati come ND )
2- Inizio un foreach che conterrà:
Visto che non so in quale punto si trova il valore che mi interessa.. lo cerco..
( questo è un punto che vorrei capire bene )
3- Cerco di trovare 3 valori:
1) il valore contenuto in uno <b> figlio di span ( che chiamaiamo span1 )
2) il valore contenuto in uno span ( che chiamaiamo span2 )
3) il valore contenuto in uno span ( che chiamaiamo sped3p )
4- Avendo questi valori ( sempre nel foreach ) parto con un if elseif else
( e qui chiedo se ho fatto bene )
5- in base alla condizione dovrebbe aggiornare i record..
Ora il problema è essenzialmente uno.. MI carica sempre GRATIS ( quindi il risultato del primo if )
O in alcuni casi in base anche ad altri cambiamenti e prove ( sono 3 giorni che ci sbatto la testa giorno e notte )
Il primo prezzo .. secondo voi dove sbaglio, non so più che provare??
Le variabili vengono riempite.. Quello che non capisco e se seguono i cicli.. cioè il mio intento è quello di proporre ad ogni ciclo un valore diverso da valutare.. è corretto?
Grazie a quanti prendereanno parte..
Ora il meccanismo è questo ( a parte i commenti nel codice ):
1 - Estraggo dal db i prodotti di cui voglio modificare il campo spedizione ( che inizialmente sono settati come ND )
2- Inizio un foreach che conterrà:
Visto che non so in quale punto si trova il valore che mi interessa.. lo cerco..
( questo è un punto che vorrei capire bene )
3- Cerco di trovare 3 valori:
1) il valore contenuto in uno <b> figlio di span ( che chiamaiamo span1 )
2) il valore contenuto in uno span ( che chiamaiamo span2 )
3) il valore contenuto in uno span ( che chiamaiamo sped3p )
4- Avendo questi valori ( sempre nel foreach ) parto con un if elseif else
( e qui chiedo se ho fatto bene )
5- in base alla condizione dovrebbe aggiornare i record..
Ora il problema è essenzialmente uno.. MI carica sempre GRATIS ( quindi il risultato del primo if )
O in alcuni casi in base anche ad altri cambiamenti e prove ( sono 3 giorni che ci sbatto la testa giorno e notte )
Il primo prezzo .. secondo voi dove sbaglio, non so più che provare??
Le variabili vengono riempite.. Quello che non capisco e se seguono i cicli.. cioè il mio intento è quello di proporre ad ogni ciclo un valore diverso da valutare.. è corretto?
PHP:
/* Estraggo link e spedizione dei prodotti del db dove la spedizione = 'ND' */
foreach ($prods as $prod) :
/* Parto col DOM alla ricerca della spedizione nella pag di dettaglio del prodotto */
$html = file_get_contents($prod['linkprod']);
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXpath($dom);
/* Rintraccio i diversi span che contengono la spedizione possono essere di due tipi.. */
/* Rintraccio span di primo tipo ed estraggo il valore.. */
$spans = $xpath->query('//span[@class="a-size-base a-color-base"]');
foreach($spans as $span) {
/* Estraggo valore contenuto tra i tag <b> */
$speds = $xpath->query('.//b', $span);
foreach ($speds as $sped) {
$spedizione_new = $sped->nodeValue;
}
} /* chiudo foreach (spans as span) */
/* Rintraccio stringa ed estraggo il valore di tipo span 2.. */
$spans2 = $xpath->query('//span[@class="a-color-base a-text-bold"]');
foreach($spans2 as $span2) {
$spedizione_new2 = $span2->nodeValue;
}//chiudo foreach
/* Fine Rintraccio i diversi span che contengono la spedizione.. */
/* Rintraccio costo spedizione terze parti.. */
$prezzo_sped3ps = $xpath->query('//span[@class="a-size-small a-color-secondary shipping3P"]');
foreach ($prezzo_sped3ps as $prezzo_sped3p) {
preg_match_all('/((\d{1,3}),(\d{2}))/', $prezzo_sped3p->nodeValue , $res3p );
$sped3p = $res3p[1][0].'€';
}
/* Fine costro di spedizione */
/* Controllo che il contenuto estratto sia = a spedizione gratuita
Aggiorno la spedizione al valore GRATIS se all'interno di spedizione/2 trovo la parola Spedizione.. */
if (preg_match('/Spedizione/i', $spedizione_new) OR preg_match('/Spedizione/i', $spedizione_new2)){
include '../db/connection.php';
try
{
$sql = 'UPDATE prodotti SET
spedizione = :spedizione
WHERE id = "'.$prod["id"].'"';
$s = $pdo->prepare($sql);
$s->bindValue(':spedizione', 'GRATIS');
$s->execute();
}
catch (PDOException $e)
{
$error = 'Error updating submitted author.';
include '../db/ERRORDB/outputpage.php';
exit();
}
/* Se non trovo la stringa precedente controllo che $sped3p contenga almeno un numero.. */
}else if (preg_match('/\d+/', $sped3p)) {
include '../db/connection.php';
try
{
$sql = 'UPDATE prodotti SET
spedizione = :spedizione
WHERE id = "'.$prod["id"].'"';
$s = $pdo->prepare($sql);
$s->bindValue(':spedizione', $sped3p);
$s->execute();
}
catch (PDOException $e)
{
$error = 'Error updating submitted author.';
include '../db/ERRORDB/outputpage.php';
exit();
}
/* In ultima istanza se non trovo nulla di tutto ciò */
}else{
include '../db/connection.php';
try
{
$sql = 'UPDATE prodotti SET
spedizione = :spedizione
WHERE id = "'.$prod["id"].'"';
$s = $pdo->prepare($sql);
$s->bindValue(':spedizione', 'ND');
$s->execute();
}
catch (PDOException $e)
{
$error = 'Error updating submitted author.';
include '../db/ERRORDB/outputpage.php';
exit();
}
} /* Chiudo IF sped GRATIS */
endforeach; /* chiudo foreach (prods as prod) */
Grazie a quanti prendereanno parte..
Ultima modifica: