errore nel controllo di un numero

valient13

Utente Attivo
6 Apr 2012
96
0
0
Sicilia
Salve, ho fatto uno script solo che quando provo ad inviare un messaggio mi da sempre l'id sbagliato, cioè io faccio inserire un id, se l'id è maggiore degli id esistenti nella tabella gli da un messaggio in cui dice che non esiste nessun utente con quell'id, solo che quando metto un id esistente mi dà sempre quell'errore:
PHP:
		<?php
			$countiscritti=mysql_query("SELECT id_utente FROM iscritti");
			$cont=mysql_num_rows($countiscritti);
			$destinatario=$_POST['destinatario'];
			$mittente=$_POST['mittente'];
			$messaggio=strip_tags($_POST['messaggio']);
			$data=$_POST['data'];
			if (($messaggio=="") or ($destinatario==""))
			   echo '<br><b><font color=red>Devi compilare tutti i campi</font></b><br><a href=\"inviamessaggio.php\">Ritorna Indietro</a>';
			else {
				if ($mittente > $cont) {
					$query="Insert into `messaggi` (`mittente`,`destinatario`,`messaggio`,`data`) VALUES ('$mittente','$destinatario','".addslashes($messaggio)."','$data')";
					$result=mysql_query($query) or die(mysql_error());
					if($result==1)
						echo"<br><b><font color=green>Messaggio inviato con successo</font></b>";
					else
						echo"<br><b><font color=red>Messaggio non inviato</font></b><br><a href=\"inviamessaggio.php\">Ritorna Indietro</a>";
				}
				else echo '<br><b><font color=red>Devi inserire un\'id esistente</font></b><br><a href="inviamessaggio.php">Ritorna Indietro</a>';
			}
		?>
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
if($mittente > $cont) Non è che dovevi fare cosi? if($mittente <= $cont)

Così invia il messaggio solo se il mittente è uguale o inferiore al conto, perciò se esiste
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
E se per qualche motivo salti un id nella registrazione degli utenti?

forse ti conviene fare in questo modo:

