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>';
			}
		?>
 
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
 
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
 
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>';
			}
		?>
 
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) {
 
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:
Si, in effetti ha più senso scrivere cosi;

PHP:
if(!$countiscritti){
        die("Errore:<br/> $q <br/>" . mysql_error());
    }
 
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'; ?>
 
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
 
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)
 
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
 
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
 

Discussioni simili