problema con form

  • Creatore Discussione Creatore Discussione _Ania
  • Data di inizio Data di inizio

_Ania

Utente Attivo
8 Apr 2012
31
0
0
Roma
Salve a tutti,
esiste tra voi qualche anima pia che può dare una scorsa ai pezzi in php che posto per capire dove sia il problema? Io non capisco un H di php e quanto segue è stato scritto da un amico al quale non posso fare nuovamente ricorso.

Sono 3 file, il primo contiene il form, il secondo ("sezioni.php") contiene la funzione che viene richiamata dal primo e l'ultimo ("formprenotazioni_execute") serve a connettersi al server che contiene il database e eseguire le varie operazioni di fornitura e richiesta dati. Tutti e tre i file risiedono nella stessa cartella, il nome del server è quello fornito da register e i dati dell'utente sono quelli di un utente con tutti i permessi creato appositamente da me.

Quello che fa "l'Infame" lo potete vedere al seguente indirizzo http://www.bunkersoratte.it/provaform/formprenotazioni.php
Non mi trova la funzione conta()?? Non si connette al server? Che vuole da me??

Parte php del file con il form:

PHP:
<?php require "sezioni.php";?>
<body>

    <td width="80%" align="center" valign="top"><table align="center" valign="center">       
       <tr><td colspan="2"> <? if (conta() > 0){
	echo "<tr><td colspan='2'><p><font color='red'>Riempire i seguenti campi per prenotare:</font></p><p></p><p><font color='red' family-font: Century Ghothic; >Sono disponibili"; conta();> echo "posti. </font></p></td></tr>";
           echo " <tr><td></td><td></td></tr>
            <form method='post' action='formprenotazioni_execute.php'>
             <tr><td align='center'><p><font color='red'>Nome:</font></p></td><td><input type='text'  name='nome' ></input></td></tr>
             <tr align='center'><td><p><font color='red'>Cognome:</font></p></td><td><input type='text'  name='cognome' ></input></td></tr>
		     <tr align='center'><td><p><font color='red'>Indirizzo:</font></p></td><td><input type='text'  name='indirizzo' ></input></td></tr>
		     <tr align='center'><td><p><font color='red'>Telefono:</font></p></td><td><input type='text'  name='telefono' ></input></td></tr>
		     <tr align='center'><td><p><font color='red'>Email:</font></p></td><td><input type='text'  name='mail' ></input></td></tr>
		     <tr align='center'><td><p><font color='red'>Numero di persone:</font></p></td><td><input type='text' name='persone' ></input></td></tr>
    
             <tr><td></td><td></td></tr>
             <tr align='right'><td colspan='2'>
             <p align='center'><input type='submit' method ='post' name ='prenota' value='Prenota'></input></p></tr>
             </form>
             </table>
             </td>";
       }else{
       	echo "<tr></tr><tr><td colspan='2'><div><p><font color='red'>Spiacenti, Non e' piu' possibile prenotare.Sarete ricontattati al piu' presto.</font></p></div></td></tr><tr></tr>";
       }?>

La funzione conta() del file sezioni

PHP:
function conta()
{
	$connessione = mysql_connect("nomehosting.register.it","nomeutente","password")or die("Connessione non riuscita: " . mysql_error());
	mysql_select_db("nomedatabase",
		$connessione) or die("Errore nella selezione del database");
	$query = "SELECT  sum(persone) FROM utenti ; "; 
	$result = mysql_query($query) or die(mysql_error());
// Print out result
while($row = mysql_fetch_array($result)){
	$occupati = $row['sum(persone)'];
		$disponibili = (50 - $occupati);
	echo "$disponibili";	
}
return $disponibili;
}

e la parte php del file formprenotazioni_execute

PHP:
<?php
require "sezioni.php";
$persone = $_POST['persone']; 
$telefono = $_POST['telefono'];
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$indirizzo = $_POST['indirizzo'];
$email = $_POST['mail'];
$data = (strftime ("%A %d %B %Y %H:%M"));
$condizione = conta();
$connessione = mysql_connect("nomehosting.register.it","nomeutente","password")or die("Connessione non riuscita: " . mysql_error());
mysql_select_db("nomedatabase",
	$connessione) or die("Errore nella selezione del database");

