Help - Controllo parole

  • Creatore Discussione Creatore Discussione zerobit
  • Data di inizio Data di inizio

zerobit

Utente Attivo
10 Mar 2012
35
0
0
Salve a tutti , avrei la necessità di eseguire un controllo sulle parole digitate nel form , ossia se viene trovata ad esempio la parola latte , con un redirect devo rimandare ad un’altra pagina .

Ho provato in vari modi ma niente da fare , potreste aiutarmi a risolvere questo problema ?


PHP:
<?php
<form method=post action=pagina.php>  
<input type=text size="95" name=chiave style='BACKGROUND-COLOR: ecc……
</form>	
$chiave=$_REQUEST['chiave'];  
top();
// connessione al database
$keys = explode (",", $chiave);
$query = "";
reset ($keys);
while (list(,$parola) = each ($keys))
{ $parola = trim($parola);
if ($parola != "")
$query .= "creazione della query…………………………..";
}
$query .= " 0";
$query = "SELECT ecc…………..     " . $query;
while ($row = mysql_fetch_array($result))
{
$prezzo = $row['prezzo'];
$mozzarella = $row['mozzarella'];

//CONTROLLO SULLE PAROLE DIGITATE
$filtro=("latte");
if ($parola != "$filtro")
Header( "Location: http:indirizzo del sito web" );
?>
 
Ciao

il reindirizzamento con header dovresti metterlo a inizio pagina o cmq prima di qualsiasi output

esempio con php

PHP:
<?php
if(isset($_POST['chiave'])) {
    if($_POST['chiave'] == "latte") {
        header('location:altrapagina.php');
    }
}

echo "<form method='post' action='" . $_SERVER['PHP_SELF'] . "'>";
echo "<input type='text' name='chiave'/>";
echo "<input type='submit' value='Invia'/>";
echo "</form>";
?>

esempio con javascript

Codice:
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script type="text/javascript">
            function controllo(parola) {
                var chiave='latte';                
                if(parola==chiave) {
                    location.href="altrapagina.php";
                }
            }
        </script>
    </head>
    <body>
        <input type="text" name="chiave" onkeyup="controllo(this.value)"/>
    </body>
</html>
 
Grazie criric per la risposta

Li ho provati entrambi , ma niente da fare ...
 
Ultima modifica:
ciao
se non ho capito male il problema, prova con questa

PHP:
<?php
ob_start();
$cerca=array('latte'=>'pinco.php','pane'=>'pallo.php');//questa evidentemente dovrà arrivare da un db
if(isset($_POST['chiave'])) {
	foreach($cerca as $parola =>$vai_a){
		if($parola == $_POST['chiave']){
			header( "Location: http:$vai_a" );
		}
	}
}
echo "<form method='post' action='" . $_SERVER['PHP_SELF'] . "'>";
echo "<input type='text' name='chiave'/>";
echo "<input type='submit' value='Invia'/>";
echo "</form>";
ob_end_flush();
?>
 
Ciao grazie anche a te , ma ancora niente da fare

Ti spiego quello che avviene :

- L'utente digita una frase
- Creazione di cookie
- Parte l'interrogazione e il recupero dei dati da mysql
- Se nel database non viene trovato niente scatta il controllo
- Questo controllo SULLE PAROLE DIGITATE nel form deve avvenire al termine di tutte le altre operazioni

Hai presente gli script che eseguono il controllo sulle parolacce ? devo realizzare qualcosa di simile
 
ciao
domande, metto dei nomi a caso.
all'inizio hai detto che se per es trova latte deve essere riinviato ad una pagina (pag_uno.php), se trova pane ad un'altra (pag_due.php) o alla stessa di latte (pag_uno.php)?
parli di frase, quindi l'utente può inserire "oggi ho fatto colazione con pane e latte" giusto? quindi riinviato ad una pagina (pag_tre.php o pag_uno.php ?)?
se l'utente inserisce "oggi ho fatto colazione con saleme e biscotti", non essendoci pane o latte riinviato ad una pagina diversa (pag_quattr.php ?)

è così?
 
all'inizio hai detto che se per es trova latte deve essere riinviato ad una pagina (pag_uno.php), se trova pane ad un'altra (pag_due.php) o alla stessa di latte (pag_uno.php)?

No ipotizziamo due termini

1- Latte

2 - Farina

Ora se l'utente digita UNA FRASE del tipo , per fare il budino ci vuole il LATTE e quella frase è presente nel database recupero i dati e tutto finisce li .

Se invece "non è presente" allora scatta il controllo , quindi :

Se la frase contiene LATTE vai alla pagina uno.php

Se la frase contiene FARINA vai alla pagina due.php

Se la frase contiene FARINA + LATTE vai alla pagina tre.php

Se la frase NON contiene FARINA o LATTE mostri un messaggio ( la preghiamo di cercare un negozio migliore di questo ! )


Stavo pensando di usare $_REQUEST['chiave']; invece di $_POST['chiave'] vediamo se ottengo risultati migliori


Con questo codice che ho trovato sul forum , la soluzione è vicina :

PHP:
<form method="post" action=pagina1.php> 
<input type=text size="50" name=chiave>
<input type="submit" name="invio" /><br />
</form>
<?php
if(isset($_POST['invio'])){
$chiave=$_POST['chiave'];
$controllo=0;

$array_control=array('latte','farina');

$array=explode(' ',$chiave);
for ($x=0; $x<sizeof($array); $x++){

			for($a=0;$a<sizeof($array_control);$a++){
			if($array[$x]==$array_control[$a]){$controllo++;}
		}
}

if($controllo>0){$stringa=trovato;}else{$stringa=nontrovato;}
echo "$stringa";
}else{echo 'inserire un carattere';}
?>


Ci sono comunque due problemi .

Il primo e che funziona SOLO se clicchi sul pulsante SUBMIT che invia la query , altrimenti se premi solo INVIO non va ! ( di conseguenza voglio abolire il submit )

Il secondo invece riguarda il redirect , ho provato in questo modo , ma non va

PHP:
if($controllo>0){
Header( "Location: paginauno.php" ); 
}
else {
}
Header( "Location: paginadue.php" ); 
      }
