Ciclo di verifica multipla su campo DB mysql

dynamicdevotion

Nuovo Utente
11 Ott 2011
5
0
0
www.dynamicdevotion.com
Buongiorno a tutti, spero che il titolo renda l'idea di ciò che sto cercando di fare...

Devo creare degli slug per dei permalink ricavandoli da un form (campo Titolo) e memorizzarli in un campo di una tabella, per esempio:
Titolo: "Buongiorno a tutti"
slug: "buongiorno-a-tutti"

Tutto liscio, finchè il titolo non si ripete, quindi con un query ne verifico l'esistenza ed aggiungo un valore numerico alla stringa:
Titolo: "Buongiorno a tutti" (secondo inserimento)
slug: "buongiorno-a-tutti-1"

Ovvio che se si dovesse ripetere il titolo ancora una volta, sarebbe necessario intervenire così:
Titolo: "Buongiorno a tutti" (terzo inserimento)
slug: "buongiorno-a-tutti-2"

Ecco il problema: devo verificare che lo slug esista già nella tabella, nel caso in cui esista devo verificarlo nuovamente aggiungendo il valore numerico (incrementandolo se ne trovo ancora) finchè non lo trovo più, quindi inserirlo nella tabella.
Il ciclo più sensato sarebbe il while:

PHP:
$perma_title = 'buongiorno-a-tutti';
$slug_ok = 0;
$nr = 0;
	
while ($slug_ok == 1)
	{
	$query = "SELECT * FROM tabella WHERE perma_titolo = ".$perma_title;
	$result = mysql_query($query, $db);
	if ($result)
		{$perma_title_temp = $perma_title.'-'.$nr;}
	else
		{
		$perma_title = $perma_title_temp;
		$slug_ok = 1;
		}
	$nr++;
	}

Non funziona, mi salva sempre 'buongiorno-a-tutti'.:skull:
Il query l'ho testato e funziona senza il ciclo while, e non so cos'altro testare, lo script è semplice e non c'è molto da verificare.
Di fatto non va...

Mi chiedo se c'è un bug, oppure se c'è un modo diverso per interrogare il database più volte se trovo i valori all'interno.


Grazie in anticipo:)
 

dynamicdevotion

Nuovo Utente
11 Ott 2011
5
0
0
www.dynamicdevotion.com
Insert

Si effettivamente ho tralasciato la parte successiva in quanto senza while tutto funziona:

PHP:
$query = "INSERT INTO tabella (perma_titolo) VALUES ('$perma_title')";
mysql_query($query, $db);

In realtà l'INSERT ha più campi da inserire, l'ho qui semplificato.
Il problema è la creazione corretta di '$perma_title'.
Grazie
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
se non ho capito male (correggimi se sbaglio)
tu inserisci per la prima volta il titolo (Buongiorno a tutti) - domanda: proviene da un campo di input di un form? -
se non esiste vuoi insereire nella tabella Buongiorno-a-tutti
se tu o chicchessia inserisce un'altra volta Buongiorno a tutti vuoi che quel Buongiorno-a-tutti diventasse Buongiorno-a-tutti-1, e così di seguito (-2, -3,...).
ti indico come farei io (ipotesi come detto proviene da un campo di un form), ti metto riga per riga, poi puoi semplificare
PHP:
<?php
$titolo=$_POST['titolo'];//da verificare comunque se vuoto o con qualche altra porcheria
//tolgo spazi iniziali e finali,poi lo metto (es.) tutto in minuscolo perche se cerco Buongiorno e c'è buongiorno non lo trovo
$titolo=trim($titolo);//spazi
$titolo=strtolower($titolo);//BuOngIorno a tuTTi diventa buongiorno a tutti
$perma_title=preg_replace(" ","-",$titolo);//sostituisco gli spazi con -
/*e qui la parte più complessa
devo verificare se nella tabella esiste già buongiorno-a-tutti indipendentemente che sia senza nulla o termini con
-1
-2
ecc...
*/
//faccio la query
$sql="SELECT * FROM tabella WHERE perma_titolo LIKE '$perma_title%'";//dovrebbe trovare tutii i buongiorno-a-tutti , -1, -2 ecc
$ris=mysql_query($sql);
//verifico se esistono, e nel caso quanti
$esitono=mysql_num_rows($ris);
if($esistono==0){
	//non esiste quindi inserisco
	$sql_1="INSERT INTO tabella(perma_titolo) VALUES('$perma_title')";
	$ris_1=mysql_query($sql_1);//+ verifica dell'insert
}else{//uno o più, es. esiste di già buongiorno-a-tutti quindi il valore di $esiste==1 (o più), quindi uppo
	$perma_title_agg = $perma_title."-".$esitono;//concateno mantenendo l'originale $perma_title
	$sql_1="UPDATE tabella SET perma_titolo='$perma_title_agg' WHERE perma_titolo LIKE '$perma_title%'";
	$ris_1=mysql_query($sql_1);//e qui dovrebbe aggiornarti il perma_link
}
//....
?>
il tutto S.E.O. (in questo caso Salvo Errori e Omissioni)