/*if ($query==FALSE) die("errore nella composizione della query");*/
$tipo = gettype ($persone);

if ($persone <= $condizione){
	if ($persone <> "" and $nome <> "" and $cognome <> "" and $indirizzo <> "" and $email <> "" and $telefono <> ""  )
{
	
	
	
		$query = mysql_query("INSERT INTO utenti (nome,cognome,indirizzo,mail,telefono,persone,data) VALUES ('$nome','$cognome','$indirizzo','$email','$telefono','$persone','$data'); " ,$connessione);
		
		$esitoprenotazione = "Prenotazione avvenuta con successo! <a href ='index.php'>Torna alla Home Page</a>.";

	}else{
		$esitoprenotazione = "Prenotazione Fallita! <a href ='formprenotazioni.php'>Torna indietro</a> e riempi correttamente tutti i campi.";
		
	}
}else{
	$esitoprenotazione = "Hai inserito un numero di persone eccessivo. <a href ='formprenotazioni.php'>Torna indietro</a> e riempi correttamente tutti i campi.";
}
mysql_close($connessione);

?>
Ovviamente ho cancellato i dati di sever e utente :) e ovviamente, il database con la tabella 'utenti' e i campi come sopra descritti è stata creata.
Spero di non aver fatto danno a scrivere 2000 righe!!

Please! Qualcuno ha la pazienza di trovare il problema?? Sono una finta-webmaster a fin di bene! Non mi danno un euro!

Grazie!!
 
Ultima modifica di un moderatore:
Ciao,
invece che <?
usa <?php

