Lo so che può sembrare una cosa più che stupida, ma cosa sbaglio qui?
devo eliminare dei record tramite checkboxCodice PHP:
foreach ($_POST['messaggi'] as $key => $m_id)
{
$query = mysql_query("delete from mp where id in ($cancella) ");
}
}
Lo so che può sembrare una cosa più che stupida, ma cosa sbaglio qui?
devo eliminare dei record tramite checkboxCodice PHP:
foreach ($_POST['messaggi'] as $key => $m_id)
{
$query = mysql_query("delete from mp where id in ($cancella) ");
}
}
$_POST["messaggi"] non è un array, ma un elemento preciso dell'array $_POST (che poi nello specifico è ben più di un array). Per usare foreach, invece, è necessario specificare come argomento un array. Per maggiori info ti rimando a: http://php.net/manual/en/control-structures.foreach.php
Scusa ma fancendo cosi,
non diventa un array? ovviamente tutto questa parte html è dentro un while...Codice PHP:
<input type=\"checkbox\" name=\"messaggi[]\" value=\"".$row['id']."\" />
Perchè non usi gli apici al posto di fare tutti quei backslash, avresti minimo la metà di caratteri in meno...
Vedendo $row['id'] suppongo quella stringa sia dentro un ciclo, quindi puoi fare così e sei sicuro:
Poi $cancella cosa è? Che senso ha fare quel foreach se al suo interno non utilizzi ne key ne value dell'array?Codice PHP:
echo '<input type="checkbox" name="messaggi[' . $row['id'] . ']" value="' . $row['id'] . '" />';
Forse sbaglio, ma credo si stia forzando la creazione di un array in modo erroneo. Ripeto, questo è un parere personale. Personalmente, però, posso dirti che tale genere di errore insorge solo quando hai "invalid arguments", come dice l'errore. Di fatto, l'unico argomento che gli passi è questa sorta di array. Non ho mai provato a forzare la creazione di un array tramite post, ma magari è possibile...
Io ti posso dire che funziona perchè lo faccio, è l'unico modo per fare un form con dei checkbox. Io uso un template engine che, scrivendo così, mi stampa:
Codice PHP:
$user->lang['STYLES'] = array('Stile non definito', 'Stile 1', 'Syile 2', 'Stile3');
foreach ($user->lang['STYLES'] as $i => $v)
{
# $i = equivale ad una key numerica
# $v = equivale al valore di ogni key
if ($i == 0)
{
continue;
}
$template->assign_block_vars('style', array(
'ID' => $i,
'NAME' => $v,
'CHECK' => (in_array($i, (!request_var('style', array(0))) ? explode('-', $row['band_style']) : request_var('style', array(0)))) ? 'checked="checked"' : '',
));
}
Che mi genererebbe:Codice HTML:<!-- BEGIN style --> <label> <input name="style[{style.ID}]" value="{style.ID}" type="checkbox" {style.CHECK} /><small>{style.NAME}</small> </label> <!-- END style -->
E con:Codice HTML:<label> <input name="style[1]" value="1" type="checkbox" /><small>Stile 1</small> </label> <label> <input name="style[2]" value="2" type="checkbox" /><small>Stile 1</small> </label> <label> <input name="style[3]" value="3" type="checkbox" /><small>Stile 1</small> </label>
creerebbe una stringa con tutti i valori separati da - che sono stati checkati.Codice PHP:
implode('-', request_var('style', array(0)));
Vabbè tutto questo ragionamento per cosa? Lui ha fatto una semplice domanda.
Come ti hanno detto $cancella a cosa serve?
In breve:
Mi sembra un pò eccessivo eseguire una query per ogni checkbox selezionata, di sicuro si può fare in un altro modo usando gli operatori logici (AND, OR).Codice PHP:
foreach($_POST["messaggi"] as $value) { // ci serve solo il valore non la chiave...
mysql_query("DELETE FROM mp WHERE id = '{$value}' LIMIT 1");
}
Saluti!
Il mio era un esempio per rispondere a mythologia che dice che, secondo lui, zomer sta cercando di creare un array in modo errato
e come?
il problema sai qual'è? che i valori da cancellare non sono range, se fossero range e le query fossero tutte aggregati di successioni su interi allora la cosa sarebbe fattibile, ma se io faccio una cosa del genere:
delete form tab where id => 5 and id <=10
se io volessi eliminare i record da 5 a 10 con una sola query la cosa sarebbe fattibile, ma se volessi eliminare i record 3, 6 , 10 con una sola query?
il problema stà che tu non puoi preventivare in che ordine i record verranno cancellati.
ps. se esiste un qualche stratagemma per farlo,spigate please
Ultima modifica di Xsescott : 21-11-2009 alle ore 15.12.11
"Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix
[ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
consoliwebsite.altervista.org
Fare un ciclo o un implode() che genera una stringa con un AND insieme a tutti gli ID checkati e poi concatenare la stringa in un'unica query.
guarda che questo:
e questoCodice PHP:
$user->lang['STYLES'] 0..n]
sono due cose diverse, perchè come giustamente mythologia dice uno è un elemento di un particolare array e uno è un array.Codice PHP:
$_POST["messaggi"]
Edit:
ok, non ho captio
saresti cosi gentile da farmi un esempio?
considera questa tabella
id | utente
0 xsescott
1 biccheddu
2 mythologia
3 zomer
4 mycarlo
ora voglio eliminare con una query sola i valori i cui id valgono 0,2,3
...
mycarlo tu dici di costruire la query volta per volta in base a quali elementi voglio cancellare?
tipo: a=0 or a=2 or a=3 ?
Ultima modifica di Xsescott : 21-11-2009 alle ore 16.42.06
"Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix
[ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
consoliwebsite.altervista.org
Ora così su due piedi non mi viene, devo pensarci su e testare, però per farti un esempio che ptorebbe farti capire:
Quindi, avresti:Codice PHP:
$sql_where = implode('AND id = ', $_POST['messaggi']);
$sql = 'DELETE FROM tabella WHERE id <> 0 ' . $sql_where;
Nons o se funziona, ma è la prima cosa che mi viene in mente.Codice:$sql = 'DELETE FROM tabella WHERE id <> 0 AND id = 2 AND id = 3
Ultima modifica di biccheddu : 21-11-2009 alle ore 15.32.08
"Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix
[ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
consoliwebsite.altervista.org
Xsescott ha capito esattamente quello che intendevo. Biccheddu, quello che fai te è profondamente diverso! Il mio dubbio sta nel fatto che si possa rendere un valore $_POST["messaggi"] un array. Non credo sia possibile scrivere un array in quel modo, semplicemente inserendo lo stesso nome (messaggi[] in questo caso) in tutti gli input. Mi sembra del tutto improbabile. Qui mi pare si stia tentando di usare l'html a mo' di php. A me non risulta che se chiamo due input allo stesso modo, poi nel $_POST["nomechehodato"] ottengo un array. Ripeto, magari sbaglio, ma a me non pare.
Ultima modifica di mythologia : 21-11-2009 alle ore 16.03.38
infatti non è assolutamente cosi, l'ultimo input con quell'indice viene selezionato e inviato di solito.
biccheddu c'è un esempio dove tu mi hai risposto che "io non leggo i post prima di rispondere" (e ti do ragione), ma a quanto vedo ci possiamo dare la mano a riguardo
leggiti il primo script che ho postato e noterai come sono stato costretto a passare i valori post ;)
Ultima modifica di Xsescott : 21-11-2009 alle ore 16.39.03
"Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix
[ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
consoliwebsite.altervista.org
PHP e checkbox
Ora?
Lui non sta usando indici diversi! Lascia lo stesso nome all'indice di ciascun input!
Questo è ciò che ha postato, questo non fa quello che vuole. Sta forzando la creazione di un array, che di fatto non c'è. SE e dico SE avesse cambiato gli indici sarebbe stato un discorso profondamente diverso.Codice PHP:
<input type="checkbox\" name=\"messaggi[]\" value=\"".$row['id']."\" />
Ultima modifica di Xsescott : 21-11-2009 alle ore 16.26.40
"Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix
[ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
consoliwebsite.altervista.org
Perchè no scusa? Non ci sto capendo più nulla
"Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix
[ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
consoliwebsite.altervista.org
Forse bisogna usare OR ma non ne sono sicuro...
Saluti!
Concordo in poche parole a me serve qualcosa come sta nel panello di AV.inviato da biccheddu: Perchè no scusa? Non ci sto capendo più nulla
Ecco cosa faccio io facico una query alla tabella mp e prendo tutti i messaggi che hanno come desntinatario il mio nome poi, faccio un mysql_fecth_array e facico un while ora io vorrei che in si possano creare delle checkbox affianco ad ogni messaggio cosi che cliccandoci io possa scegliere quali messaggi eliminare poi, e infine un smeplice bottone che mi permette di inviare la richiesta
Ora come devo fare il sistema di eliminazione?
il codice è questo
non voglio mettere un bottone ad ogni immagine io voglio fare qualvosa dle genereCodice PHP:
<?php
$name_inp = (!empty($_POST['delet'])) ? trim($_POST['delet']) : '';
$name = addslashes($name_inp);
if($name != null && $name != ''){
include("config.inc.php");
$db = mysql_connect($host, $username);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri.");
mysql_select_db($database, $db) or die ("Errore nella selezione del database. Verificare i parametri.");
$result = mysql_query("DELETE FROM calcetto_nextmatch WHERE id='$name'") or die(mysql_error());
echo("The record has been deleted");
mysql_close($db);
}
?>
Infatti non ci sono bottoni per ogni riga.
Leggi bene qui: comando DELETE per eliminare dati da form, l'unica cosa differente è type=radio invece del checkbox, quindi non è possibile fare eliminazioni multiple, però se modifichi quel codice è possibile.
Considerando che in teoria il predicato IN dovrebbe essere equivalente al predicato = ANY
considerando che questi predicati vengono usati per le query nidificate.
indi per cui, sapendo che:
(id IN (1,2,3,4)) = (id = ANY(1,2,3,4))
come faccio a scrivere correttamente ciò che è nell'espressione a sinistra nella forma dell'espressione a destra?
ovviamente vorrei capire come costruire luna query di selezione in mysql.
grazie a chi mi darà una mano :)
"Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix
[ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
consoliwebsite.altervista.org
Non ho capito la tua richiesta, Xsescott.
niente, quando usi IN puoi passargli direttamente i valori come stringa separati da virgola, e lui fa ciò che deve fare.
select * form tab where in (1,3,5)
seleziona le query 1,3,5
in teoria, e dico in teoria, IN è un predicato per le subquery, ma guardacaso riesco ad usarlo anche passandogli dei valori separati da virgola, come su...
mentre, l'operatore ANY, dovrebbe restituire i record se vi è almeno uno di quei valori che si risolve con l'operatore che lo precede con il risultato della select contenuta in any.
quindi, in teoria
select * from tab where y = any(1,3,5)
dovrebbe in teoria fare la stessa cose, ma mysql mi spara un errore per la sintassi..
ora mi chiedevo se era dovuto al fatto che any lo si puoi usare solo nella forma
select * from tab where y = any (select y tab where x = 1 or x=3 or x=5)
oppure esiste una forma piu esplicita, tipo passandogli array, lista esplicita o variabili in qualche ordine particolare??
ripeto, con in basta fare IN (1,3) e lui accetta il fatto che il confronto venga fatto con quei valori dentro le parentesi...invece con any, errore si sintassi..
qualcuno riesce a risolvere questo dilemma ??
grazie ancora :D
"Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix
[ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
consoliwebsite.altervista.org
E' proprio la sintassi a volere ciò. In si può usare sia come:
IN(value1, value2, ...)
che come
IN(subquery).
Al contrario, ANY ha solo la forma:
ANY(subquery)