PHP: errore connessione database

Matilde1

Nuovo Utente
31 Ago 2017
4
0
1
30
Buonasera a tutti.
Ho un form per inserire le credenziali di un utente che vuole registrarsi su un sito.

PHP:
<?php
session_start();
?>
<!doctype html>
<html>
<head>
<script type="text/javascript" src="new.js">
</script>
 <?php require("head.html") ?>
</head>
<body>
<div id="wrapper">
<div id="headerwrap">
 <div id="header">
<?php include_once ("header.php"); ?>
</div>
</div>
<div id="menuwrap">
<div id="menu">
<?php include_once("menu.php"); ?>
</div>
</div>

<div id="contentwrap">
<div id="content">
<form name="f" method="post" action="creato.php" onSubmit="verifica_form()">
<p>Inserisci il nickname che preferisci: <input type="text" name="nickname"> </p>
<p>Inserisci la password: <input type="password" name="psw1"></p>
<p>Reinserisci la password: <input type="password" name="psw2"></p>
<p>Inserisci l'importo che desideri depositare sul borsellino: <input type="text" name="borsellino"></p>

<input type="submit" name="primobottone" value="CREA NUOVO UTENTE">
<input type="reset" name="secondobottone" value="CANCELLA">
</div>
</div>
</form>
<div id="footerwrap">
<div id="footer">
<?php include_once("footer.php"); ?>
</div>
</div>
</div>
</body>
</html>
Collegato ad un file .js

Codice:
function verifica_form(){
    
    nick=document.f.nickname.value;
    pswd1=document.f.psw1.value;
    pswd2=document.f.psw2.value;
    
    
    var re=/^([a-zA-Z]|\$)([a-zA-Z]|[0-9]|\$){2,7}$/;
    
    var re0=/\d/;
    
    var re1=/^\d{4}$/;
    
    if(!re.test(nick)&&!re0.test(nick)){
        window.alert("Il formato del nickname è sbagliato");
    }
    if(!re1.test(pswd1)&&!re1.test(pswd2)){
        window.alert("Il formato della password è sbagliato");
    }
    
    
}

Questo dovrebbe inviare i dati alla pagina creato.php solo nel caso in cui il formato dei dati inseriti sia corretto. Altrimenti deve rimanere nella stessa pagina e segnalare l'errore.
Qualcuno ha idee sul come fare??

Il mio codice per la pagina creato.php è:
PHP:
<?php
session_start();
?>
<!DOCTYPE HTML>
<html>
  <head>
     <?php require("head.html") ?>
   </head>
   <body>
<div id="wrapper">

<div id="headerwrap">
 <div id="header">
 <?php include_once ("header.php"); ?>
</div>
</div>
<div id="menuwrap">
<div id="menu">
<?php include_once("menu.php"); ?>
</div>
</div>

<div id="contentwrap">
<div id="content">

<?php

$nickname=trim($_POST['nickname']);
$password=trim($_POST['psw1']);
if($_POST['borsellino']==""||$_POST['borsellino']=="0"){
    $soldi=100;
}else{
$soldi=trim($_POST['borsellino']);
}
$con=mysqli_connect("localhost","uPower","SuperPippo!!!","magazzino");
if(mysqli_connect_errno()){
    echo "<p>Errore di connessione al DBMS:".mysqli_connect_error()."</p>\n";
}else {
    
    
    $query= "INSERT INTO utenti(nicK,pass,soldi)VALUES('$nickname','$password','$soldi')";
    $result=mysqli_query($con,$query);
    if($result){
        echo ("La registrazione è avvenuta con successo!");
    }else{
        echo "inserimento non eseguito";
    }
}
?>
</div>
</div>

<div id="footerwrap">
<div id="footer">
<?php include_once("footer.php");?>
</div>
</div>
</div>
</body>   
</html>

Grazie mille a chiunque mi risponda.
 
Ultima modifica:
Scusa ma non mi è chiaro cosa dovrei fare. :)
Come dovrei cambiare il mio codice?
 
