Visualizzazione risultati 1 fino 7 di 7

Discussione: [PHP,MySQL] Controllo record

  1. #1
    Guest

    Question [PHP,MySQL] Controllo record

    Salve
    Nella mia gestione della registrazione e dell'login sto facendo un controllo per verificare se magari un utente è già registrato. Con l'aiuto di internet sono riuscito ad abbozzare questo:
    Codice PHP:
    $connect= "SELECT usurname,password FROM tabella WHERE usurname = $_POST['usurname'] AND password=$_POST['pass']";
    $db="nomedatabase";
    $risultato = mysql_query($connect, $db);

    $num = mysql_num_rows ($risultato);

    if(
    $num != '0'){

    echo
    "Dati presenti";
    }else{ [
    continuo...]}
    Sapete dirmi dove sbaglio? Mi da questo errore:
    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
    Nella prima riga del codice qui sopra....

    --EDIT--
    Se la prima riga invece la scrivo così:
    Codice PHP:
    $connect->query('SELECT usurname,password FROM tabella WHERE (usurname = $_POST['usurname'] AND password=$_POST['pass'])');
    L'errore è: unexpected T_STRING
    --EDIT--
    Ho risolto il problema di sintassi, il codice e':
    Codice PHP:
    $connect->query('SELECT email,usurname FROM tabella WHERE (usurname = $_POST["usurname"] AND email=$_POST["mail"])');
    $db="nomedb";
    $risultato = mysql_query($connect, $db);
    $num = mysql_num_rows ($risultato);
    if(
    $num != '0'){
    echo
    "Dati presenti";
    }
    else{[
    continuo..]}
    Il problema e che non funziona, se inserisco dei dati già presenti nel database, i dati vengono comunque inseriti...
    Ultima modifica di mathis : 11-04-2013 alle ore 15.42.04 Motivo: Modifica porzione di codice

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Hmm, dalla tua domanda mi sembra evidente che non conosci appieno la sintassi delle stringhe in PHP. leggi con attenzione la documentazione con particolare attenzione all'espansione delle variabili.
    Con tutti questi indizi dovresti essere in grado di trovare da solo l'errore.

  3. #3
    Guest

    Predefinito

    Ho letto e provato diverse cose, ma niente.. potresti darmi un indizio in più?
    O casomai consigliarmi una guida in italiano, infatti ho avuto alcuni problemi su qualche termine non padroneggiando bene l'inglese..

  4. #4
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Citazione Originalmente inviato da mathis Visualizza messaggio
    Ho risolto il problema di sintassi, il codice e':
    Codice PHP:
    $connect->query('SELECT email,usurname FROM tabella WHERE (usurname = $_POST["usurname"] AND email=$_POST["mail"])');
    $db="nomedb";
    $risultato = mysql_query($connect, $db);
    $num = mysql_num_rows ($risultato);
    if(
    $num != '0'){
    echo
    "Dati presenti";
    }
    else{[
    continuo..]}
    Il problema e che non funziona, se inserisco dei dati già presenti nel database, i dati vengono comunque inseriti...
    Prova a stampare la stringa che passi per query, cosa noti? Non è avvenuta l'espansione di variabile perché hai usato la sintassi delle stringhe a singoli apici: con questa sintassi non avviene l'espansione delle variabili e non sono riconosciute nemmeno le sequenze di escape al di fuori di \\ e \'.
    Devi quindi usare la sintassi con le virgolette tradizionali ("), ricevevi però un errore in quanto tra le parentesi quadre dell'indice dell'array specificavi anche lì le virgolette, ma in questo caso non sono necessarie e vanno omesse.
    La sintassi corretta è dunque
    Codice PHP:
    "SELECT email,usurname FROM tabella WHERE (usurname = $_POST[usurname] AND email=$_POST[mail])"
    Ma a questo punto dovresti avere un errore SQL, poiché mancano le virgolette nella query, che tra l'altro è vulnerabile ad un'iniezione di codice .

  5. #5
    Guest

    Predefinito

    Io avevo provato così, però non mi dava il risultato voluto, infatti, facendo copia e incolla con il tuo codice mi fa inserire ugualmente i dati...
    Comunque, per ovviare all'iniezione di codice non si potrebbe risolvere con htmlspecialchars?
    Codice PHP:
    $usurname=trim(htmlspecialchars($_POST['usurname']));
    $mail =trim(htmlspecialchars($_POST['mail']));
    $connect->query("SELECT email,usurname FROM tabella WHERE (usurname = $usurname AND email=$mail");
    Ultima modifica di mathis : 11-04-2013 alle ore 18.33.26

  6. #6
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Citazione Originalmente inviato da mathis Visualizza messaggio
    Io avevo provato così, però non mi dava il risultato voluto, infatti, facendo copia e incolla con il tuo codice mi fa inserire ugualmente i dati...
    Citazione Originalmente inviato da karl94 Visualizza messaggio
    Ma a questo punto dovresti avere un errore SQL, poiché mancano le virgolette nella query, che tra l'altro è vulnerabile ad un'iniezione di codice .
    La query così formata presenta un errore di sintassi, in quanto mancano le virgolette dopo l'operatore uguale, devi confrontare se la colonna usurname (che poi in inglese sarebbe username) ha il medesimo valore di una data stringa, se non metti le virgolette quello che viene dopo potrebbe venire interpretato come il nome di una colonna.
    Citazione Originalmente inviato da mathis Visualizza messaggio
    Comunque, per ovviare all'iniezione di codice non si potrebbe risolvere con htmlspecialchars?
    Stiamo costruendo una query SQL: usiamo le funzioni apposite onde non incorrere in problemi di sicurezza. Per fare l'escape dei caratteri all'interno di una query si usano le funzioni mysql_real_escape_string o mysqli_real_escape_string.
    Inoltre credo stia facendo confusione tra le funzioni mysql e mysqli, sono due cose abbastanza diverse, che cosa c'è nella variabile $query?

  7. #7
    Guest

    Predefinito

    Rieccomi... avevo lasciato un po perdere questa discussione sperando che con il tempo avrei capito.. il problema e che con i vari tentativi fatti non mi viene fuori niente.. ho guardato le guide ufficiali e altre guide ma non ho capito ancora come correggere l'errore SQL..

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •