Inserrimento/modifica php e mysql

  • Creatore Discussione Creatore Discussione djmatto
  • Data di inizio Data di inizio
Ti allego lo screenshot fatto al phpmyadmin e ti riscrivo il codi php di seguito:

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
        <title>Prenotazione posti ristorante</title>
    </head>
<body>

<?php
include('alcuneFunzioni.php');
include('funzioniConnessione.php');

function ControlloEmail($email){
	$result = eregi("^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$",$email);
	if($result == false){
		return false;
	}else{
		return true;
	}
}

?>

<?php
if(isset($_POST['giorno']))
{
    $messaggio = "";
    if(!soloCifre($_POST['giorno'], 2))
    {
        $messaggio = "Il giorno deve essere di due cifre";
        echo "    <strong>$messaggio</strong>\n";
    }
    else
    {
        $connessione = connetti();
             $nome=$_POST['nome'];
	         $cognome=$_POST['cognome'];
	         $email=$_POST['email'];
	         $giorno=$_POST['giorno'];
	         $mese=$_POST['mese'];
	         $posti=$_POST['posti'];
	         //qui verifichi i dati immessi se sono giusti
	         var_dump($nome); 
	         echo "<br>";
	         var_dump($cognome); 
	         echo "<br>";
	         var_dump($email); 
	         echo "<br>";
	         var_dump($giorno); 
	         echo "<br>";
	         var_dump($mese); 
	         echo "<br>";
	         var_dump($posti); 
	         echo "<br>";
	         //fine verifica dati immessi


	        $query = "INSERT INTO prenotazioni (nome, cognome, email, giorno, mese, posti) VALUES ('".$nome."', '".$cognome."','".$email."', '".$giorno."', '".$mese."', '".$posti."')"; 

	        $risultato = mysql_query($connessione, $query) //verifiva se va prima query o connessione secondo me query
	            or die("operazione di inserimento errata<br>\nErrore: ".mysql_error($connessione)); 
	         var_dump($risultato); //se FALSE non inserito
	        echo "<br>";

	        $numInseriti = mysql_affected_rows($risultato); 

	        $query = "SELECT posti FROM disponibilita WHERE giorno = '12 Marzo'";
	  		var_dump($query);
			echo "<br>";
	        $risultato = mysql_query($connessione, $query);  
	        var_dump($risultato); //se FALSE non letto
	        echo "<br>";
	        $row = mysql_fetch_array($risultato);
	        $posti_prima_di_prenotazione = $row['posti'];

	        var_dump($posti_prima_di_prenotazione); //verifica posti prima
	        echo "<br>";
	        $posti_dopo_prenotazione = (int)$posti_prima_di_prenotazione - (int)$posti;    
	        var_dump($posti_dopo_prenotazione); //verifichi il cacolo dovrebbe darti tipo variabile = INT 
	        echo "<br>";
	        $query = "UPDATE disponibilita SET posti = '$posti_dopo_prenotazione' WHERE giorno = '".$giorno."' AND mese = '".$mese."'"; 
	        var_dump($query);//vedi se la query è giusta 
	        echo "<br>";
	        $uppa=mysql_query($connessione, $query); 
	        var_dump($uppa);// se da FALSE hia un errrore e non uppa 
	        echo "<br>";
		
        if($numInseriti > 0 )
            echo "sono stati inseriti $numInseriti record\n";
        else
            echo "NESSUN RECORD INSERITO\n";
    }
    echo "<hr><a href=\"$_SERVER[PHP_SELF]\">torna alla pagina inserimento</a>\n";
}
else
{
    echo <<<MODULO__QUERY
    <h2>Prenotazioni posti ristorante</h2>
    <form action="$_SERVER[PHP_SELF]" method="POST">
    <table border="0" cellpadding="5">

        <tr>
            <td>nome:</td>
            <td><input type="text" size="30" name="nome"/></td>
        </tr>
        <tr>
            <td>cognome:</td>
            <td><input type="text" size="30" name="cognome"/></td>
        </tr>
		<tr>
            <td>email:</td>
            <td><input type="text" size="30" name="email"/></td>
        </tr>
		<tr>
            <td>giorno (solo giorno):</td>
            <td><input type="text" size="2" name="giorno"/></td>
        </tr>
		<tr>
            <td>mese:</td>
            <td><input type="text" size="10" name="mese"/></td>
        </tr>
		<tr>
            <td>posti:</td>
            <td><input type="text" size="2" name="posti"/></td>
        </tr>
        <tr>
            <td colspan="2" align="center"><input type="submit" value="inserisci"></td>
        </tr>
    </table>
    </form>
    
MODULO__QUERY;
}