ciao
intanto farei gli opportuni controlli lato server (i controlli con js sono belli, ma quelli lato server più sicuri)
quimdi esempio
1) verificare la correttezza dei dati inseriti
nick che non sia vuoto e es. composto solo da lettere e/o con numeri
pass che non sia vuota e comunque prima dell'insert è bene codificarla come minimo con sha1
che borsellino sia un numero intero o float
2) dovresti controllare che nick e/o pass non siano duplicati, altrimenti ti puoi ritrovare due utenti diversi con stesso user e pass
ti schematizzo
PHP:
<?php
//....
$nickname=trim($_POST['nickname']);
$password=trim($_POST['psw1']);
if($_POST['borsellino']==""||$_POST['borsellino']=="0"){
    $soldi=100;
}else{
$soldi=trim($_POST['borsellino']);
}
//fai i controlli
if($controllo=='errore'){
    //in caso di errore
    header('Location: pagina_a_cui_vuoi_rimandare.php');
    exit();
}else{
    //tutto il resto che devi fare se i dati sono corretti
}
?>

dimenticavo, dato che ti ho indicato per reindirizzare header la parte html ti conviene fare prima i controlli e mettere la parte html nell'else, header deve venire prima di qualsiasi output
 
ho guardato anch'io il codice,
prima di tutto 2 modifiche necessarie per il funzionamento,
HTML:
function verifica_form()
{
    var verOK=true;

    nick=document.f.nickname.value;
    pswd1=document.f.psw1.value;
    pswd2=document.f.psw2.value;

    var re=/^([a-zA-Z]|\$)([a-zA-Z]|[0-9]|\$){2,7}$/;

    var re0=/\d/;

    var re1=/^\d{4}$/;

    if(!re.test(nick)&&!re0.test(nick)){
        window.alert("Il formato del nickname è sbagliato");
        verOK=false;
    }
    if(!re1.test(pswd1)&&!re1.test(pswd2)){
        window.alert("Il formato della password è sbagliato");
        verOK=false;
    }
    return verOK;
}
la funzione deve restituire vero o falso in funzione dei controlli
da usare con il form (vedi onsubmit),
nel contempo due div rovesciate rispetto alla loro "apertura"
HTML:
    <div id="contentwrap">
        <div id="content">
            <form name="f" method="post" action="creato.php" onSubmit="return verifica_form()">
                <p>Inserisci il nickname che preferisci: <input type="text" name="nickname"> </p>
                <p>Inserisci la password: <input type="password" name="psw1"></p>
                <p>Reinserisci la password: <input type="password" name="psw2"></p>
                <p>Inserisci l'importo che desideri depositare sul borsellino: <input type="text" name="borsellino"></p>
                <input type="submit" name="primobottone" value="CREA NUOVO UTENTE">
                <input type="reset" name="secondobottone" value="CANCELLA">
            </form>
        </div>
    </div>
    <div id="footerwrap">
 
L'errore era che php non mi leggeva la funzione in formato .js
Facendo la funzione nel tag <script> nello stessa pagina del form ho risolto.
Grazie a tutti!
 
Facendo la funzione nel tag <script> nello stessa pagina del form ho risolto.
Grazie a tutti!
prego, non c'è di che,

anch'io avevo messo js nello stesso script del form, per non dover aprire troppi files per le modifiche
ma senza onSubmit="return verifica_form()" e relativo return dal js non ha funzionato

quando rendi nota una soluzione, per cortesia, che sia giusta, altrimenti evita
 
Ciao a tutti mi collego a questa discussione perchè ho un problema con la connessione alla tabella di un mio db...mi spiego meglio...

Ho creato un form di raccolta dati con questo codice

HTML:
<div id="form">
        <form style="margin-left: 25px; margin-top: 290px;" action="../grazie.php">
            <fieldset>
                <div class="form-group">
                    <label for="telefono">Telefono</label>
                        <input id="telefono" class="form-control" type="tel" placeholder="Inserisci il telefono..." />
                </div>
                <div class="form-group">
                    <label for="telefono">Email</label>
                        <input id="telefono" class="form-control" type="text" placeholder="Inserisci la tua mail..." />
                </div>
                <div class="checkbox">
                    <label>
                    <input type="checkbox" /> Normativa privacy
                    </label>
                </div>
                    <button class="btn btn-default" type="submit">Invia</button></fieldset>
        </form>
</div>

Ora voglio che questi dati raccolti vengano inseriti in una tabella del mio db e quindi ho creato uno script per farlo...questo è il codice della pagina grazie.php...

