form con campo specifico obbligatorio

Kara Starbuck

Nuovo Utente
22 Lug 2012
17
0
0
Salve a tutti,
mi auguro di riuscire a trovare qui un aiuto ai miei problemi.
Non sono una maga del web, e in php neppure scolara.

Ho un forum vb, ed è mia intenzione costruire dei contest, e per farlo in maniera efficace avrei bisogno di almeno uno script in php che mi consenta di fare quanto in oggetto, ovvero,
metto un esempio trovato in rete:

HTML:
<head><SCRIPT LANGUAGE="JavaScript">
function verifForm(formulaire)
  {
  if(formulaire.keypass.value == "")
    alert('il pass inserito non è corretto');
  else
    formulaire.submit();
}
</SCRIPT></head>

<body>
<form action="elabora.php" method="post">
<INPUT TYPE="text" NAME="keypass" SIZE=40>
<INPUT TYPE="button" VALUE="inserisci il pass" onClick="verifForm(this.form)">
</FORM>
</body>

questo esempio mi rimanda ad un pop up se lascio la casella di testo vuota, e mi rimanda ad una pagina qualora io ci inserisca qualunque cosa.
Quello che vorrei è che debba essere compilata con una parola ben precisa e che mi restituisca la frase "il pass inserito non è corretto" quando la digito errata e non solo quando la lascio vuota.

E' chiedere troppo? si può fare?
Grazie
 
Ciao,
puoi aggiungere una condizione in piu nella if :

HTML:
<head><script type="text/javascript">
    function verifForm(formulaire)
    {
// se è vuoto o è diverso da ... 
        if(formulaire.keypass.value == "" || formulaire.keypass.value != "quello che vuoi")
            alert('il pass inserito non è corretto');
        else
            formulaire.submit();
    }
    </script></head>

<body>
    <form action="elabora.php" method="post">
        <INPUT TYPE="text" NAME="keypass" SIZE=40>
        <INPUT TYPE="button" VALUE="inserisci il pass" onClick="verifForm(this.form)">
    </FORM>
</body>

però è poco sicuro

...

anzi

non è sicuro per niente
Troviamo un altra soluzione .. .
 
Ultima modifica:
a me sembra perfetto! :)

forse tu intendi che non è sicuro per via di codice malevolo che vi si può inserire, suppongo...
tieni presente che mi servirebbe solo per breve tempo e per la sola durata dei contest

in pratica userei la funzione degli "avvisi" di vbulletin per compilarlo, e visibile solo da determinate persone, ovvero a coloro che partecipano alla gara
è così pericoloso?
 
ciao
criric ha ragione, qualsiasi controllo lato client è facilmente aggirabile, se poi il form ti serve o per inviarti email o inserire dati nel db il pericolo è notevole indipendentemente da quanto tempo lo tieni in linea.
dovresti prevedere dei controlli lato server
 
ciao, no niente di tutto quanto esposto.

anzi, al riguardo vorrei anche chiedere un'altra cosa, ovvero se ho la possibilità di glissare la pagina php esterna ma di inserire delle condizioni nello script.

tipo:
se è vuoto o diverso da... allora alert
se è corretto allora "ti mostro l'indizio per procedere"

come dicevo mi serve per effettuare dei contest, una specie di caccia al tesoro, e questo è solo temporaneo e non visibile a tutti

spero si capisca ciò che intento e che si possa fare
 
ho letto che si può utilizzare una pagina esterna ma anche no, mettendo il # al posto della pagina.
e quindi vedere tutto nella pagina del form senza cambi di pagina o altro
questo intendo
 
ciao
se vuoi fare tutto nella stessa pagina puoi mettere l'action="#" oppure action="", ma è meglio
PHP:
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
o anche (ma a me piace meno)
PHP:
<form action="<?= htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
 
Metti i controlli in una pagina esterna, richiamala tramite ajax, e stampa sul client (anche come allert) gli errori di essa, se non ricevi output
vuol dire che non ce ne sono e continui, cosi non possono aggirarla dato che il js fa solo da 'mediatore'
 
ciao
se vuoi fare tutto nella stessa pagina puoi mettere l'action="#" oppure action="", ma è meglio
PHP:
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
o anche (ma a me piace meno)
PHP:
<form action="<?= htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">