?>
<hr><a href="index.html">torna alla pagina di gestione tabella</a>
</body>
</html>
 

Allegati

  • Immagine 1.jpg
    Immagine 1.jpg
    97,9 KB · Visite: 226
  • Immagine 2.jpg
    Immagine 2.jpg
    92,7 KB · Visite: 231
da una prima occhiata alle tabelle ho notato alcune, a mio parere incongruenze.
tabella prenotazioni hai messo primary key il campo giorno, attenzione non possono coesistere due valori uguali, quindi se pinco prenota per il 12 marzo e dopo caio prenota sempre per il 12 marzo, non hai due prenotazioni, ma la seconda sovrascive la prima eliminandola
(attenzione lo stesso discorso vale se avesse prenotato il 12 aprile)
stesso discorso vale per la tabella disponibilita, se il giorno 12 ho 4 posti ed il 13 ancora 4 posti il tredici sovrascrive il 12.
io avrei fatto le tabelle così

tabella prenotazioni:
id int(12) autoincrement primary key
nome varchar(30)
cognome varchar(30)
email varchar(30)
giorno varchar(2)
mese varchar(10)
posti int (2)

tabella:disponibilita
id int(12) autoincrement primary key
giorno varchar(2)
mese varchar(30)
posti int(2)
 
Ho modificato la tabella come mi hai detto ma nell'id l'autoincremento come e dove lo devo dare?

Inoltre ho modificato il codice che mi hai dato tu cambiando da mysql a mysqli ed il risultato è diventato:

string(4) "Luca"
string(8) "Buffetti"
string(14) "[email protected]"
string(2) "12"
string(5) "marzo"
string(1) "3"
bool(true)
string(57) "SELECT posti FROM disponibilita WHERE giorno = '12 Marzo'"
object(mysqli_result)#2 (0) { }
NULL
int(-3)
string(76) "UPDATE disponibilita SET posti = '-3' WHERE giorno = '12' AND mese = 'marzo'"
bool(false)
NESSUN RECORD INSERITO

e nella tabella prenotazioni così c'è la prenotazione
 
ciao
io lavoro con mysql, dipende dal host cosa ha installato
per la tabella l'id devi creare il campo e con phpmyadmin dargli l'auto increment e primarykey
 
Allora io lo uso in locale ed ho MAMP per il mac con PHP5 e mysql5!

Per quanto riguarda id ed autoincrement l'ho fatto e sembra vada bene, anche se ancora comunque l'update non lo faccia ancora e non so perchè mi sta facendo diventare matto!
 
ciao
hai letto (o visto) “la storia infinita”?:rolleyes:
questa è la versione che ho io:

The AppServ Open Project - 2.5.9 for Windows

phpMyAdmin Database Manager Version 2.10.2
PHP Information Version 5.2.3

• Apache Web Server Version 2.2.4
• PHP Script Language Version 5.2.3
• MySQL Database Version 5.0.45
• phpMyAdmin Database Manager Version 2.10.2

a me mysqli_query da errore (del resto non so su mac), nel manuale ufficiale di php non esiste msqli (se cerchi msqli_eccetera ti rimanda a mysql_eccetera)

prova comunque una cosa.
fai un file php chiamato connetti.php

