Kirjoittaja Aihe: [ ratkaistu ] php ! -operaattori  (Luettu 2261 kertaa)

teele

  • Käyttäjä
  • Viestejä: 853
    • Profiili
[ ratkaistu ] php ! -operaattori
« : 01.09.24 - klo:18.38 »
Nettiohjeiden mukaan ! -operaattorin pitäisi kääntää totuusarvo, mutta en keksi, miksi niin ei näytä tapahtuvan tässä pienessä kokeiluohjelmassa

Koodia: [Valitse]

<?php 

if(1)
{
  echo(
"luku alkaa \n\n");
  
$qs readline("anna arvo1 arvo2 arvo3 ja arvot4: ");
  echo(
"\n\n luku loppu \n\n");
  
  
$_POST[&#39;arvo1&#39;] = explode(&#39; &#39;, $qs)[0] . &#39; &#39;;
  
$_POST[&#39;arvo2&#39;] = explode(&#39; &#39;, $qs)[1] . &#39; &#39;;
  
$_POST[&#39;arvo3&#39;] = explode(&#39; &#39;, $qs)[2] . &#39; &#39;;
  
$_POST[&#39;arvot4&#39;] = implode(&#39; &#39;, array_slice(explode(&#39; &#39;, $qs), 3));
/*
  echo( $_POST[&#39;arvo1&#39;] );
  echo( $_POST[&#39;arvo2&#39;] );
  echo("\n\n loppu \n\n");
*/
  
}  // if loppuu

if(empty($_POST["arvo1"]))
  {
    die(
"arvo1 puuttuu");
  }
 
 echo(
$_POST["arvo1"] ) ;
 echo( 
" arvon1:n pituus on " strlen(trim($_POST["arvo1"] )) . "\n"  );
  
if( !
is_int(trim($_POST["arvo1"] ))  )
  {
    die(
"\narvo1:n on oltava kokonaisluku\n ");  // <<<====== vaikka arvo on 1, tullaan tänne ????
  
}

$my_number str_replace(&#39; &#39;, &#39;&#39;, $_POST[&#39;arvo1&#39;] );    // tyhjät pois 
$my_number filter_var($my_numberFILTER_SANITIZE_STRING);
$my_number substr($my_number040); 

?>


kokeilu meni näin

Koodia: [Valitse]
php kokeilu_05.php

luku alkaa

anna arvo1 arvo2 arvo3 ja arvot4: 1 aa oo 2 3 4

 luku loppu

1  arvon1:n pituus on 1

arvo1:n on oltava kokonaisluku


Voi olla, että kyseessä on joku yksinkertainen logiikkavirhe omassa logiikassani, mutta itse sitä on vaikea huomata

Miten pitäisi testata, että syötettävä arvo on kokonaisluku php:ssä.


« Viimeksi muokattu: 03.09.24 - klo:21.58 kirjoittanut teele »

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11487
    • Profiili
    • Tomin kotisivut
Vs: php ! -operaattori
« Vastaus #1 : 01.09.24 - klo:19.39 »
Ongelma lienee se, että trim($_POST["arvo1"]) palauttaa merkkijonon ja is_int() testaa onko kyseessä kokonaislukutyyppinen arvo.

https://www.php.net/manual/en/function.is-int.php
Lainaus
    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().

Eli kokeile korvata is_int() funktiolla is_numeric().
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.

teele

  • Käyttäjä
  • Viestejä: 853
    • Profiili
Vs: php ! -operaattori
« Vastaus #2 : 01.09.24 - klo:20.28 »
 
Taisi ratketa sillä ohjeella, varmistelen vielä koko koodin kanssa, sitten laitan ratkaistuksi

Kiitos neuvosta  :)