Newsgroup: it.comp.www.php
Titolo: confronto array e tabella

Ciao a tutti.
Sto sbattendo la testa su una stupidata, ma non ne vengo a capo :(
Praticamente devo confrontare i dati che arrivano da un array con quelli 
letti da una tabella ed agire di conseguenza.
$query_2="SELECT * FROM marche_negozio WHERE ID_negozio=".$ID_negozio;	 
$safe_query = mysql_query($query_2, $link);				$num_marche_negozio = 
mysql_num_rows($safe_query);			
for($z=1; $z<=$num_marche_negozio; $z++){
    $marca_negozio=mysql_fetch_row($safe_query);
    echo '<font color=green>Marca Esistente '.$marca_negozio[1];
    echo '</font><br>';
 
    asort($_POST['id']);
    foreach ($_POST['id'] as $key => $value){
										     $ID_marca = $value;
      echo '<font color=red>Marca Selezionata '.$ID_marca;
      echo '</font><br>';
    }
 
}
Praticamente se la marca esiste nell'array ma non nella tabella devo 
inserirla, se esiste nell'array e nella tabella non faccio nulla, se 
esiste nella tabella ma non nell'array devo eliminarla.
Soluzioni??
Grazie in anticipo.
	MAX

 MAX
Costruisciti i due array da confrontare e poi usi 
http://it2.php.net/manual/en/function.array-diff.php
Ciao
-- 
Danilo Bottone
danilo...@gmail.com
www.danilobottone.com
 (.it) 

 Soluzioni??
4kb di codice
ovviamente lo devi adattare, io ho usato una cosa del genere per verificare
meno l'esistenza di alcuni file
se il file non esiste cancella il nome dalla tabella
se il file esiste e non e' in tabella lo aggiunge
se c'e e c'e in tabella non fa un tubo
io lo ho risolto a livello di codice, non solo me ti dice anche (solo una
volta, che cosa e' successo)
al refresh non fa piu nulla
la tabella _DEVE_ contenere
id(int11 unique), id_negozio, id_marca (id_negozio, id_marca ) indice
univoco
l'altra
ma(int11 unique), nome_della_marca .............(ovvio vuoi riscriverle ogno
volta?)
questo e' per avere anche la certezza che 11 sia identico a 11 dall'altra
parte perche
INTEL e' diverso da Intel
il codice, ovviamente e' gpl te lo dico prima, questa e' la modifica se non
usi la classe
presente in phpbb
$result = $db->sql_query($sql);
=>
$result = mysql_query($sql,$link)
=>
$row = $db->sql_numrows($result);
=>
$row = mysql_numrows($sql,$link)
$row = $db->sql_fetchrow($result)) {
=>
$row = sql_fetcharray($result)) {
altra cosa  _MAIUSCOLO sono dei define dei messaggi che da
<div id="divpagin">
<div class="titolo">
  <span class="titoli"><? echo _INST_MODULE_MODULE; ?><br />
<?
if(!empty($st['mod'])){  echo $st['mod']; }else{ echo _ADMIN_MOD_SATO; }
?>
</span>
</div>
<?
$dir="admin/blocks";
$blocksdir = dir($dir); // qui il tuo post
 while($func=$blocksdir->read()){
     if(substr($func, 0, 5) == "menu-") {
   $module[] = $func;
     }
}
closedir($blocksdir->handle);
$sql = "SELECT * FROM ".$table['appl']."block_master;";
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) {
if (file_exists($dir."/".$row['ma_nomeblok']."/shmen.php")){
$mod["".$row['ma_nomeblok'].""] = _INST_MODULE_ESIST;
}
if (!file_exists($dir."/".$row['ma_nomeblok']."/shmen.php")){
     $sql = "DELETE FROM ".$table['appl']."block_master WHERE
ma_nomeblok='".$row['ma_nomeblok']."';";
     $db->sql_query($sql);
     $mod["".$row['ma_nomeblok'].""] = _INST_MODULE_REMOVED;
}
}
for ($i=0; $i<count($module); $i++){
$sql = "SELECT * FROM ".$table['appl']."block_master WHERE
ma_nomeblok='".$module[$i]."';";
$result = $db->sql_query($sql);
$row = $db->sql_numrows($result);
if ($row == 0){
if (file_exists($dir."/".$module[$i]."/shmen.php")){
$sql = "INSERT ".$table['appl']."block_master SET
ma_nomeblok='".$module[$i]."', ma_abilitat='0'";
$result = $db->sql_query($sql);
$mod["".$module[$i].""] = _INST_MODULE_INSERT;
                    }
      }
}
?>
<table class="tbdata">
 <tr class="trhdata">
  <td colspan="2" class="tddati"><? echo _INST_MODULE_NOME; ?></td>
  <td colspan="2" class="tddati"><? echo _INST_MODULE_STATUS; ?></td>
  <td colspan="4" class="tddati"><? echo _INST_MODULE_CHANGE; ?></td>
 </tr>
<?
$i=0;
while (list ($key, $val) = each ($mod)) {
$sql = "SELECT * FROM ".$table['appl']."block_master WHERE
ma_nomeblok='".$key."';";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$i++;
if ($i % 2){
$cl="trpai";
}else {
$cl="trdis";
}
?>
 <tr class="<? echo $cl; ?>">
  <td rowspan="2" class="tdlogo">
  <?="<a href=\"".$_SERVER['PHP_SELF']."?adm=".$key."\">
  <img
src=\"gui/".$appl['GUIS']."/".$appl['STIL']."/img/".$key."/48x48/".$key.".pn
g\" alt=\"".$key."\" title=\"".$key."\" /></a>"; ?>
  </td>
  <td class="tddati"><? echo $key; ?></td><td class="tddati"><? echo
$row['ma_abilitat']; ?></td>
  <td class="tddati"><a href="<? echo
$_SERVER['PHP_SELF']."?adm=".$mo[0]."&amp;sub=3&amp;idm=".$row['MA'];?>"><?
echo _INST_MODULE_ENABEMOD; ?></a></td>
  <td class="tddati"><a href="<? echo
$_SERVER['PHP_SELF']."?adm=".$mo[0]."&amp;sub=4&amp;idm=".$row['MA'];?>"><?
echo _INST_MODULE_DISABLEMOD; ?></a></td>
  <td class="tddati"><a href="<? echo
$_SERVER['PHP_SELF']."?adm=".$mo[0]."&amp;sub=9&amp;idm=".$row['MA'];?>"><?
echo _INST_MODULE_CONF; ?></a></td>
 </tr>
 <tr class="<? echo $cl; ?>">
  <td class="tddati"><? echo $val; ?></td><td class="tddati"><? echo
$row['ma_installe'] ; ?></td>
  <td class="tddati"><a href="<? echo
$_SERVER['PHP_SELF']."?adm=".$mo[0]."&amp;sub=5&amp;idm=".$row['MA'];?>"><?
echo _INST_MODULE_INSTALLA; ?></a></td>
  <td class="tddati"><a href="<? echo
$_SERVER['PHP_SELF']."?adm=".$mo[0]."&amp;sub=7&amp;idm=".$row['MA'];?>"><?
echo _INST_MODULE_UNINSTALLA; ?></a></td>
  <td class="tddati"><a href="<? echo
$_SERVER['PHP_SELF']."?adm=".$mo[0]."&amp;sub=6&amp;idm=".$row['MA'];?>"><?
echo _INST_MODULE_UPDATE; ?></a></td>
</tr>
<? } ?>
</table>
<br/>
</div>

 volta?)