ricapitolando:

HTML:
<head><script type="text/javascript">
    function verifForm(formulaire)
    {
// se è vuoto o è diverso da ... 
        if(formulaire.keypass.value == "" || formulaire.keypass.value != "quello che vuoi")
            alert('il pass inserito non è corretto');
        else
            formulaire.submit();
    }
    </script></head>

<body>
    <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
        <INPUT TYPE="text" NAME="keypass" SIZE=40>
        <INPUT TYPE="button" VALUE="inserisci il pass" onClick="verifForm(this.form)">
    </FORM>
</body>

questo il codice fino a qui. Ora, per far si che, digitando la parola corretta compaia nella stessa finestra del form il risultato, come si dovrebbe procedere?

cioè... quell':

else
formulaire.subimt()
dovrebbe contenere dell'altro? e se si come messo?

@Nefyt
mi spiace ma non ti seguo nel ragionamento, troppo complicato per me :)
 
ciao
prima una domanda: ogni utente ha la sua pass o è unica per tutti?
poi al pulsante dagli il name
HTML:
<input type="button" value="inserisci il pass" name="pinco" onClick="verifForm(this.form)">
poi scrivi i tag in minuscolo
la pag unica schematicamente è così

PHP:
<!-- parte head ecc-->
<?php
if(isset($_POST['pinco'])){
//e qui fai tutto quello che devi fare
}
?>
<!-- il resto dell'html compreso il form -->

ricordati che la pagina deve avere estenzione .php non .htm o .html
 
si, il pass è unico per tutti, almeno così pensavo, poiché tanto il tutto è poi vincolato ad altre cose, il pass serve solo per poter accedere al livello successivo e per essere certi che non si siano saltati i passaggi.

Per il resto invece ora ho delle perplessità, perché come dicevo all'inizio utilizzerei gli "avvisi" forniti dal vbulletin
Non so se hai presente ma penso di si, e questi pescano solo l'html.
Nel metodo originario, ovvero rimadare ad una pagina php esterna, almeno nei test funzionava, invece così, essendoci anche codice php specifico che richiede anche l'estensione immagino che non funzionerà

Provo, ma ho scarsa fiducia...

eventualmente dovresti essere tanto gentile da fornirmi l'alternativa
 
allora, non sono sicura di aver capito bene.

HTML:
<!-- parte head ecc-->
<head>
<?php
if(isset($_POST['pinco'])){
//e qui fai tutto quello che devi fare
<script type="text/javascript">
    function verifForm(formulaire)
    {
// se è vuoto o è diverso da ... 
        if(formulaire.pinco.value == "" || formulaire.pinco.value != "pass")
            alert('il pass inserito non è corretto');
        else
            formulaire.submit();
	}
    </script>
}
?>
</head>
<!-- il resto dell'html compreso il form -->

<body>
   <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
        <input type="text" name="pinco" size=40>
        <input type="button" value="inserisci il pass" name="pinco" onClick="verifForm(this.form)">
		    </form>
	
	<div>resto dell'html </div>
</body>
e così non funziona neppure in locale, ovviamente la pagina si chiama pagina.php

tantomeno se la uso in vbulletin, e in questo caso dovrei ritornare alle origini utilizzando invece la pagina esterna, in qesto modo:

HTML:
<!--pagina interna al vbulletin "gli avvisi" -->
<script type="text/javascript">
    function verifForm(formulaire)
    {
// se è vuoto o è diverso da ... 
        if(formulaire.pinco.value == "" || formulaire.pinco.value != "pass")
            alert('il pass inserito non è corretto');
        else
            formulaire.submit();
	}
    </script>
</head>
<body>
   <form action="pagina.php" method="post">
        <input type="text" name="pinco" size=40>
        <input type="button" value="inserisci il pass" name="pinco" onClick="verifForm(this.form)">
		    </form>
</body>

PHP:
<!--pagina esterna al vbulletin buttata nella root -->
<div>tutto il resto che mi serve si legga dopo aver compilato il form </div>

il punto è che la pagina non me la carica
 
