Problema if elseif o foreach.. o non capisco cosa non funzioni..

otto9due

Utente Attivo
22 Feb 2014
591
25
28
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?

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:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
elseif non else if
da manuale php

PHP:
<?php

/* Incorrect Method: */
if($a > $b):
    echo $a." is greater than ".$b;
else if($a == $b): // Will not compile.
    echo "The above line causes a parse error.";
endif;


/* Correct Method: */
if($a > $b):
    echo $a." is greater than ".$b;
elseif($a == $b): // Note the combination of the words.
    echo $a." equals ".$b;
else:
    echo $a." is neither greater than or equal to ".$b;
endif;

?>
 

otto9due

Utente Attivo
22 Feb 2014
591
25
28
Pardon quella era l'ultima prova che ho dimenticato di eliminare prima di postare il codice ..
Li ho provati entrambi, per sicurezza sono andato a controllare anche io sul manuale cartaceo e dice questo, lo scrivo potrebbe servire anche ad altri..

la struttura corretta è come dici tu elseif ma c'è una nota sotto (per questo ho provato.. :p)
Anziché elseif, è prassi comune degli sviluppatori PHP usare la notazione else if tipica del C

Comunque ho fatto partire una prova dopo la modifica.. aspetto l'esito..

Sto notando ora che hai utilizzato i : questo secondo costrutto.. Che differenza c'è?
Dovrebbe essere, come per il foreach solo un secondo modo di scrivere la cosa.. giusto?
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
è un tipo di notazione, io uso questa, mi trovo meglio con le {}
PHP:
<?php
if($a > $b){
    echo $a." is greater than ".$b;}
elseif($a == $b){ // Note the combination of the words.
    echo $a." equals ".$b;}
else{
    echo $a." is neither greater than or equal to ".$b;}
?>
comunque sono analoghe
 

otto9due

Utente Attivo
22 Feb 2014
591
25
28
Ho ottenuto risultati migliori facendo in questo modo..
PHP:
 /* 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.. */  						
				
						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ò */ 
						if(!preg_match('/\d+/', $sped3p) AND !preg_match('/Spedizione/i', $spedizione_new) AND !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', 'ND');
								$s->execute();
							  }
							  catch (PDOException $e)
							  {
								$error = 'Error updating submitted author.';
								include '../db/ERRORDB/outputpage.php';
								exit();
							  }	
							
						} /* Chiudo IF sped GRATIS */

Ma ancora qualcuno lo sbaglia.. non capisco perchè..
 
Discussioni simili
Autore Titolo Forum Risposte Data
C [PHP] Problema Invio Email Elseif PHP 2
I Sto progettando nuovi siti utilizzando bootstrap e devo dire funziona bene, l'unico problema e la maschera -moz- HTML e CSS 0
K Problema form update PHP 2
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
S Problema nel ciclare un json Javascript 0
G Problema con Xampp Web Server 1
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
K Problema Inner join PHP 1
F firefox problema http Linux e Software 0
N Problema con position absolute e overflow HTML e CSS 4
E Problema jquery Success jQuery 2
L Problema con inner join PHP 11
K [php] Problema con inner join PHP 4
E problema selezione sfumata Photoshop 2
K [PHP] Problema con variabili concatenate. PHP 1
A Problema filtro fluidifica Photoshop Photoshop 1
H Problema Bordi Scontorno Photoshop 1
O problema con query PHP 4
R Problema installazione Realtek WiFi USB rtl8821 Reti LAN e Wireless 1
I problema con 2 account Posta Elettronica 1
L problema collegamento file css con html HTML e CSS 1
Y Problema percorso file in rete PHP 1
N Problema SEO "L'URL non si trova su Google" SEO e Posizionamento 4
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
P Problema acquisizione clienti Webdesign e Grafica 1
F NetBeans problema creazione progetto Java Windows e Software 0
M Problema con Try Catch PHP 0
C problema seo + cerco esperto SEO e Posizionamento 11
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
T PROBLEMA CON SESSIONI PHP 3
A Problema, non so, di scale() o transform, oppure altro? HTML e CSS 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
R problema con else PHP 0
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
I PROBLEMA: Sostituzione sito XAMPP E-Commerce 0
T problema data 30/11/-1 PHP 0
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Y Problema incolonnamento tabella PHP 7
S problema salvataggio immagini Photoshop 0
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
M Problema con controllo form in real time jQuery 6
D problema php mysql PHP 1

Discussioni simili