PHP:
<?php

$telefono = $_POST ['telefono'];
$email = $_POST ['email'];

$db_host = 'xx.xx.xxx.xx';
$db_user = 'Sqlxxxxxxx';
$db_pass = 'xxxxxxxxx';
$db_name = 'Sqlxxxxxxx_x';

$cn = new mysqli($db_host, $db_user, $db_pass, $db_name);


if ($cn->connect_error) {
    echo "Connessione fallita: ". $cn->connect_error . ".";
exit();}
    

$sql = "INSERT INTO nome_tabella (email, telefono) VALUES ('$telefono','$email')";

if (!$cn->query($sql)) {
  echo "Errore della query: " . $cn->error . ".";
}

else{
  echo "Registrazione effettuata correttamente.";
}
$cn->close();
?>

La tabella nome_tabella l'ho creata preventivamente tramite mysqladmin di aruba.

Quando invio i dati attraverso la form visualizzo nella pagina grazie.php questo errore:

Errore della query: Table 'nome_db.nome_tabella' doesn't exist.

cosa ho sbagliato?
sapete aiutarmi?
Vi ringrazio anticipatamente e mi scuso per gli errori ma sono un neofita :)
 
ciao
verifica di aver creato la tabella nel db
verifica che il nome della tabella sia lo stesso che usi nella query, se la tabella si chaiama pinco nella query devi mettere INSERT INTO pinco(ecc...

dimenticavo, generalmente aruba mette a disposizione 5 db, verifica cdi aver creato la tabella nel db con nome che hai scritto in $db_name

ultimo, ma non meno importante: abbandona le vecchie funzioni php mysql_xy deprecate e passa alle nuove mysqli_xy

p.s.
non conviene accodarsi a vecchie discussioni, creane una tua
 
Ciao Borgo scusami ma credevo fosse meglio ripescare qualcosa di simile per evitare il sovraffollamento di topic...prossima volta che posto qualcosa apro una discussione nuova....

Visto che ci siamo ti ringrazio per lo spunto perchè effettivamente avevo collegato lo script ad un altro db di aruba...

Detto questo colgo l'occasione per chiederti perchè ora registro qualcosa nel db ma i campi sono vuoti, c'è un problema con le varibili o forse nell'html che ho postato ho non ho inserito l'attributo name nel tag <input>?

Grazie in anticipo!
 
ciao
si scusa non avevo guardato il form, mi ero limitato alla connessione.
si negli input ci vuole il name, altrimenti il relativo $_POST non sa cosa leggere, anzi rimane vuoto,
poi attento vedo che hai due input uno telefono e uno email, quindi name='telefono' e name='email' anche ci chek devono avere il name
poi vedo che l'action è ad un'altra pagina e quindi ok, ma farai tutto nella stessa pagina anche il pulsante di submit deve avere un name
 
Si ho corretto gli errori ed adesso registro correttamente il dato. Grazie :)

Ora per inserire un controllo sui campi lo posso fare solo con uno script in pagina dove c'è la form?Utilizzo wordpress ma la form l'ho creata scrivendo il codice nel editor del CMS...non vorrei istallare un plugin ma farlo manualmente io....come posso fare?
Tieni conto che la action richiama una pagina dove è inserito lo script per la registrazione dei dati...si può fare li?
 
ciao
definendo il type dell'input hai un certo controllo. es
HTML:
<input type="email" placeholder="Inserisci la tua mail..."/>
se non scrivi un indirizzo sintatticamente valido non ti consente di proseguire, analogo per altri type tel, number...
però per un controllo più sicuro (non al 100% in rete non esiste) è meglio fare i controlli lato server, es di controllo dell'email
PHP:
//....
$email=$_POST['email'];
$email=filter_var($email, FILTER_SANITIZE_EMAIL);//pulisce
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
    //indirizzo non sintatticamente valido
    //riorno automatico al form
    exit();
}
//....
gli altri $_POST li puoi prima pulire (es. trim e/o strip_tags) e poi verificare con preg_match

però una cosa dici che usi wp, che io non uso, so che non è semplice modificare le pagine generate da wp, quindi ti converrebbe usare i vari plug messi a disposizione
 

Discussioni simili