PHP:
<?php if (conta()

dovresti risolvere
 
Ora che vedo meglio modifica anche questa:

PHP:
Sono disponibili"; conta();> echo "posti.

con

PHP:
Sono disponibili" . conta() . "posti.
 
Intanto infinitamente grazie! Non credevo che qualcuno mi avrebbe risposto così rapidamente :D e leggendosi tutto quel macello...

Ho provato a fare le prove che mi dicevi, putroppo il risultato non cambia :(

E' corretto che i file siano solo tutti nella stessa cartella perchè possano essere richiamati? Non so, magari è quello...
Sembra scambiare la funzione conta() per testo puro... perchè??? :(
 
Sembra scambiare la funzione conta() per testo puro... perchè???
Perche la sintassi di questa riga è sbagliata
PHP:
 echo "<tr><td colspan='2'><p><font color='red'>Riempire i seguenti campi per prenotare:</font></p><p></p><p><font color='red' family-font: Century Ghothic;>Sono disponibili"; conta();> echo "posti. </font></p></td></tr>";

gli apici non sono al posto giusto

deve diventare piu o meno cosi:

PHP:
echo "<tr><td colspan='2'><p><font color='red'>Riempire i seguenti campi per prenotare:</font></p><p></p><p><font color='red' >Sono disponibili" . conta() . "posti. </font></p></td></tr>";

anche questo è sbagliato e intanto l'ho tolto:
PHP:
family-font: Century Ghothic;

al massimo puoi inserire questo nel tag font

PHP:
style="font-family:'Century Ghothic'"
 
E se non fosse quello :(

Ho modificato la scrittura come mi hai detto, ma il risultato non cambia... lo puoi vedere al link che ho segnato prima perchè li edito con un compilatore e lo salvo direttamente on line. Ho tolto la descrizione del font che per ora non mi interessa.

Di nuovo grazie, se hai altre ipotesi sono qua.
 
ciao
@ciric
diamoci un occhio insieme, a me sembra che ci siano diversi svarioni (a parte che è scritto un po' incasinato), senza contare (cosi a lume di naso) che gli input siano senza alcun controllo e dovendo essere inseriti in un db c'è il grosso rischio di injection.
domani comincio a darci un occhio anch'io

dimenticavo
sempre x ciric: anche tu stahìkanovista?
 
Ultima modifica:
@Borgo
si in effetti mi ero limitato a guardare solo la riga dell'errore, un po tutto il codice è incasinato, stahìkanovista?:confused:


@_Ania
ho visto il link... strano!

prova cosi, sempre per quella riga
PHP:
echo "<tr><td colspan='2'><p><font color='red'>Riempire i seguenti campi per prenotare:</font></p><p></p><p><font color='red'>Sono disponibili ";
conta();
echo "posti. </font></p></td></tr>";
 
Ragazzi infinitamente grazie!! Lo so che il codice è incasinato, me ne accorgo pure io che sono una totale ignorante :)

Io putroppo so giusto qualche cosetta di html e ora mi trovo in mano questo megaproblema che non so gestire...

Se avete tempo di darmi qualche dritta o di dare una raddrizzata al codice...GRAZIE!!
 
x criric

Aimeh, avevo già provato da sola questa soluzione, ma per sicurezza o riprovato ora...sostituendo il tuo testo... niente da fare.

Mi sa che il problema è più "articolato"...

Ari-grazie.
 
Riaggiornando il tuo link ho notato che sei tornata indietro

se metti uno sfondo bianco noterai che tutto il codice php non viene eseguito ma stampato

questo probabilmente è dovuto al tag di apertura php

assicurati intanto che ovunque ci sia scritto <?php invece che <?
 
criric, perdono, non mi sono accorta della tua risposta.
La leggo solo ora...
Ho tolto lo sfondo nero. Effettivamente c'è stampata altra roba, non me ne ero accorta! Sono un macello...

E' anche peggio di come pensassi! :crying:

Mi genera il form, tutto bello tranquillo e poi mi sputa fuori pezzi di codice??

Cmq si, ho sostituito il testo come mi avevi detto. Lo riposto:

<?php if (conta() > 0){
echo "<tr><td colspan='2'><p><font color='red'>Riempire i seguenti campi per prenotare:</font></p><p></p><p><font color='red'>Sono disponibili ";
conta();
echo "posti. </font></p></td></tr>";
echo " <tr><td></td><td></td></tr>
<form method='post' action='formprenotazioni_execute.php'>
<tr><td align='center'><p><font color='red'>Nome:</font></p></td><td><input type='text' name='nome' ></input></td></tr>
<tr align='center'><td><p><font color='red'>Cognome:</font></p></td><td><input type='text' name='cognome' ></input></td></tr>
<tr align='center'><td><p><font color='red'>Indirizzo:</font></p></td><td><input type='text' name='indirizzo' ></input></td></tr>
<tr align='center'><td><p><font color='red'>Telefono:</font></p></td><td><input type='text' name='telefono' ></input></td></tr>
<tr align='center'><td><p><font color='red'>Email:</font></p></td><td><input type='text' name='mail' ></input></td></tr>
<tr align='center'><td><p><font color='red'>Numero di persone:</font></p></td><td><input type='text' name='persone' ></input></td></tr>

<tr><td></td><td></td></tr>
<tr align='right'><td colspan='2'>
<p align='center'><input type='submit' method ='post' name ='prenota' value='Prenota'></input></p></tr>
</form>
</table>
</td>";
}else{
echo "<tr></tr><tr><td colspan='2'><div><p><font color='red'>Spiacenti, Non e' piu' possibile prenotare.Sarete ricontattati al piu' presto.</font></p></div></td></tr><tr></tr>";
}?>
 
ho notato che tutto il sito è in html

sei sicura di avere il supporto per php sul tuo hosting?

hai altre pagine in php?
 
Ok, questo dimostra la mia totale ignoranza e inadeguatezza...
Ovviamente, quando ho fatto la richiesta per l'hosting non mi sono assolutamente posta il problema di capire quale fosse meglio tra l'hosting linux e quello windows... e ovviamente, sentendomi più a casa con windows, ho scelto quello... sarò cretina?? :o
Ora leggo le faq e scopro che l'hosting windows supporta .asp e . net mentre il linux è specifico per i php.
Ora potete anche picchiarmi telematicamente se volete...
Va beh, se ti sei girato un pò il sito avrai capito che è una cosa molto arraffazzonata... io studio ingegneria edile... non so un tubo di questa roba...
Ora vedo se riesco ad attivare l'altro e provo a farcelo girare. Poi vi dico.

Intanto grazieeeeeeeeeeeeeee!!!!
 
forse puoi semplicemente aggiornarlo tenendoti windows

ciao
 
OK, allora, incredibilmente sull'hosting linux che supporta il php il form funziona!!! Strano vero?? 0:)
Sono una schiappa...

Detto ciò:
il php genera un bel form e la funzione che conta i posti liberi funziona perfettamente,

http://www.bunkersoratte.it/form/formprenotazioni.php

come vedete indica 30 posti (il conteggio è 50 meno quelli che prenotano e io ho inserito a mano 20 posti nel database).

L'unica cosa che non funziona è che sembra non raccogliere i dati che fornisco...

Ora ci litigherò... Intanto criric mi hai salvato!! stavo diventando matta!

x borgo italia: rifarlo??? sarebbe bellissimo! ma forse non mi sono spiegata tanto bene... non sono capace!!! ringrazio di avere questo a disposizione e me lo tengo stretta! :) Però se avete consigli per pulire il codice ditemi pure!

Grazie ragazzi!!
 
Beh sei stata brava e veloce!

se avete consigli per pulire il codice ditemi pure!

comincerei dalla sicurezza come suggerisce borgo

potresti aggiungere una funzione nel file sezione.php che si occuperà di ripulire le stringhe prima di inserirle nel database

funzione suggerita da Alessandro in questo post http://forum.mrwebmaster.it/php/29239-funzione-equivalente-get_magic_quotes_gpc.html

sezioni.php aggiungiamo la funzione protect()

PHP:
function conta() {
    $connessione = mysql_connect("nomehosting.register.it", "nomeutente", "password") or die("Connessione non riuscita: " . mysql_error());
    mysql_select_db("nomedatabase", $connessione) or die("Errore nella selezione del database");
    $query = "SELECT  sum(persone) FROM utenti ; ";
    $result = mysql_query($query) or die(mysql_error());

    while ($row = mysql_fetch_array($result)) {
        $occupati = $row['sum(persone)'];
        $disponibili = (50 - $occupati);
        echo "$disponibili";
    }
    return $disponibili;
}

function protect($string) {
    $string = strip_tags($string);
    $string = htmlentities($string);

    if (function_exists('get_magic_quotes_gpc') && !get_magic_quotes_gpc()) {
        $string = addslashes($string);
    }

    return $string;
}

nel file formprenotazioni_execute.php la richiami prima di valorizzare le variabili
PHP:
require "sezioni.php";

foreach ($_POST as $key => $value) {
    $_POST[$key] = protect($value);
}

$persone = $_POST['persone'];
$telefono = $_POST['telefono'];
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$indirizzo = $_POST['indirizzo'];
$email = $_POST['mail'];

ripulisci con un ciclo tutti i dati che ti arrivano dalla form

Non ho testato, lascio a te l'onore

buon lavoro

avevo sbagliato nel foreach, ho modificato
 
Ultima modifica:
A parte il fatto che a questo punto vi siete meritati un ringraziamento a fondo pagina nel form di prenotazioni (che onore eh?)...

Io ormai appiccico nel codice tutto quello che mi dite, ma posso capire a cosa servono queste cose? Le ho messe, ma non è cambiato nulla. Mi pare di capire che serva ad evirare errori in compilazione del form e dato che il form, per ragioni che ancora non mi spiego, continua a non inviare dati al database ( ci interagisce solo in lettura ma non in scrittura) immagino che per ora non ne posso vedere gli effetti giusto?

Grazie della pazienza :)
 
No l'effetto ad occhio non si vede, è vero!

strip_tags() , htmlentities() , addslashes()

sono funzioni native di php e servono per ripulire le stringhe da caratteri indesiderati tipo apici etc

caratteri che potrebbero essere utilizzati da personaggi loschi ( e c'è ne sono che non hanno altro da fare) per inserire nel tuo database link o addirittura script dannosi.

Se vuoi informarti: http://php.html.it/articoli/leggi/89...sql-injection/.

Non ti inserisce perchè ci sara qualche errore, bisogna individuarli

se arrivo gli do un occhiata
 

Discussioni simili