problemi con mysqli

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Salve a tutti,

Sto iniziando a programmare in mysqli. I dati della connessione al db sono garantiti che funzionano. Però quando vado a memorizzare un dato mi da errore nella query. La mia domanda è la seguente: questa stringa posto ora è corretta per mysqli ???? Grazie.

inserimento dati stringa:

PHP:
$query=("INSERT INTO utenti (nome, cognome, username,email) VALUES('".$nome."','".$cognome."','".$username."','".$email."')");
$result=@mysql_query($query) or die("Error query DataBase:".mysql_error());

Spero che qualcuno mi possa correggere nello sbaglio. Grazie.
 
ciao
se stai usando mysqli giustamente non puoi usare le funzioni mysql che tra l'altro sono obsolete
PHP:
<?php
//...
//dato che usy msqli da qualche parte avrai
$link = mysqli_connect("localhost", "tuo_user", "tua_password", "tuo_db");
//...
//quindi correggi l'insert
$query=("INSERT INTO utenti (nome, cognome, username,email) VALUES('$nome','$cognome','$username','$email')");
$result=mysqli_query($link,$query) or die("Error query DataBase:".mysql_error()); 
//.....
?>

p.s.
non usare il silent @, gli errtori vanno eliminati non nascosti
 
Ciao ho sotituito la stringa come mi hai detto te, ma mi restituisce quest'errore:

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /volume1/web/utenti/Noelnewver/iscrizione.php on line 13 Error query DataBase:

Linsert attuale è il seguente:

$query=("INSERT INTO utenti (nome, cognome, username,email) VALUES('$nome','$cognome','$username','$email')");
$result=mysqli_query($link,$query) or die("Error query DataBase:".mysql_error());
 
Allora,

Ho visto ora il db e i campi sono completamente vuoti tranne ll'id ??? Come mai ???? Questo è il risultato.

risultato dell'inserimento dati su phpmyadmin.PNG
 
Per valorizzare tu dici in quetsa maniera ????

$idnome = mysql_real_escape_string(trim($_POST['idnome']));
$nome = mysql_real_escape_string(trim($_POST['nome']));
$username = mysql_real_escape_string(trim($_POST['username'])

E' solo un esempio che ho preso. Come vedi non ha mysqli è vecchio come esempio. Sicuramente ci sarà da correggerlo.
 
ciao
tu hai
....VALUES('$nome','$cognome','$username','$email')"
quindi da qualche parte prima della query devi avere qualcosa di simile

PHP:
<?php
//...
$nome=mysqli_real_escape_string($con, trim($_POST['nome']));
$cognome=mysqli_real_escape_string($con, trim($_POST['cognome']));
$username=mysqli_real_escape_string($con, trim($_POST['username']));
$email=mysqli_real_escape_string($con, trim($_POST['email']));
//...
?>

attento: NON puoi mescolare mysqli con mysql
 
Allora facciamo così per chiarimenti di quello che sto facendo . Qua di seguto ti posto l'intero file del modulo iscrizione:

modulo iscrizione:

PHP:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
 $(".controllo").attr("src","no.png"); 
 $(".controllo").hide();
 startTime();
 $("form").submit(function(event){
  event.preventDefault();
 });
 
 $("#nome").change(function(){
  var valore = $("#nome").val();
  var l = valore.length;
  if(l<2){
   $("#nome").val("");
   $("#nomectrl").attr("src","no.png");
   $("#nomectrl").show();
  }else{
   $("#nomectrl").attr("src","si.png");
   $("#nomectrl").show();
  }
 });
 
 $("#cognome").change(function(){
  var valore = $("#cognome").val();
  var l = valore.length;
  if(l<2){
   $("#cognome").val("");
   $("#cognomectrl").attr("src","no.png");
   $("#cognomectrl").show();
  }else{
   $("#cognomectrl").attr("src","si.png");
   $("#cognomectrl").show();
  }
 });
 
 $("#username").change(function(){
  var valore = $("#username").val();
  var l = valore.length;
  if(l<8){
   $("#username").val("");
   $("#usernamectrl").attr("src","no.png");
   $("#usernamectrl").show();
  }else{
   var campo = "username";
   loadXMLDoc(valore,campo);
  } 
 });
 
 $("#email").change(function(){
  var valore = $("#email").val();
  var i = valore.indexOf("@"); 
  if(i==-1){
   $("#email").val("");
   $("#emailctrl").attr("src","no.png");
   $("#emailctrl").show();
  }else{
   var campo = "email";
   loadXMLDoc(valore,campo);
  }  
 });
 
 $("#email2").change(function(){
  var valore = $("#email2").val();
  var valore2 = $("#email").val();
  if(valore===valore2){
   $("#email2ctrl").attr("src","si.png");
   $("#email2ctrl").show();
  }else{
   $("#email2").val("");
   $("#email2ctrl").attr("src","no.png");
   $("#email2ctrl").show();
  }
 });
 
});

