Visualizzazione risultati 1 fino 10 di 10

Discussione: Errore di sintassi che non trovo!!!

  1. #1
    senettone non è connesso Neofita
    Data registrazione
    10-10-2010
    Messaggi
    12

    Predefinito Errore di sintassi che non trovo!!!

    ciao a tutti,
    ancora qui a chiedere probabilmente cose banali ma alle quali non riesco a venirne a capo...

    lo script che sto scrivendo funziona bene, ma solo quando il record esiste nel db, perche quando non esiste il server mi restituisce degli errori....
    sicuramente perchè non è definita l'azione da fare nel caso in cui non trovi il record, ma copiando ed adattando guide trovate in rete non sono riuscito a capire il problema.
    cmq la ricerca darà come risultato sempre e solo un record, infatti penso che l'errore sia nei pressi di WHILE che non ha un alternativa se non trova corrispondenze, il codice è questo:

    Codice PHP:
    <?php
    /* definisco il parametro e la tabella*/
    $param = '090909090';
    $table = "verifica";


    /* imposto la query e cerco il parametro che restiturà sempre e solo un record */
    $sqlquery = "SELECT * FROM $table WHERE codice = $param";
    $result = mysql_query($sqlquery);
    $number = mysql_numrows($result);

    $i = 0;

    while (
    $i < $num) {
    $i++;
    }

    $tipo=mysql_result($result,$i,"tipo");
    $valore=mysql_result($result,$i,"valore");
    $datadb=mysql_result($result,$i,"data");

    list(
    $dd, $mm, $yy) = explode('/', $datadb);

    /* il codice continua ma l'errore penso sia dalle parti di while */

    echo $dd;
    echo
    $mm;
    echo
    $yy;

    mysql_close();
    ?>
    potete aiutarmi?

  2. #2
    Guest

    Predefinito

    Qua usi due tipi di apici

    Codice PHP:
    $param = '090909090';
    $table = "verifica";
    Usa solo il primo.

  3. #3
    senettone non è connesso Neofita
    Data registrazione
    10-10-2010
    Messaggi
    12

    Predefinito

    potrebbe essere questo? dopo che mi hai detto ho visto pure che uso gli apici anche qui:
    Codice PHP:
    $tipo=mysql_result($result,$i,"tipo");
    $valore=mysql_result($result,$i,"valore");
    $datadb=mysql_result($result,$i,"data");
    li correggo pure lì, no?

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    La scelta fra apici singoli e doppi dipende solo da quello che ci vuoi mettere dentro e non genera errori di sintassi.

    Se ottieni un messaggio di errore quando visualizzi la pagina, ci sarà un numero di riga. Guarda prima li.

    Codice PHP:
    $i = 0;

    while (
    $i < $num) {
    $i++;
    }
    A cosa serve incrementare un'altra variabile finché non ha lo stesso valore di $num? E $num non è definità, sopra usi $number.
    Ultima modifica di dreadnaut : 11-02-2013 alle ore 20.50.15

  5. #5
    senettone non è connesso Neofita
    Data registrazione
    10-10-2010
    Messaggi
    12

    Predefinito

    Eccolo, sarà allora proprio questo il problema...mi da un errore in numrows e poi Warning: mktime() expects parameter 5 to be long, string given in ecc... Che però ho tolto nel post questa porzione di codice... Ma perché dovrebbe funzionare se il parametro lo trova e da errore se non lo trova?
    Ultima modifica di senettone : 11-02-2013 alle ore 21.04.39

  6. #6
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Di certo hai scritto _numrows quando la funzione si chiama mysql_num_rows(), quindi li inizia a rompersi. Poi dipende anche da quello che hai scritto nelle righe che non ci fai vedere

    Inoltre i messaggi di errore andrebbero anche letti, perché ti spiegano quale sia l'errore e dove si trovi. Se non li capisci, ci sono sempre ulteriori dettagli nella guida del php.
    Ultima modifica di dreadnaut : 11-02-2013 alle ore 21.28.39

  7. #7
    senettone non è connesso Neofita
    Data registrazione
    10-10-2010
    Messaggi
    12

    Predefinito

    non volevo postare tutto il codice per non riempire di cose che secondo me erano superflue...
    adesso però dopo aver corretto il codice con i suggerimenti postati non funziona nemmeno quando il parametro è corretto

    l'ho corretto così e posto anche gli errori

    Codice PHP:
    mysql_connect($dbhost,$username,$password);

    mysql_select_db($database)
    or die(
    "Impossibile selezionare il database.");


    $param = 'xxxxxxxx';
    $table = 'verifica';

    $sqlquery = "SELECT * FROM $table WHERE codice_verifica = $param";
    $result = mysql_query($sqlquery);
    $number = mysql_num_rows($result);

    $i = 0;

    while (
    $i < $number) {
    //CODICE PER LA STAMPA DEI DATI
    $i++;
    }

    $tipo=mysql_result($result,$i,"tipo");
    $valore=mysql_result($result,$i,"valore");
    $datadb=mysql_result($result,$i,"data");

    list(
    $dd, $mm, $yy) = explode('/', $datadb);

    $data_acquisto = mktime(0, 0, 0, $mm, $dd, $yy);
    $data_scadenza = $data_acquisto + 31622400;
    $data_oggi = time();
    ho corretto il valore number e la funzione mysql_num_rows e adesso non funziona anche se il record esiste sul db.
    gli errori sono:

    Warning: mysql_result() [function.mysql-result]: Unable to jump to row 1 on MySQL result index 2 in /web/htdocs/www.miosito.it/home/verifica/index.php on line 58
    la 58 è:
    Codice PHP:
    $tipo=mysql_result($result,$i,"tipo");
    Warning: mysql_result() [function.mysql-result]: Unable to jump to row 1 on MySQL result index 2 in /web/htdocs/www.miosito.it/home/verifica/index.php on line 59
    69
    Codice PHP:
    $valore=mysql_result($result,$i,"valore");
    Warning: mysql_result() [function.mysql-result]: Unable to jump to row 1 on MySQL result index 2 in /web/htdocs/www.miosito.it/home/verifica/index.php on line 60
    Codice PHP:
    $datadb=mysql_result($result,$i,"data");
    Warning: mktime() expects parameter 5 to be long, string given in /web/htdocs/www.miosito.it/home/verifica/index.php on line 64
    Codice PHP:
    $data_acquisto = mktime(0, 0, 0, $mm, $dd, $yy);

  8. #8
    senettone non è connesso Neofita
    Data registrazione
    10-10-2010
    Messaggi
    12

    Predefinito

    Da quello che ho potuto capire con le guide online il While dovrebbe funzionare come un if ripetuto n volte in questo caso quanto sono i risultati...
    Quindi come if al quale serve else per avere un alternativa nel momento la prima funzione restituisse un valore falso, anche qui dovrei indicare un alternativa nel caso in cui non trova corrispondenze, ma come?

  9. #9
    Guest

    Predefinito

    Le numerazioni in PHP iniziano da 0 (zero) e non da 1.
    Quel "while" con cui incrementi $i è il problema.
    Infatti se esiste un record $number (il numero di records restituiti dalla query) vale 1, poi quel while incrementa $i portandolo a 1.
    A quel punto le righe del tipo
    $tipo=mysql_result($result,$i,"tipo");
    puntano al record 1 del resultset che non esiste... perchè il resultset contiene un record e il suo numero è 0 (zero).
    Sostituisci nelle righe del tipo che ti ho segnalato $i con 0 (zero):
    $tipo=mysql_result($result,0,"tipo");
    Dovrebbe funzionare.
    Ciao!

    Edit: per quanto riguarda la riga
    list($dd, $mm, $yy) = explode('/', $datadb);
    stampati a video il valore di $datadb prima di eseguirla... quel separatore "/" mi sembra strano...
    Riciao!
    Ultima modifica di pastamadre : 12-02-2013 alle ore 00.01.12

  10. #10
    senettone non è connesso Neofita
    Data registrazione
    10-10-2010
    Messaggi
    12

    Predefinito

    si, avevi ragione, mettendo 0 si risolve.
    ero ritornato però alla condizione di partenza, infatti lo script funzionava bene soltanto quando il record esisteva nel db, allora ho aggiunto un if che elabora le funzioni soltanto se number è maggiore di 0 e un else in modo da non far spuntare un errore se non trova un record corrispondente.

    Grazie per l'aiuto!!!

    Codice PHP:
    if ($number > 0) {

    $tipo=mysql_result($result,0,"tipo");
    $valore=mysql_result($result,0,"valore");
    $datadb=mysql_result($result,0,"data");

    list(
    $dd, $mm, $yy) = explode('/', $datadb);

    $data_acquisto = mktime(0, 0, 0, $mm, $dd, $yy);
    $data_scadenza = $data_acquisto + 31622400;
    $data_oggi = time();

Regole di scrittura

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