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

    Verficare se il valore fornito dall'utente esiste nel database

    Salve,

    Come vi avevo detto in precedenza, sto iniziando a studiare il PHP e fino ad oggi, sono arrivato ai primi concetti del database.

    Ho creato un database, con dentro dei telefonini e le varie informazioni.
    Attraverso un form inserito in una pagina HTML, l'utente potrà scegliere una determinata marca del cellulare sul quale desidera informazioni di vario genere.

    Il problema nasce quando, nel campo di ricerca, non inserisco alcun testo.
    Io vorrei far comparire un messaggio del tipo "La ricerca da lei selezionata non ha prodotto alcun risultato", invece attualmente, mi viene mostrato tutto il listato presente nel database.
    Ho provato anche a inserire il comando die, che dovrebbe sospendere l'esecuzione della pagina e comunicare un messaggio personalizzato (giusto?) ma niente da fare.

    Vi posto di seguito il codice dove vorrei apportare la modifica sopra descritta:
    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Documento senza titolo</title>
    </head>

    <body>
    <HTML>
    <HEAD>
    </HEAD>
    <BODY>
    Telefoni trovati in archivio:

    <?php
    $db_username 
    'miousername'// USERNAME DATABASE 
    $db_password 'miapassword'// PASSWORD DATABASE
    $db_host 'localhost'// NOME DATABASE
    //LINK VARIABILE
    $link mysql_connect("$db_host""$db_username""$db_password") or die("Errore connessione: "mysql_error());
    mysql_select_db('my_david92') or die("Errore apertura database: " mysql_error());
    //SQL VARIABILE
    $marca=$_POST['marca'];
    $sql="SELECT * FROM telefoni WHERE marca LIKE '%$marca%'";
    $rs = @mysql_query("$sql",$link) or die("Errore query database: " mysql_error());
    echo 
    "<TABLE border='1'>";
    while (
    $riga mysql_fetch_array($rs)) { 
    $id=$riga['id'];
    $marca=$riga['marca'];
    $modello=$riga['modello'];
    $prezzo=$riga['prezzo'];
    $caratteristiche=$riga['caratteristiche'];
    $foto=$riga['foto'];
    $promozione=$riga['promozione'];
    $quantita=$riga['quantita'];
    echo 
    "<TR><TD>$marca</TD><TD>$modello</TD><TD>$prezzo";
    if(
    $promozione==1){
    echo 
    "<br /><img src='telefoni/promo.gif' />";
    }
    echo 
    "</TD><TD>$caratteristiche</TD><TD> <img src='telefoni/$foto' height='80'width='60'/> </TD>";
    echo 
    "<TD>$quantita</TD></TR>";
    }
    echo 
    "</TABLE>";
    ?>
    </BODY>
    </HTML>
    </body>
    </html>

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Prima di tutto, visto che sei agli inizi, lascia perdere le istruzioni mysql_* che sono deprecate. Passa a PDO (o Mysqli).

    Tornando al tuo quesito, il fatto è che se lasci vuoto il campo, la tua condizione sql diventa

    $sql="SELECT * FROM telefoni WHERE marca LIKE '%%'";

    che in pratica è come se non ci fosse (ti vengono ritrovati tutti i record).

    Quello che dovresti fare è verificare se $marca non sia vuoto e in caso contrario mostrare il messaggio.
    Esempio:
    Codice PHP:

    $marca
    =$_POST['marca'];

    if(
    $marca){
      
    // Si fa l'escape della stringa per evitare problemi con i caratteri speciali e come precauzione per sql injection
      
    $marca mysql_real_escape_string($marca);
      
    $sql="SELECT * FROM telefoni WHERE marca LIKE '%$marca%'";
      
    $rs = @mysql_query("$sql",$link) or die("Errore query database: " mysql_error());
      ...
      ...
    }else{
      echo 
    "Inserisci la marca del cellulare".

    Ultima modifica di boots; 18-02-2015 a 20:41

  3. #3
    Perfetto adesso lo script funziona.
    Ho però delle domande.

    Il seguente codice, serve solo per controllare eventuali problemi con i caratteri e per l'sql injection giusto?
    Codice PHP:
    $marca mysql_real_escape_string($marca); 
    L'istruzione che invece verifica che la variabile marca sia "piena" è la seguente?
    Codice PHP:
     $sql="SELECT * FROM telefoni WHERE marca LIKE '%$marca%'"

    Mi scuso per le domande abbastanza banali, ma ci tengo veramente a capire esattamete il funzionamento di questo linguaggio.

    Detto questo, vi ringrazio per la vostra disponibilità.

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Quote Originariamente inviata da David92 Visualizza il messaggio
    Perfetto adesso lo script funziona.
    Ho però delle domande.

    Il seguente codice, serve solo per controllare eventuali problemi con i caratteri e per l'sql injection giusto?
    Codice PHP:
    $marca mysql_real_escape_string($marca); 
    Si. Se per esempio avessi $marca = "l'iphone" (nota l'apice), la tua stringa sql diverrebbe

    SELECT * FROM telefoni WHERE marca LIKE '%l'iphone%'

    e l'apice di "l'iphone", chiuderebbe quello del LIKE e avresti una query mal formata. Gli attacchi di sql injection sfruttano questa cosa.
    Cmq se usi PDO (o mysqli) e i prepared statement non devi preoccuparti perchè l'escape è automatico

    L'istruzione che invece verifica che la variabile marca sia "piena" è la seguente?
    Codice PHP:
     $sql="SELECT * FROM telefoni WHERE marca LIKE '%$marca%'"
    No... l'istruzione di controllo su marca è l'if($marca).
    In pratica, se $marca non è vuota, effettui la query e mostri i risultati altrimenti (else) mostri l'errore

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.