function startTime() {
    var today=new Date();
    var dd = today.getDate();
    var mm = today.getMonth();
    mm++;
    var aaaa = today.getFullYear();
    
    if(dd<10){
     dd = "0"+dd;
    }
    if(mm<10){
     mm = "0"+mm;
    }
    
    $("#testa h2").html(dd+"/"+mm+"/"+aaaa);
}


function loadXMLDoc(valore,campo)
{
var xmlhttp;
if (window.XMLHttpRequest){
  xmlhttp=new XMLHttpRequest();
}else{
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
  if (xmlhttp.readyState==4 && xmlhttp.status==200){
     var risposta = xmlhttp.responseText;     
     var n = risposta.indexOf("VERO"); 
     if (n==-1){
      $("#"+campo+"ctrl").attr("src","si.png");
     }else{
      $("#"+campo+"ctrl").attr("src","no.png");
      $("#"+campo).val("");
     }
     $("#"+campo+"ctrl").show();
    }
  }
xmlhttp.open("GET","cerca.php?valore='"+valore+"'&campo='"+campo+"'",true); 
xmlhttp.send();   
}

function controllo(){
 var controlla = true;
 var campoNome = $("#nome").val();
 var campoCognome = $("#cognome").val();
 var campoUsername = $("#username").val();
 var campoEmail = $("#email").val();
 var campoEmail2 = $("#email2").val();

 if(campoNome===""){
  controlla=false;
 }
 if(campoCognome===""){
  controlla=false;
 }
 if(campoUsername===""){
  controlla=false;
 }
 if(campoEmail===""){
  controlla=false;
 }
 if(campoEmail2===""){
  controlla=false;
 }

 if(controlla){
  $("form").submit(function(event){
   $(this).unbind('submit').submit();
  });
 }
}
</script>  
<style>
#testa h1{
 margin:auto;
 text-align:center;
}
#testa h2{
 position:relative;
 top:-54px;left:20px;
}
#testa{
 margin-bottom:20px;
}
#corpo{
 
}
.controllo{
 width:32px;height:32px;
}
table, input{
 font-family:Arial, Sans-serif;
 font-size:150%;
}
table{
 margin-left:20px;
}
table td:nth-child(1){
 text-align:right;
}
</style>
</head>
<body>

<div id="testa">
 <h1>TITOLO DELLA PAGINA</h1>
  <h2></h2>

</div>

<div id="corpo">

<form action="iscrizione.php" method="GET">
<table>

<tr>
<td>Nome:</td>
<td><input id="nome" type="text" name="nome"/></td>
<td><img class="controllo" id="nomectrl" src="" /></td>
</tr>

<tr>
<td>Cognome:</td>
<td><input id="cognome" type="text" name="cognome"/></td>
<td><img class="controllo" id="cognomectrl" src="" /></td>
</tr>

<tr>
<td>Username:</td>
<td><input id="username" type="text" name="username"/></td>
<td><img class="controllo" id="usernamectrl" src="" /></td>
</tr>

<tr>
<td>Email:</td>
<td><input id="email" type="text" name="email"/></td>
<td><img class="controllo" id="emailctrl" src="" /></td>
</tr>

<tr>
<td>Ripeti Email:</td>
<td><input id="email2" type="text" name="email2"/></td>
<td><img class="controllo" id="email2ctrl" src="" /></td>
</tr>

<tr>
<td></td>
<td><button type="submit" onclick="controllo()">INVIA</button></td>
<td></td>
</tr>

</table>
</form>

</div>

</body>
</html>


Qua invece ti posto l'iscrizione vera e propria ossia la registrazione dati:

iscrizione.php