?>



Qualche idea su come risolvere ?
 
Ultima modifica:
ciao
credo di aver capito (spero).
in giornata o domani ci dò un occhio e poi ti so dire.
comunque ero orientato verso qualcosa di simile
 
ciao
prova così, però guarda che è un'idea e che può essere (se funzia) migliorata

PHP:
<?php
function estrai_parole($f){
	if($f !=""){
		$p=explode(" ",$f);//esplodo secondo lo spazio che divide le parole
		//la frase è una sola parola senza spazi, quindi non esplosa, non un array
		if(!is_array($p)){
			$pa[0]=$f;//ritorno comunque come se fosse un array
			return $pa[0];//ritorno comunque come un array
		}else{
			//verifico che non ci siano parole fatte di soli spazi generate da due o più spazi tra le parole nella frase
			foreach($p as $chiave => $valore){
				if(trim($valore)==""){unset($p[$chiave]);}//elimino l'elemento vuoto dell'array
			}
			return $p;//ritorno l'arrya con tutte le parole
		}
	}else{
		//la frase è vuota
		return FALSE;
	}
}//fine function
ob_start();
//dati di connessione
if(isset($_POST['invia'])){
	$frase=addslashes(strtolower(trim($_POST['chiave'])));//standardizzo la frase es. Ho Visto l'Alba => ho visto l\'alba
	if($frase==""){
		header( "Location: http:{$_SERVER['PHP_SELF']}" );//la frase è vuota torno al form
		exit();
	}else{
		//cerco la frase nel db
		$ris=mysql_query("SELECT * FROM tabella WHERE frase='$frase'");
		if(mysql_num_rows($ris)>0){//la frase esiste
			//fai quello che devi fare
		}else{
			$parole=estrai_parole($frase);
			if($parole===FALSE){//la frase è errata quindi ritorno al form
				header("Location: http:{$_SERVER['PHP_SELF']}");
				exit();
			}else{
				//non so se le parole le ricavi da un db o fai un array
				//io per semplificare faccio un array
				$da_trovare=array('latte','pane','formaggio');
				$conta=0;
				foreach($parole as $valore){
					if(in_array($valore,$da_trovare)){
						$conta++;
						$trasm[]=$valore;//questo se vuoi poi trasmettere le parole trovate
					}
				}
				$stringa=serialize($trasm);
				//metto lo switch così se ti serve puoi trattare più risultati
				switch($conta){
					case 0:
						//la preghiamo di cercare un negozio migliore di questo !
						header("Location: http:pa_della_che_vuoi.php");
						exit();
					break
					case 1:
						header("Location: http:pa_uno.php?tr=$stringa");
						exit();
					break
					case 2:
						header("Location: http:pa_due.php?tr=$stringa");
						exit();
					break
					default://più di due
						header("Location: http:pa_della_che_vuoi.php?tr=$stringa");
						exit();
					break;
				}
			}
		}
	}
}else{
echo <<<EOD
<form method='post' action='{$_SERVER['PHP_SELF']}'>
<input type='text' name='chiave'/>
<input type='submit' value='invia' name='invia'/>
</form>
EOD;
}
ob_end_flush();
?>
verifica che non abbia fatto errori di scrittura
 
Interessante lo terrò da parte , non si sa mai !

Credo comunque di aver risolto , l'unico intoppo è che funziona solamente con il testo minuscolo , il maiuscolo non lo digerisce bene .

Adesso vedo di lavorarmelo .


Ciao , grazie per i suggerimenti e per il codice che hai postato .

Buona domenica :fonzie:
 

Discussioni simili