Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    problema inserimento su mysql

    allora sto facendo un sito in php e utilizzando mysql e sto cercando di fare un semplice chat utilizzando database però ho dei poblemi
    vi posto il codice del controllo paremetri login
    Codice PHP:
    $user $_POST['user'];    
    $psw $_POST['psw'];
    session_start();      
    include 
    'db.inc.php';          
    try            {      
            
    $sql "SELECT * FROM accesso WHERE user = '$user' AND psw = '$psw' ";        
            
    $result $pdo->query($sql);                
            
    $_SESSION['id'] = $res['idUtente'];        
    }            
    catch(
    PDOException $e)            
    {         
           
    $error "Errore nell'esecuzione della query ";              
           include 
    'error.html.php';              
           exit();           
     }                          
     
    $nr $result->rowCount();             
           if(
    $nr==1){             
                    
    $risq "Accesso riuscito.";           
                    
    header('Location:chat.php');            
            }            
     else
           {              
                   
    $risq "Accesso non riuscito.";       
                   
    header('Location:index.html');                

    e qui il codice per l'inserimento dei messaggi(il database è formato da accesso con i vari utenti e password e la tabella messaggio dove contiene il msg la data e id_utente il vincolo di integrità referenziale, un utente può inviare molti messaggi, un messaggio è inviato da un solo utente)
    Codice PHP:
    include 'db.inc.php';        
    session_start();               
    $id $_POST['user'];        
    $msg htmlspecialchars($_POST['azione']);                
    try        {            
    $sql "SELECT idUtente FROM accesso WHERE user ='$user' ";            
    $result $pdo->query($sql);        
    }        catch(
    PDOException $e)        {            
    exit();        
    }               
    $row $result->fetchAll();                          
    try        {            
    $sql 'INSERT INTO messaggio(msg,data, id_utente) VALUES(:msg, NOW(), :id)';            
    $st $pdo->prepare($sql);               
    $st->bindValue(':msg' $msgPDO::PARAM_STR);            
    $st->bindValue(':id' $_SESSION['id'], PDO::PARAM_INT);            
    $st->execute();        
    }        catch(
    PDOException $e)        {      
    exit();      
    }               
    header("Location: visualizza.php"); 
    adesso il mio problema è che l'inserimento non funziona non inserisce nessun messaggio però ho notato qualcosa che se faccio in questo modo riesco a inviare il messaggio con la data ma ovviamente con il campo id_utente impostato a 0
    Codice PHP:
    $sql 'INSERT INTO messaggio(msg,data) VALUES(:msg, NOW())';            
    $st $pdo->prepare($sql);               
    $st->bindValue(':msg' $msgPDO::PARAM_STR);                
    $st->execute(); 
    sapete aiutarmi e dirmi dove ho commesso errori. saluti
    Ultima modifica di matt 95; 15-05-2014 a 21:14

  2. #2
    Il codice è gravemente fallato sotto il profilo delle sql injection... e questa è la cosa più grave.

    Nel prima parte del codice usi $res ma la variabile non esiste.
    La creazione della variabile di sessione è collocata in un punto errato nella logica dello script.

    Nella seconda parte del codice fai una select per prendere l'id dell'utente ma questo (in teoria) dovrebbe essere prelevato dalla sessione.

    Poi vi è un login globalmente errato. Da dove iniziamo?
    Ultima modifica di oly1982; 15-05-2014 a 22:08
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  3. #3
    si result non res
    ma passiamo a sql inejection va beh sul controllo login l'ho dimenticato di mettere ma l'ho già sistemato solo che ho copiato dalla mia prova locale.
    cosa dovrei correggere adesso? login globalmente errato che vuol dire?

  4. #4
    Quote Originariamente inviata da matt 95 Visualizza il messaggio
    si result non res
    ma passiamo a sql inejection va beh sul controllo login l'ho dimenticato di mettere ma l'ho già sistemato solo che ho copiato dalla mia prova locale.
    cosa dovrei correggere adesso? login globalmente errato che vuol dire?
    Posta il codice corretto e discutiamo su quello.
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  5. #5
    ecco qui
    Codice PHP:
    <?php
    session_start
    ();$user $_POST['user'];$psw $_POST['psw'];                    
    include 
    'db.inc.php';                 
    try{
    $sql "SELECT * FROM accesso WHERE user = :user AND psw = :psw ";$st $pdo->prepare($sql);$st->bindValue(':user' $userPDO::PARAM_STR);$st->bindValue(':psw' $pswPDO::PARAM_STR);$st->execute();
     
    $res $st->fetch(PDO::FETCH_ASSOC);$_SESSION['id'] = $res['idUtente'];         if($res==1){ $risq "Accesso riuscito."header('Location:chat.php'); } else{$risq "Accesso non riuscito.";header('Location:index.html'); }}catch(PDOException $e) {$error "Errore nell'esecuzione della query ";
     include 
    'error.html.php';exit(); }      ?>
    però ora se inserisco i dati corretti mi ricarica la home come se i dati fossero errati

    Ultima modifica di matt 95; 16-05-2014 a 11:16

  6. #6
    scrivo il codice in maniera più chiara visto che non posso modificare il messaggio
    Codice PHP:
     <?php
                  session_start
    ();
                  
                  
    $user $_POST['user'];
                  
    $psw $_POST['psw'];
                
                
                  include 
    'db.inc.php'
                      
                  try
                  {
                      
    $sql "SELECT * FROM accesso WHERE user = :user AND psw = sw ";
                      
    $st $pdo->prepare($sql);
                      
    $st->bindValue(':user' $userPDO::PARAM_STR);
                      
    $st->bindValue('sw' $pswPDO::PARAM_STR);
                      
    $st->execute();
                      
    $res $st->fetchAll();
                      
    $_SESSION['id'] = $res['idUtente'];
                      
                      if(
    $res==1){
                          
    $risq "Accesso riuscito.";
                          
    header('Location:chat.php');
                      } 
                      else{
                          
    $risq "Accesso non riuscito.";
                          
    header('Location:index.html');
                          }
                      
                  }
                  catch(
    PDOException $e)
                  {
                      
    $error "Errore nell'esecuzione della query ";
                      include 
    'error.html.php';
                      exit();
                  }  
     
    ?>
    mi sapete dirmi cosa è sbagliato? comunque poi c'è la parte dell'inserimento messaggio

  7. #7
    la condizione

    Codice PHP:
    if($res==1
    è errata (quasi sempre vera).
    Devi fare una query con COUNT(*)

    La variabile di sessione
    Codice PHP:
    $_SESSION['id'] = $res['idUtente']; 
    La devi valorizzare all'interno dell'if.
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  8. #8
    allora ho risolto così
    Codice PHP:
     <?php
                  session_start
    ();
                  
                  
    $user $_POST['user'];
                  
    $psw $_POST['psw'];
                
                
                  include 
    'db.inc.php'
                      
                  try
                  {
                      
    $sql "SELECT COUNT(*) FROM accesso WHERE user = :user AND psw = sw ";
                      
    $st $pdo->prepare($sql);
                      
    $st->bindValue(':user' $userPDO::PARAM_STR);
                      
    $st->bindValue('sw' $pswPDO::PARAM_STR);
                      
    $st->execute();
                      
                  }   
                     catch(
    PDOException $e)
                  {
                      
    $error "Errore nell'esecuzione della query ";
                      include 
    'error.html.php';
                      exit();
                  }  
                  
                  
    $res $st->fetch();
                  if(
    $res[0] > 0)
                  {
                            
    $_SESSION['id'] =  $res['idUtente'];
                          
    $risq "Accesso riuscito.";
                          
    header('Location:chat.php');
                  } 
                      else
                  {
                          
    $risq "Accesso non riuscito.";
                          
    header('Location:index.html');
                  }
                      
                 
            
    ?>
    adesso devo capire perchè non riesco a inserire un messaggio se metto l'id_utente
    per l'inserimento del messaggio questa è la pagina
    Codice PHP:
    <?php
    session_start
    ();
    include 
    'db.inc.php';       
    $msg htmlspecialchars($_POST['azione']);
    try         {            
    $sql 'INSERT INTO messaggio(msg, data, id_utente) VALUES(:msg, NOW(), :id)';                        
    $st $pdo->prepare($sql);               
    $st->bindValue(':msg' $msgPDO::PARAM_STR);               
    $st->bindValue(':id' $_SESSION['id'], PDO::PARAM_INT);                
    $st->execute();        
    }        catch(
    PDOException $e)        {            
    exit();        
    }

            
    header("Location: visualizza.php");
    ?>
    invece se non mettessi l'id utente e lasciassi così il codice il messaggio verrebbe inviato senza id ovviamente
    Codice PHP:
    try         {            
    $sql 'INSERT INTO messaggio(msg, data) VALUES(:msg, NOW())';                        
    $st $pdo->prepare($sql);               
    $st->bindValue(':msg' $msgPDO::PARAM_STR);                            
    $st->execute();        


  9. #9
    edit avevo dimenticato nella query idUtente fuck!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.