Problemi passaggio valori da un Form ad Una classe con query mysql

Albertoesse

Nuovo Utente
21 Set 2012
14
0
0
Ciao a tutti,
vi chiedo un aiuto perchè sto avendo un problema che non mi era mai capitato e mi fa uscire di senno !!!!
Praticamente ho il classico form con cui invio i darti ad una pagina PHP.....il problema nasce quando inserisco la query in mysql_fetch_array() ho questo warning
"Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in." come se la query non fosse corretta!

Ho fatto delle prove stampando la query con echo....e tutto viene passato correttamente.....ho verificato i valori con print_r e con un var_dump sulla singola variabile in POST e tutto è corretto...
...qualcuno sa per caso cosa cribbio sta succedendo???

P.S. sono in locale ed uso Xampp....potrebbe essere questo???
P.P.S. questo metodo l'ho utilizzato per un altra sezione del sito e funziona perfettamente su questa pagina invece no :crying:
Form in html

HTML:
  <form action="profile.php" method="post" >
            Indirizzo E-mail:<input  name="user" />
            Password:<input name="pwd" type="password"  />
            Seleziona: <select name="selezione"><option>tabella</option></select>
            <input type="submit"   />
            </form>

Creo l'oggetto in profile.php

PHP:
	                        $loggo=new log_procedure();
				@$tabella=$_POST['selezione'];
				$loggo->login($tabella);

e questo è l'oggetto della classe log_procedure

PHP:
public function login($tabella){
				@$user=$_POST['user'];
				@$pwd=$_POST['pwd'];
				
				$query="SELECT * FROM ".$tabella."";
				$inter=mysql_query($query);
				echo $query; 
				while($c=mysql_fetch_array($inter))
				{
				if($user==$c['mail']&&$pwd==$c['pwd']){ 
					header("Location:profile.php"); 
					$_SESSION['loggo']=1;}
				
				}}
 
Ciao modifica l'esecuzione della query cosi
PHP:
$inter = mysql_query($query);
if (!$inter) {
    echo "errore $query : " . mysql_error();
}
e vedi cosa ti stampa
 
Ciao criric, grazie per la risposta.

Ho provato ma non mi da nessun tipo di messaggio.....ho riprovato quindi a inviare la query a mysql_fetch_array ma continua con il warning.....
 
Hai scritto cosi?
PHP:
public function login($tabella) {
        @$user = $_POST['user'];
        @$pwd = $_POST['pwd'];

        $query = "SELECT * FROM " . $tabella . "";
        
        $inter = mysql_query($query);
        if (!$inter) {
            echo "errore $query : " . mysql_error();
        }
        while ($c = mysql_fetch_array($inter)) {
            if ($user == $c['mail'] && $pwd == $c['pwd']) {
                header("Location:profile.php");
                $_SESSION['loggo'] = 1;
            }
        }
    }
perchè se non ti stampa il messaggio non è qui l'errore:
il messaggio che hai postato dice che mysql_fetch_array si aspetta un valore che non sia false
 
No avevo inserito un exit dopo il mysql_error();

togliendo l'exit l'errore che mi da è:

errore SELECT * FROM : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\riparazioni\admin\codice\php.php on line 29

Ma la sintassi della query è corretta, ho controllato che i valori passino correttamente in POST, ma appena passo tutto a mysql_fetch_array() si incasina tutto come se non passassi alcuna variabile
 
la query che abbiamo stampato è questa
SELECT * FROM
è sbagliata manca il nome della tabella
probabilmente non gli arriva come parametro per assicurartene metti un var_dump
PHP:
public function login($tabella) {
         var_dump($tabella);
 
Ho provato ad inserire exit ad ogni riga per capire dove fosse il prob, quello che non capisco è che tutto funziona perfettamente e non ho alcun tipo di errore poi appena faccio iniziare il ciclo while con mysql_fetch_array() mi restituisce errore anche sulle variabili che prima erano ok e non mi passa più il valore $tabella nella query...

P.S. intanto grazie della pazienza :D
 
Ho provato il codice che hai postato : è funzionante
intanto togli i silent @ servono solo a nascondere gli errori che sono molto importanti per capire dove si inceppa lo script poi armati di pazienza e con calma riguarda lo script da capo
 
dubito, io ho provato con wampp su un singolo file
PHP:
<?php

class log_procedure {

    public function login($tabella) {
        $user = $_POST['user'];
        $pwd = $_POST['pwd'];

        $query = "SELECT * FROM " . $tabella . "";
         $inter = mysql_query($query);
        if (!$inter) {
            echo "errore $query : " . mysql_error();
        }

        while ($c = mysql_fetch_array($inter)) {
            if ($user == $c['mail'] && $pwd == $c['pwd']) {
                header("Location:profile.php");
                $_SESSION['loggo'] = 1;
            }
        }
    }

}

if (isset($_POST['submit'])) {
    $loggo = new log_procedure();
    $tabella = $_POST['selezione'];
    $loggo->login($tabella);
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" >
    Indirizzo E-mail:<input  name="user" />
    Password:<input name="pwd" type="password"  />
    Seleziona: <select name="selezione"><option>tabella</option></select>
    <input type="submit" name="submit" value="invia" />
</form>
 
Finalmente ho scoperto il problema, è l'if nel ciclo while.....non so perchè ma levando quello scompaiono gli errori.
Sto cercando una soluzione funzionante
 
OK fatto!!!!:fonzie:

Posto la soluzione così magari può essere d'aiuto anche per altri! :D

Ho modificato la classe in questo modo

PHP:
class log_procedure {	
		
					
			
	public function login($tabella,$user,$pwd){
		 	 
				$query="SELECT * FROM $tabella";
				$inter=mysql_query($query);
				while($risultati=mysql_fetch_array($inter)){
					if($user==$risultati['mail']&&$pwd==$risultati['pwd']){	
						$_SESSION['loggo']="loggato";
					    echo "login";}
						
				}if($_SESSION['loggo']==NULL) { header("Location:index.php");}
	}
}

e la pagine html che richiama la classe è così
PHP:
$user=$_POST['user'];
			 	$pwd=$_POST['pwd'];
				$tabella=$_POST['selezione'];
				$loggo=new log_procedure();
				$loggo->login($tabella,$user,$pwd);

Grazie ancora a criric senza i suoi consigli col ciufolo che ne sarei uscito vivo!!!!!! :byebye:
 

Discussioni simili