Ma perche' hai messo gli id??
Alla prossima.
         MAX
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 
http://it2.php.net/manual/en/function.array-diff.php
Grazie per la dritta, ma array-diff mi ritorna solo le differenze.
Devo fare il confronto ed agire di conseguenza.



Supponendo che tu hai $arr1 e $arr2 da confrontare e che i due sono fatti da 
coppie "chiave_numerica"=>"valore", potresti:
Usare array_diff 2 volte invertendo i due array in modo da avere come 
risultati 2 array. Il primo dei risultati contiene cio' che manca ad $arr2 e 
viceversa l'altro.
A questo punto, se $arr1 rappresenta il db e $arr2 il post, con il primo 
risultato prosegui per l'eliminazione dalla tabella e con il secondo con le 
insert.


 ha scritto nel messaggio
news:629ebdf5186e85e7fef...@mygate.mailgate.org...

e' semplice:
se  vai a modificare il nome della marca con INTEL != intel ti perdi i dati
per strada
l'id e' piu sicuro, ovvio che se dietro hai innodb con l'integrita
referenziale te ne fotti
ho letto l'altro post su array_diff, e le altre funzioni sugli array,
pero non fanno la cosa
magari trovassi il modo di evitarmi quella pappardella ;-)
ci vuole una cosa che:
restituisca
['common'] = dati in tutti e 2 gli array
[piu0]=dati in piu nel primo
[meno0]=dati che non ci sono nel secondo
[piu1]=dati in piu nel secondo
[meno1]=dati che non ci sono nel primo
oviamente di un array semplice
$ar1 = array(1,2,3,7,88,888,9999);
$ar2 = array(2,3,444,7,88,888,999);
e che non tenga conto delle posizioni dei dati, o solo delle key


 
Sorry, qui andiamo ot ed entriamo nel campo dei database.
Cmq se marca = key univoca puoi cambiare tutte le volte che vuoi, mentre 
  con id+marca potresti avere 1->INTEL oppure 35->INTEL.
Pero' siamo ot.
Alla prossima.
	MAX

 Ciao
Bhe, tanto vale confrontare direttamente l'array con il post, ed e' 
quello che vorrei fare :(
Mi sa che sono nella regola del 90 e del 10.
Alla prossima.
	MAX

 ha scritto nel messaggio
news:cvt4h5$hd5$1...@newsreader.mailgate.org...

mi sa che riduco un po(tanto) di codice dalla procedura
<?
$file =
array("menu-login","menu-master","menu-current","menu-utente","menu-logout",
"menu-utente","menu-mucca");
$tabe =
array("menu-login","menu-master","menu-rubrica","menu-utente","menu-logout",
"menu-download");
$re['add'] = array_diff($file,$tabe);
$re['del'] = array_diff($tabe,$file);
$re['cur'] = array_intersect($tabe,$file);
echo "<pre>";
var_dump($re);
echo "</pre>";
?>
output:
array(3) {
  ["add"]=>
  array(2) {
    [2]=>
    string(12) "menu-current"
    [6]=>
    string(10) "menu-mucca"
  }
  ["del"]=>
  array(2) {
    [2]=>
    string(12) "menu-rubrica"
    [5]=>
    string(13) "menu-download"
  }
  ["cur"]=>
  array(4) {
    [0]=>
    string(10) "menu-login"
    [1]=>
    string(11) "menu-master"
    [3]=>
    string(11) "menu-utente"
    [4]=>
    string(11) "menu-logout"
  }
}
tnx si impara sempre qualcosa ;-)

 MAX
Forse non ho capito bene il problema allora, non volevi confrontare una 
"colonna" di una tua table mysql con il contenuto di un array ottenuto via 
POST?


 
Figurati, sempre a disposizione.
Cmq qui c'e' gente molto piu' preparata di me.
Alla prossima.
	MAX