PHP:
<?php
//-------**pagina per connessione da fare include "connetti.php"**------------
//---variabili di connessione----------------------------------------
$host = 'localhost';     //nome host
$username = 'xyzt';      //user name
$password = 'xyzw';  //password
$db = 'mio_db';            // nome data base
//---connessione----------------------------------------------------
$conn = @mysql_connect($host,$username,$password) or die (mysql_error());
$sel = @mysql_select_db($db) or die (mysql_error());
?>

attento: togli tutto l’html


nella tua pagina elimina tutti i riferimenti all funzione di comnnesione

in testa alla pagina scrivi

include_once “connetti.php”

in tutte le mysql_query($connessione, $query);

elimina $connessione, ti connetti una volta per tutte con l’include, non devi aprire una connessione ad ogni query

e scrivi solamente

mysql_query($query) or die();//se ti serve l’or die

non mi ricordo se hai messo mysql_close(), se si toglilo pure, tanto si chiude chiudendo la pagina e da più fastidio che altro
 
Ciao
C’è (anzi era) un grosso errore di logica, andavi a inserire con WHERE giorno e mese, ma la tabella disponibilita era “vergine” e quindi non esisteva un record con campo 12 e uno marzo, non esistendo non inserisce.
Ho fatto le correzioni allo script e funziona, aggiornando i posti disponibili nella giornata richiesta.
Devi fare una correzione con mysqladmin sulla tabella disponibilita campo posti: nell’opzione “predefinito” inserisci il numero di posti totali (esempio 30)
Se fai girare lo script e vai a vedere il database vedrai che ti aggiornano.
A te poi l’eliminazione delle prenotazioni e disponibilita ormai passate e quindi inutili.
Un piccolo consiglio: quando fai l’inserimento in db i valori dovrebbero essere controllati onde evitare injection pericolose
Ecco lo script

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional"> 
<html> 
    <head> 
        <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> 
        <title>Prenotazione posti ristorante</title> 
    </head> 
<body> 

<?php 
//include('alcuneFunzioni.php'); 
include_once'connetti.php'; 

function ControlloEmail($email){ 
    $result = eregi("^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$",$email); 
    if($result == false){ 
        return false; 
    }else{ 
        return true; 
    } 
} 

?> 