prova, eventualmente non funzia
 

dynamicdevotion

Nuovo Utente
11 Ott 2011
5
0
0
www.dynamicdevotion.com
1000 punti a borgo italia!

Grandioso, mi hai risolto un gran rompicapo.
Grazie infinite!

Non ho potuto testare il tuo codice alla lettera, ma ho capito bene che con LIKE (e % solo alla fine) posso vedere e contare quante stringhe "potenzialmente uguali" ci sono nel database, e se ci sono uso il numero di stringhe presenti per definire il suffisso del nuovo permalink da generare.
In un quarto di codice e di tempo ho risolto il problema...
Ecco come, semplificando in base alle mie esigenze:

Funzione crea permalink:
PHP:
function create_perma($permatext)
	{
	$permatext = strtolower($permatext);
	$permatext = preg_replace("/[^0-9A-Za-z ]/", "", $permatext);
	$permatext = str_replace(" ", "-", $permatext);
	while (strstr($permatext, "--"))
		{$permatext = preg_replace("/--/", "-", $permatext);}
	return $permatext;
	}

Verifica esistenza della stessa stringa (si, proviene da un campo di form):
PHP:
$title = htmlspecialchars ($_POST['title']);
$perma_title = create_perma($title);

$query = "SELECT * FROM tabella WHERE perma_titolo LIKE '".$perma_title."%'";
$result = mysql_query($query, $db);
$esitono = mysql_num_rows($result); 

if ($esitono != 0)
	{$perma_title = $perma_title.'-'.$esitono;}

Poi procedo all'INSERT dopo altri controlli derivati dal form, l'importante è inserire in '$perma_title' il giusto valore.
Testato ed inserito nel lavoro, funziona tutto perfettamente!


GRAZIE GRAZIE GRAZIE GRAZIE GRAZIE!
:beer:
 
Discussioni simili
Autore Titolo Forum Risposte Data
O Uso CICLO verifica FLATFILE PHP 0
B Completare il seguente ciclo affinché stampi tutto l’array al contrario PHP 3
W MySQL ciclo in SELECT MySQL 0
E Inviare variabile a PHP da ciclo in JS Javascript 0
I Eecuzione di javascript in ciclo foreach php. PHP 7
W fare la somma di un valore estratto da un ciclo while Classic ASP 0
motleyrulez Aiuto con un ciclo PHP 0
B [PHP] formula e ciclo PHP 5
M [PHP] Come inserire codice html in un ciclo while PHP 2
T con oop creare un ciclo per una pagina dinamica html con php PHP 3
G [PHP] totale per ogni id di un ciclo PHP 1
P Incrementare nodo in ciclo for-each XML 6
S [PHP] Ciclo foreach su più array PHP 2
M UPDATE non aggiorna db se lo inserisco in un ciclo Database 1
N [PHP] Controllare condizione ciclo While PHP 9
maxnegri [PHP] Eliminare risultati duplicati da ciclo foreach ottenuti da una select php mysqli PHP 18
N [PHP] Registrare variabili all'interno di un ciclo PHP 3
MattiaBL [PHP] Problema ciclo while PHP 3
V Ciclo for per Pulsante in JavaScript Javascript 7
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
C [PHP] Ciclo for dinamico PHP 14
gandalf1959 [PHP] query all'interno di un ciclo while PHP 3
Z [PHP] ciclo for PHP 9
valvasori [PHP] Problema ciclo for PHP 12
A [PHP] metodo di una classe per estrarre i dati con ciclo while PHP 1
H [PHP] Ciclo per calcolare i chilometri PHP 4
S [PHP] Recupero più dati da form realizzata ciclo FOR PHP 5
gandalf1959 [PHP] ciclo while non scrive dove dovrebbe... PHP 2
Monital [PHP] ciclo su un file json molto grande PHP 1
M [PHP] Errore in ciclo foreach PHP 1
O Ciclo non visualizzato PHP 1
M problema ciclo javascript Javascript 4
G Ciclo if php per far comparire un pulsante solo nel caso in cui una variabile sia 0 PHP 2
F Problema codice in un ciclo while PHP 2
T ciclo $.each non va jQuery 4
V Generare array da ciclo while e prendere valori casuali PHP 4
I tabella con ciclo, recupero dati PHP 3
Monital Problema con un ciclo for. PHP 1
M Problema con ciclo foreach per chiusura apertura div in base al numero di record in database PHP 1
S Ciclo PHP molto complesso PHP 2
minatore Ciclo while PHP 3
D ciclo while mi genera due campi vuoti PHP 5
K Problema con update di un database in un ciclo Classic ASP 1
P JAVA 8 Ciclo For all'interno di un altro Ciclo For Java 3
B ciclo in PHP per creare numero progressivo PHP 2
otto9due Problema inserimento ciclo foreach o while in variabile PHP 1
M Caricare più google maps con un ciclo Javascript 1
N Stranezza sul ciclo while PHP 1
M Aiuto su come procedere con un ciclo foreach PHP 4
A Tabella e ciclo for PHP 7

Discussioni simili