PHP:
<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        require_once("connettimysqli.php");

$id = mysqli_real_escape_string($con, $id);
$nome = mysqli_real_escape_string($con, $nome);
$cognome = mysqli_real_escape_string($con, $cognome);
$username = mysqli_real_escape_string($con, $username);
$email = mysqli_real_escape_string($con, $email);

$query=("INSERT INTO utenti (nome, cognome, username,email) VALUES('$nome','$cognome','$username','$email')");
$result=mysqli_query($con,$query) or die("Error query DataBase:".mysql_error());

if($result){
    echo("<p> Inserimento avvenuto correttamente <p>");
} else{
    echo("<br>Inserimento non eseguito");
}

        ?>
    </body>
</html>


Questi sono i due file in tutto questo non ti posto la connessionemysqli che sarebbe la connessione verso al db in quanto mi dice che mi sono connesso al db. Quindi ciò vuol dire che è giusta. La variabile interna alla connessione è:


Questa è la tabella utenti:

utenti:

PHP:
create table provadati (
	
idnome 			INT(11) NOT NULL AUTO_INCREMENT,
nome 		VARCHAR(80) NOT NULL,
cognome		VARCHAR(80) NOT NULL,
username	VARCHAR(80) NOT NULL,
    
PRIMARY KEY (idnome)
);

Vedi se per caso c'è qualche errore. Grazie. Il risultato attuale è sempre in bianco i campi.
 
ciao
verifica con un var_dump prima della querysringa
PHP:
<?php
//...
var_dump($nome,$cognome,$username,$email);
$query=("INSERT INTO utenti (nome, cognome, username, email) VALUES('$nome','$cognome','$username','$email')");
//...
?>
e vedi se sono valorizzati
 
ciao
se velorizzati ti riporta il valore esempio string(5) "pinco"
se non valorizzati NULL
se ti da NULL c'è un errore nella trasmissione dei $_POST, tipo nomi errati e/o diversi dai campi di input
 
cioa
ho visto ora una cosa nel form: method="GET"
non puoi usare il method="GET" e poi raccogliere i dati con $_POST['xxx']
o usi il method="POST" o raccogli i dati con $_GET['xxx']
il method="POST" è consigliabile
 
me lo puoi corregger ein modo tale che l'invio dati resti nella stessa pagina ??? Mi spiego meglio, ora ho due pagine una il modulo iscrizione e l'altra iscrizione.php. Quest'ultima la vorrei unire al modulo iscrizione ossia alla prima. Io non ci sono riuscito con mysqli, mentre con mysql si. Questo in pratica ti fa i controlli sull'iscrizione con le "V" se è libero e con le "X" se è occupato. Se riesco a risolvere questo sono al 2% del lavoro :P
 
ciao
ti schematizzo come fare tutto in una pagina
leggi i commenti
PHP:
<!DOCTYPE HTML">
<html>
<head>
<!-- tutto quello che ti serve nell'head -->
</head>
<body>
<?php
if(isset($_POST['log'])){//è stato premuto il submit
	require_once("connettimysqli.php");
	$nome=$_POST['nome'];
	//...
	$email=$_POST['email'];
	/*fai tutti i controlli necessari lato server
	i controlli lato client possono essere bypassati
	es. 
	nome e cognome solo letter
	indirizzo email valido
	verificare se password o user o entrambi sono gia esistenti
	potrsti usare una variabile di controllo chiamata $errore inizialmente vuota
	*/
	$errore="";
	//...controlli vari es indirizzo email
	$email=filter_var($email, FILTER_SANITIZE_EMAIL);
	if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
		$errore.="indirizzo email non valido<br>";
	}
	//e altri controlli
	//se NON errori la varibile $errore è rimasta vuota
	if($errore==""){
		//non errori: fai l'inserimento nel db
	}else{
		//ci sono stati degli errori quindi li mostri
		echo $errore;
	}
	//e quindi rimandi al form
	echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}else{
?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST">
<!-- tutti i campi di input che ti servono es, -->
<td><input id="nome" type="text" name="nome"/></td>
<!-- eccetera e metti il name al button-->
<td><button type="submit" name="log" onclick="controllo()">INVIA</button></td> 
</form>
<?php
}
?>
</body>
</html>
studiati lo schema e prova
 

Discussioni simili