<?php 
if(isset($_POST['giorno'])) 
{ 
    $messaggio = ""; 
    if(strlen($_POST['giorno'])< 2) 
    { 
        $messaggio = "Il giorno deve essere di due cifre"; 
        echo "    <strong>$messaggio</strong>\n"; 
    } 
    else 
    { 
            $nome=$_POST['nome']; 
            $cognome=$_POST['cognome']; 
            $email=$_POST['email']; 
            $giorno=$_POST['giorno']; 
            $mese=$_POST['mese']; 
            $posti=$_POST['posti'];
			//inserisco la prenotazione
            $query = "INSERT INTO prenotazioni (nome, cognome, email, giorno, mese, posti) VALUES ('".$nome."', '".$cognome."','".$email."', '".$giorno."', '".$mese."', '".$posti."')";  
            $risultato = mysql_query( $query) //verifiva se va prima query o connessione secondo me query 
                or die("operazione di inserimento errata<br>");  
			//interrogo per verificare se la data esiste già oppure no in disponibilita
            $query = "SELECT posti FROM disponibilita WHERE giorno = '".$giorno."' AND mese='".$mese."'"; 
            $risultato = mysql_query($query);
			$datace=mysql_num_rows($risultato);//verifico se la data è già inserita o no
			if($datace<1){//la data non esiste in diponibilita, quindi l'inserisco
				$query=mysql_query("INSERT INTO disponibilita (giorno, mese) VALUE('".$giorno."', '".$mese."')");
			}//fine if data esiste
			//riinterrogo il data base in quanto ora c'è la data
			$query = "SELECT posti FROM disponibilita WHERE giorno = '".$giorno."' AND mese='".$mese."'"; 
            $risultato2 = mysql_query($query);
			$row = mysql_fetch_array($risultato2); 
            $posti_prima_di_prenotazione = $row['posti']; 
            $posti_dopo_prenotazione = (int)$posti_prima_di_prenotazione - (int)$posti;     
            $query = "UPDATE disponibilita SET posti = '$posti_dopo_prenotazione' WHERE giorno = '".$giorno."' AND mese = '".$mese."'";  
            $uppa=mysql_query($query);  
    		echo "<hr><a href=\"$_SERVER[PHP_SELF]\">torna alla pagina inserimento</a>\n"; 
} 
else 
{
?>
    <h2>Prenotazioni posti ristorante</h2> 
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> 
    <table border="0" cellpadding="5"> 
        <tr> 
            <td>nome:</td> 
            <td><input type="text" size="30" name="nome"/></td> 
        </tr> 
        <tr> 
            <td>cognome:</td> 
            <td><input type="text" size="30" name="cognome"/></td> 
        </tr> 
        <tr> 
            <td>email:</td> 
            <td><input type="text" size="30" name="email"/></td> 
        </tr> 
        <tr> 
            <td>giorno (solo giorno):</td> 
            <td><input type="text" size="2" name="giorno"/></td> 
        </tr> 
        <tr> 
            <td>mese:</td> 
            <td><input type="text" size="10" name="mese"/></td> 
        </tr> 
        <tr> 
            <td>posti:</td> 
            <td><input type="text" size="2" name="posti"/></td> 
        </tr> 
        <tr> 
            <td colspan="2" align="center"><input type="submit" value="inserisci"></td> 
        </tr> 
    </table> 
    </form> 
<?php
} //fine if else generale
?> 
<hr><a href="index.html">torna alla pagina di gestione tabella</a> 
</body> 
</html>

ho tolto i var_dump e l'eredoc perche a me continuava a dare errore

se funzia anche a te mi devi:beer:
 
Senti scusa ma io non capisco perchè a me non funzioni!Mi da pagina bianca!

Il mio file connetti.php è:

PHP:
<?php

$host = 'localhost';  
$username = 'root';      
$password = 'root'; 
$db = 'ristorante';        

$conn = @mysql_connect($host,$username,$password) or die (mysql_error());
$sel = @mysql_select_db($db) or die (mysql_error());
?>

ed il file inserisci.php è quello che mi hai dato tu!
 
ciao
a questo punto non so più cosa fare, come ho detto a me in locale funzia
l'unica cosa che vedo è che nel file connetti.php metti

$username = 'root';
$password = 'root';

non so nel tuo caso, ma nel mio ho due nomi diversi

$username = 'root';
$password = 'pass';

non so, verifica l'user e pass che utilizzi per accedere al db
 
Senti scusa ancora per la rottura ma non mi funziona provo a dirti la mia configurazione fosse quella!

PHP version 5.2.6
Apache 2.0.59 (Unix) PHP
mysql 5.0.41
mysqli 5.0.41
phpmyadmin 2.11.7.1
 
ciao
la versione è simile alla mia, non so penso che sia lo stesso.
verifica gli inserimenti.
la pag bianca la da all'inizio appena chiamata? cioè non appare nemmeno il form?
proprio non capisco. ho riprovato sia mantenedo la stessa data di prenotazione che inserendone una nuova e fa tutti gli aggiornamenti.
esempio
se inserisco
12
marzo
4
i posti disp il 12 marzo diventano 26
se nuovamente (altra prenotazione)
12
marzo
5
i posti disp il 12 marzo diventano 21
se
13
marzo
8
i posti disp il 12 marzo rimangono 21
i posti disp il 13 marzo diventano 22
ecc...

non so proprio più cosa dirti, l'unica cosa è ricontrollare i nomi delle tabelle e dei campi (attenzione minuscole/maiscole) è una cosa che abbiamo fatto diversamente e i dati sul file connetti.php.
se hai fatto copia incolla con il mio script sono le uniche cose che possono essere diverse
 
Senti sei fantastico funziona tutto perfettamente!!!

PS: Non so perchè ma se copiavo tutto il codice non lo accettava mentre copiando un pezzo alla volta ora funziona! Veramente incomprensibile!!!

Intanto grazie mille sei stato fantastico poi adesso provo a vedere come mai ma ho dei problemi con il sistema di login usando il db mysql!!!!
 
Senti scusa l'ultima rottura, credo, ma come posso fare per stampare tutto il contenuto di una tabella del database?

Ti spiego io ho salvato, anzi abbiamo, le prenotazioni sul database.
Adesso però io ho creato il login dell'amministratore con il php per accedere a diverse sezioni protette e qui volevo mettere una pagina prenotazioni.php in cui mi stampa tutte le prenotazioni avvenute!
Grazie infinite ancora una volta!!!!
 
Senti scusa forse mi sono spiegato male io vorrei richiamare tutti i campi di una tabella e poi mi restituisca tutti i campi!!!
 
ciao
per stampare avevo inteso proprio "stampare" tu vuoi estarre tutti i campi di una tabella? usi la select

PHP:
<?php
$query=mysql_query("SELECT * FROM mia_tabella");//qui aggiungi le condizioni con WHERE e l'ordine con ORDER BY se ti servono
?>
poi ad es. fai
<table>
<tr>
<td>campo uno</td>
<td>campo due</td>
<td>campo tre</td>
</tr>
<?php
while($riga=mysql_fetch_array($query)){
   $uno=$riga['campo_uno'];
   $due=$riga['campo_due'];
   $tre=$riga['campo_tre'];
   echo "<tr>";
   echo "<td> $uno </td>";
   echo "<td> $due </td>";
   echo "<td> $tre </td>";
   echo "</tr>";
}//fine while
?>
</table>

così a monitor hai tutti i campi ordinati
 
Borgo scusa ma ho l'ultimo problema:
Non mi funziona più la pagina di consultazione mi appare il form ma poi quando clicco su consulta mi da pagina bianca, ma la funzione di connessione funziona perchè le altre funzionano, anche la pagina delle prenotazioni va perfetta grazie a te!!!!

Il codice è:

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
        <title>Consultazione disponibilità Ristorante</title>
    </head>
<body>


<?php
//include('funzioniConnessione.php');
//include('alcuneFunzioni.php'); 
include_once'connetti.php';  
?>

<?php
if(isset($_POST['giorno']))
{
    $messaggio = "";
    if(!soloCifre($_POST['giorno'], 2))
    {
        $messaggio = "Il giorno deve essere composto da due cifre";
        echo "    <strong>$messaggio</strong>\n";
    }
    else
    {
        $query = "SELECT * FROM disponibilita WHERE giorno = \"$_POST[giorno]\"";
        $risultato = mysql_query($query)
             or die("query errata<br>");
    
        if(mysql_num_rows($risultato) > 0 )
            mostraTabellaRisultatoQuery($risultato, "border=\"1\" cellpadding=\"2\"");
        else
            echo "NESSUN RECORD";
    }
    echo "<hr><a href=\"$_SERVER[PHP_SELF]\">torna alla pagina di consultazione</a>\n";
}
else
{
?> 
    <h2>Consultazione disponibilit&agrave; tavoli</h2>
    <form action="<?php echo $_SERVER[PHP_SELF]; ?>" method="POST">
    <table border="0" cellpadding="5">
        <tr>
            <td>Giorno (2 cifre):</td>
            <td><input type="text" size="2" name="giorno"/></td>
        </tr>
        <tr>
            <td colspan="2" align="center"><input type="submit" value="interroga"></td>
        </tr>
    </table>
    </form>
 <?php   
}
?>
<hr><a href="gestioneTabella.html">torna alla pagina di gestione tabella</a>
</body>
</html>
 
ciao
1.il file connetti.php è nella stessa cartella della pagina di consultazione?

2.come al solito metti

if(isset($_POST['giorno']))
var_dump($_POST['giorno']);

{

e guarda cosa ti risulta
 

Discussioni simili