Visualizzazione dei risultati da 1 a 9 su 9

Discussione: anomali funzioni php

  1. #1

    anomali funzioni php

    Salve a tutti.

    Premessa.
    Poche ore fa ho postato una discussione in cui parlavo di una anomalia, consistente nella "non segnalazione" di mysql a php dell'inserimento di una stringa in un campo float, mysql girava normalemtne ma nel campo compariva un valore null, ciò non permette di creare un controlo basato su un messaggio di errore, visto che tale messaggio non compare (mentre compare se immetto il record direttamente dal prompt mysql).

    Problema.
    Avevo quindi pensato di risolvere il problema facendo un controllo preventivo del dato, ma le funzioni che utilizzo tipo is_float, is_numeric, is_string, oppure quelle per le espressioni regolari tipo eregi, non funzionano o funzionano al contrario.

    Es:

    Codice PHP:
     $queryA "insert into tabella (campo_testo";
     
    $queryB ") values ('$testo' ";

     if ((
    $num != 0.00) and ($num != "")) {
    if (
    is_float($num)){
        
    $queryA .= ", campo_numerico";
        
    $queryB .= ", $num";
    } else {
    $queryA .= "xxx";
    }
    }

    $query $queryA $queryB ");)"
    Avrei potuto omettere campo_testo e $testo nella query di esempio, ma servono a far capire che la query è composta da altre variabili

    Ovvero voglio fare in modo che se il campo numerico è diverso da un valore di default 0.00 e ciò che è immesso è un numero venga creata una query che consenta l'inserimento.
    Se il dato non è numerico quindi chi ha immesso il dato ha sbagliato; setto la variabile $queryA a xxx che non significando niente genera un messaggio di errore.
    Il problema è che se è un float mi da l'errore, se è una stringa la inserisce ma poi in tabella chiaramente come al solito risulta il valore NULL in quanto un dato stringa non può stare in un campo float.
    In poche parole funziona al contrario, se nego la funzione is_float (!isfloat) il messaggio di errore non lo da mai, quindi il risultato non si ribalta come dovrebbe (anche se sarebbe comunque una anomalia).
    Stessa cosa per tutte le altre funzioni che ho elencato.

    Mi chiedo se qualcuno ha una seppur pallida idea di cosa possa generare un comportamento così anomalo.

    Scusate per la prolissità ma non riuscivo ad esporre il problema in modo più sintetico.
    Grazie per l'attenzione.

  2. #2
    Ti suggerisco di iniziare leggendo attentamente il manuale ufficiale:

    http://www.php.net/manual/en/languag...e-juggling.php
    http://www.php.net/is_float


    is_float (PHP 4, PHP 5)
    is_float — Finds whether the type of a variable is float

    Note: To test if a variable is a number or a numeric string (such as form input, which is always a string), you must use is_numeric().

  3. #3
    Grazie per l'interessamento, ho guardato i link che hai postato, ma la situazione non cambia.
    Ho provato ad impostare un altra variabile a 0.00 e poi sommargli il valore della variabile che devo controllare, che a detta del manuale questo dovrebbe far capire a php che si tratta di un float, ma funziona come al solito al contrario, le stringhe passano i float no.
    Stessa cosa con l'espressione regolare che ho trovato nell'altro link anche questa funziona al cotrrario.
    Avevo provato anche is_string facendo un controllo duale e con is_numeric, ma is_numeric addirittura risultava sempre verificata che la variabile fosse stringa oppure numerica.

    Le funzioni credo di averle provate tutte, non capisco quale possa essere la causa del problema, che dubito fortemente possa trattarsi di un problema di sintassi.

    Non è che funziona male php, forse perchè gira su Internet Information Service come server in locale?

  4. #4
    Studiati questo codice e rileggi le pagine del manuale suggerite:

    Codice PHP:
    <pre>
    <?php 
    print("is_string('0.0') = "); var_dump(is_string('0.0')); 
    print(
    "is_string(0.0) = "); var_dump(is_string(0.0)); 
    print(
    "is_numeric('0.0') = "); var_dump(is_numeric('0.0'));
    print(
    "is_numeric(0.0) = "); var_dump(is_numeric(0.0)); 
    print(
    "is_float('0.0') = "); var_dump(is_float('0.0')); 
    print(
    "is_float(0.0) = "); var_dump(is_float(0.0)); 
    ?>
    </pre>

  5. #5
    Purtropo nemmeno i manuli mi sono stati di aiuto, il problema persiste

  6. #6
    up.

  7. #7
    Utente di HTML.it L'avatar di dararag
    Registrato dal
    Jan 2008
    Messaggi
    434
    l'if è sbagliato, lo devi scrivere così:
    Codice PHP:
    if ($num != 0.00 AND $num != "")
    {
    //ecc.
    //qui, alla fine, la chiusura della query devi scriverla così:
    $query $queryA $queryB ");"

  8. #8
    Grazie dell'interessamento dararag, ma il problema non sembra essere il quel punto, le anomalie rimangono anche con l'if scritto nel modo che mi hai suggerito.

  9. #9
    Posso adesso escludere che si tratti di un problema di incompatibilità con IIS visto che ho provato con easy-php e da gli stessi problemi.
    Anche le espressioni regolari non risolvono il problema.
    Non è che si tratta di un Bug di php?
    Se qualcuno ha qualche risposta...
    grazie.

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.