ciao
hai fatto un po' di confusione
invece di perderti con js, prova questo chiama la pag pagina.php e provala, evidentemente modificando i nomi di dove vuoi andare
leggi i commenti
PHP:
<?php
ob_start();//prima del tag <?php NON deve esserci nemmeno uno spazio
if(isset($_POST['pallo'])){
	$password="abracadabra";//o quella che vuoi, basta che tu modifichi abracadabra
	//se vuoi avere alcune (non troppe) password diverese senza ricorrere ad un db, il tutto si può leggermente modificare
	if($_POST['pinco']==$password){//la password inserita è uguale alla richiesta
		header("location:pagina_che_vuoi.php");//qui metti il nome della pag a cu vuoi andare, io ho messo php, ma può essere html o htm
		//comunque verifica i percorsi es "location:cartella/pagina_che_vuoi.php"
		exit();
	}else{//la password è errata
		header( "refresh:4;url=altra_pagina_che_vuoi.php" ); //potrebbe essere il nome di questa pagina pagina.php
		echo "<b>non hai inserito la password, o password errata</b><br />tra 4 secondi sarai reindirizzato a altra_pagina_che_vuoi";
	}
}else{
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>inserimento password</title>
</head>
<body>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
	inserisci password: <input type="text" name="pinco" size=40><br />
	<!--i due campi di input DEVONO avere nomi diversi, altrimenti come fa lo script a riconoscerli-->
	<input type="submit" value="inserisci il pass" name="pallo">
</form>
<!-- qui potresti mettere un link in modo che l'utente possa uscire-->
</body>
</html>
<?php
}
ob_end_flush();
?>
edit
ho messo submit al posto di button
 
Ultima modifica:
può essere che ci sia un errore? a video vedo questo (in locale)

script.jpg
 
ciao
l'ho riverificato e mettendo nomi di mie pagine funzia.
probabilmente facendo il copy/paste hai tralasciato qualcosa.
posta esattamente il codice che ti da quell'errore
 
Devo dire che tutto il concetto mi è molto estraneo, quindi se anche faccio io degli errori faccio fatica ad individuali. Comunque ecco il codice, controllato gli spazi e tutto il resto
dal mio punto di vista è correto :) poi non so

PHP:
<?php
ob_start();//prima del tag <?php NON deve esserci nemmeno uno spazio
if(isset($_POST['pallo'])){
    $password="abracadabra";//o quella che vuoi, basta che tu modifichi abracadabra
    //se vuoi avere alcune (non troppe) password diverese senza ricorrere ad un db, il tutto si può leggermente modificare
    if($_POST['pinco']==$password){//la password inserita è uguale alla richiesta
        header("location:doc/forum/contest1.php");//qui metti il nome della pag a cu vuoi andare, io ho messo php, ma può essere html o htm
        //comunque verifica i percorsi es "location:cartella/pagina_che_vuoi.php"
        exit();
    }else{//la password è errata
        header( "refresh:4;url=pagina.php" ); //potrebbe essere il nome di questa pagina pagina.php
        echo "<b>non hai inserito la password, o password errata</b><br />tra 4 secondi sarai reindirizzato a altra_pagina_che_vuoi";
    }
}else{
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>inserimento password</title>
</head>
<body>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
    inserisci password: <input type="text" name="pinco" size=40><br />
    <!--i due campi di input DEVONO avere nomi diversi, altrimenti come fa lo script a riconoscerli-->
    <input type="submit" value="inserisci il pass" name="pallo">
</form>
<!-- qui potresti mettere un link in modo che l'utente possa uscire-->
</body>
</html>
<?php
}
ob_end_flush();
?>
 
ciao
non vedo errori nemmeno io. per sicurezza ho fatto un copy/paste di quello che hai postato (cambiando solo i nomi delle pagine a cui vai) e non mi da quell'errore che hai postato, funziona correttamente.
non capisco
 
ciao
ecco dove è l'inghippo: le pagine dinamiche (php, asp..) non si possono aprire direttamente col bw (una pag html si apre col doppio clic sul nome o con apri file del bw)
per vederle in locale devi avere un server locale e php, tra l'alrto (se non ho capio male) usi vbiulletin quindi in locale dovresti avere il server.
dovresti digitare nella barra del bw http://localhost:8080/pagina.php o simile
 

Discussioni simili