PHP:
// cerchi l'id scelto nella tabella
$countiscritti = mysql_query("SELECT id_utente FROM iscritti WHERE id_utente = " . (int) $_POST['mittente']);
    // se lo trovi
    if (mysql_num_rows($countiscritti) == 1) {
        //  fai la insert
    else
       // altrimenti mostri il messaggio
 

valient13

Utente Attivo
6 Apr 2012
96
0
0
Sicilia
mi dà errore, ho visto cosa mi da con l'echo ed esce fuori questo:
Resource id #8

PHP:
		<?php
			$destinatario=$_POST['destinatario'];
			$mittente=$_POST['mittente'];
			$messaggio=strip_tags($_POST['messaggio']);
			$data=$_POST['data'];
			if (($messaggio=="") or ($destinatario==""))
			   echo '<br><b><font color=red>Devi compilare tutti i campi</font></b><br><a href=\"inviamessaggio.php\">Ritorna Indietro</a>';
			else {
				$countiscritti = mysql_query("SELECT id_utente FROM iscritti WHERE id_utente = " . (int) $_POST['mittente']); 
				if (mysql_num_rows($countiscritti) == 1) {
					echo $countiscritti;
					$query="Insert into `messaggi` (`mittente`,`destinatario`,`messaggio`,`data`) VALUES ('$mittente','$destinatario','".addslashes($messaggio)."','$data')";
					$result=mysql_query($query) or die(mysql_error());
					if($result==1)
						echo"<br><b><font color=green>Messaggio inviato con successo</font></b>";
					else
						echo"<br><b><font color=red>Messaggio non inviato</font></b><br><a href=\"inviamessaggio.php\">Ritorna Indietro</a>";
				}
				else echo '<br><b><font color=red>Devi inserire un\'id esistente</font></b><br><a href="inviamessaggio.php">Ritorna Indietro</a>';
			}
		?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
e se provi cosi cosa ti stampa in $q?

PHP:
$q = "SELECT id_utente FROM iscritti WHERE id_utente = " . (int) $_POST['mittente'];
    $countiscritti = mysql_query($q);
    echo $q;
    if (mysql_num_rows($countiscritti) == 1) {
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
e se provi cosi cosa ti stampa in $q?

PHP:
$q = "SELECT id_utente FROM iscritti WHERE id_utente = " . (int) $_POST['mittente'];
    $countiscritti = mysql_query($q);
    echo $q;
    if (mysql_num_rows($countiscritti) == 1) {
O.ò stamperà il valore di $q no? SELECT id_utente FROM iscritti WHERE id_utente = + Il valore int del mittente


Edit: non ho ben capito, cosa vorresti vedere con l'echo?
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Si, in effetti ha più senso scrivere cosi;

PHP:
if(!$countiscritti){
        die("Errore:<br/> $q <br/>" . mysql_error());
    }
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
strano!
puoi ripostarlo per intero?
 

valient13

Utente Attivo
6 Apr 2012
96
0
0
Sicilia
questo è tutto il codice:
PHP:
<?php 
	// inizializzazione della sessione
	session_start();
	// inclusione del file di funzione
	require_once __DIR__ . '/functions.php'; 
	// istanza della classe
	$iscrizione = new Iscrizioni();
	// chiamata al metodo per la verifica della sessione
	if (!$iscrizione->verifica_sessione())
	{
	  //redirect in caso di sessione non verificata
	  header("location:errore2.php");
	  exit ();
	}
	// identificativo univoco dell'utente
	$id_utente = $_SESSION['id_utente'];

	require_once __DIR__ . '/header.php'; 

?>
 <!-- Content -->
  <div id="content">
  	<div id="conteiner">
		<div align="center">
		<?php
			$destinatario=$_POST['destinatario'];
			$mittente=$_POST['mittente'];
			$messaggio=strip_tags($_POST['messaggio']);
			$data=$_POST['data'];
			if (($messaggio=="") or ($destinatario==""))
			   echo '<br><b><font color=red>Devi compilare tutti i campi</font></b><br><a href=\"inviamessaggio.php\">Ritorna Indietro</a>';
			else {
				$q = "SELECT id_utente FROM iscritti WHERE id_utente = " . (int) $_POST['mittente'];
				$countiscritti = mysql_query($q);
				if (mysql_num_rows($countiscritti) == 1) {  
					$query="Insert into `messaggi` (`mittente`,`destinatario`,`messaggio`,`data`) VALUES ('$mittente','$destinatario','".addslashes($messaggio)."','$data')";
					$result=mysql_query($query) or die(mysql_error());
					if($result==1)
						echo"<br><b><font color=green>Messaggio inviato con successo</font></b>";
					else
						echo"<br><b><font color=red>Messaggio non inviato</font></b><br><a href=\"inviamessaggio.php\">Ritorna Indietro</a>";
				}
				else echo '<br><b><font color=red>Devi inserire un\'id esistente</font></b><br><a href="inviamessaggio.php">Ritorna Indietro</a>';
			}
		?>
		</div>
  	</div>
    <?php require_once __DIR__ . '/sidebar.php'; ?>
  </div>
  
<?php require_once __DIR__ . '/footer.php'; ?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
non vedo errori,

strano che ti dia cmq il risultato

prova a fare un var_dump di quello che restituisce mettendo * nella query

PHP:
$q = "SELECT * FROM iscritti WHERE id_utente = " . (int) $_POST['mittente'];
    $countiscritti = mysql_query($q);
    var_dump(mysql_fetch_array($countiscritti));
magari capiamo dove sta il problema
 

valient13

Utente Attivo
6 Apr 2012
96
0
0
Sicilia
mi dà questo:
Codice:
array
  0 => string '1' (length=1)
  'id_utente' => string '1' (length=1)
  1 => string 'admin' (length=5)
  'nome_utente' => string 'admin' (length=5)
  2 => string 'd033e22ae348aeb5660fc2140aec35850c4da997' (length=40)
  'password' => string 'd033e22ae348aeb5660fc2140aec35850c4da997' (length=40)
  3 => string 'Paolo' (length=5)
  'nome_reale' => string 'Paolo' (length=5)
  4 => string 'admin' (length=5)
  'email' => string 'admin' (length=5)
  5 => string 'A' (length=1)
  'livello' => string 'A' (length=1)
  6 => string 'images/avatar/Hydrangeas.jpg' (length=28)
  'avatar' => string 'images/avatar/Hydrangeas.jpg' (length=28)
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Se digiti id 12 ti mette nel post id 1?

PHP:
'id_utente' => string '1' (length=1)

forse è meglio controllare il value del campo nel form
 

valient13

Utente Attivo
6 Apr 2012
96
0
0
Sicilia
ho ricontrollato, ed ho visto l'errore:
errato:
PHP:
$countiscritti = mysql_query("SELECT * FROM iscritti WHERE id_utente = " . (int) $_POST['mittente']) or die(mysql_error());
giusto:
PHP:
$countiscritti = mysql_query("SELECT * FROM iscritti WHERE id_utente = " . (int) $_POST['destinatario']) or die(mysql_error());
io andavo ogni volta a controllare il mio id cioè chi invia il messaggio e non chi lo riceveva xD