Pagina 1 di 2 12 UltimoUltimo
Visualizzazione risultati 1 fino 30 di 48

Discussione: problema di errore con mysql_num_rows

  1. #1
    Guest

    Predefinito problema di errore con mysql_num_rows

    Salve a tutti,


    Ho il seguente problema con mysql_num_rows il codice di errore è il seguente:

    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given on line 13
    Questo è lo spezzone di codice. In pratica devo fare in modo di popolare la select tramire un input. Ad esempio "nazionalita", all'inizio il db è vuoto poi mano a mano si riempie e verifica se la nazionalità è stata già inserita o meno. Ovviamente se non è presente nel db c'è la possibilità d'inserirla. E questo è il codice:

    Codice PHP:
    <?php
    require_once("connetti.php");

    $q=mysql_query("SELECT nazionalitaq FROM utenti ORDER BY nazionalita");
    $vuota=mysql_num_rows($q);

    if(
    $vuota > 0){//fa vedere la select solo se ci sono categorie e mostra solo il'input nuovacategoria, in pratica solo la prima volta
    echo "Categoria: <select name=\"nazionalità\">";
    echo
    "<option value=\"\">-seleziona-</option>";
    while(
    $riga=mysql_fetch_array($q)){
    echo
    "<option value=\"".$riga['nszionalità']."\">".$riga['nazionalità']."</option>";
    }
    //fine while
    echo "</select> ";
    }
    //fine if vuota

    ?>
    <p> <p> Nuova categoria da inserire: <input type='text' name='nuovacategoria'> </p> </p>

    Però come dicevo mi osno bloccato perchè mi da quell'errore sopra citato. Ul ultima cosa l'ho fatto con mysql e in una tabella unica che si chiama utenti anche se nell'esempio che ho ci sono tre tabelle differenti. Però a me serve in questo caso in un unica tabella. Chi mi può dare una mano cortesemente ad eliminare l'errore ??? La riga 13 che mi segnala l'erorre è la seguente:


    Codice PHP:
    $vuota=mysql_num_rows($q);
    Dovrebbe essere trasformato tutto in mysqli perchè è legato al form d'iscrizione che sto facendo. Grazie.

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,762

    Predefinito

    Sicuro che nella tabella esiste il campo "nazionalitaq"? Se sì, controlla comunque la correttezza della query. Usa anche mysql_error().

    Successivamente, utilizzi $riga['nszionalità'] e $riga['nazionalità'].

    Ricapitolando hai scritto:

    nazionalitaq
    nazionalita
    nszionalità
    nazionalità

    Tutte quattro differenti!

    Ciao!
    Ultima modifica di alemoppo : 26-05-2016 alle ore 20.31.28

  3. #3
    Guest

    Predefinito

    Gli errori di ortografia gli ho corretti e mi sembra che ci sia nella tabella ovviamente senza accento. Anche perchè è quella utilizzata utenti nel form d'iscrizione. Ma è un errore comune a chi adopera mysql_num_rows e non riesco a raggirarlo purtroppo. Comunque domani faccio ulteriori verifiche e metto ol codice che mi hai detto. Così vediamo se tira fuori qualche altra jidicazione. Grazie.

  4. #4
    Guest

    Predefinito

    Ciao alemoppo,

    Allora non mi ero accorto che non avevo corretto un bel niente. Probabilmente ho fatto la correzione solo quando ho postato. Ora tutto corretto e sembra andare bene. Una cosa sola, la select deve sparire e apparire quando c'è una nazionalità inzerita, perchè questo giochetto non me lo fa ????

  5. #5
    Guest

    Predefinito problema di errore con mysql_num_rows

    Ciao a tutti,

    Qua di seguto posto il listato originale di quello che mi servirebbe fare. Funziona perchè l'ho verificato adesso.


    [/PHP]

    In pratica questo programmino oltre ad essere un archivio di riviste elettroniche (non completo e da migliorare sicuraremnte) fa in modo che all'inizio le select sono invisibili, poi mano mano che s'inseriscono i dati da input si popolano. Ovviamente se esiste già un componente, oppure una rivista o una categoria nella select lo dovrebbe segnalare.

    Vorrei applicare la stessa cosa per popolare la nazionalità, la città, la prov. Però sfruttando un unica tabella ossia quella "utenti" è sempre collegato al form d'iscrizione che sto facendo ovviamente. L'unica cosa è che mi visualizza la select vuota ed invece non ci dovrebbe essere. Qualcuno mi potrebbe dare una mano per favore ??? Io ho fatto così e ci sto ancora lavorando ma mi sono imbattuto in un errore antipatico. Il listato è il seguente:

    Codice PHP:

    <?php
    require_once("connetti.php");

    $q=mysql_query("SELECT nazionalita FROM nazionalità ORDER BY nazionalita");
    $vuota=mysql_num_rows($q);

    if(
    $vuota > 0){//fa vedere la select solo se ci sono categorie e mostra solo il'input nuovacategoria, in pratica solo la prima volta
    echo "Nazionalità: <select name=\"nazionslità\">";
    echo
    "<option value=\"\">-seleziona-</option>";
    while(
    $riga=mysql_fetch_array($q)){
    echo
    "<option value=\"".$riga['nszionalità']."\">".$riga['nazionalità']."</option>";
    }
    //fine while
    echo "</select> ";
    }
    //fine if vuota

    ?>
    <p> <p> Nuova nazionalità da inserire: <input type='text' name='nuovanazionalità'> </p> </p>


    </body>
    </html>
    Perc omodità l'ho fatto con il vecchio sistema (ho aperto un'altro file di prova) però deve essere fatto come sto facendo il form ossia con mysqli. Però ripeto questa è solo na prova. L'errore attuale è il segunete:

    Warning: mysql_num_rows() expects parameter 1 to be resource at line 13
    La riga 13 è la seguente:


    $vuota=mysql_num_rows($q);

    Grazie in anticipo a tutti. Volevo avvisare che ci sono degli errori di ortografia di cui non mi ero accorto ora è tutto a postoVorrei solo una mano per trasformarlo da mysql a mysqli. Grazie.
    Ultima modifica di fabiodefe : 27-05-2016 alle ore 13.29.21

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Edit:
    Warning: mysql_num_rows() expects parameter 1 to be resource at line 13
    La query è fallita:
    Codice PHP:
    $q=mysql_query("SELECT nazionalita FROM nazionalità ORDER BY nazionalita");
    il nome della tabella è "nazionalità"? Nei messaggi precedenti si chiamava "utenti".

    Inoltre:
    Codice PHP:
    echo "<option value=\"".$riga['nszionalità']."\">".$riga['nazionalità']."</option>";
    Nella query hai chiamato la colonna "nazionalita", qui "nazionalità".


    mi visualizza la select vuota ed invece non ci dovrebbe essere
    In base a quale criterio la select deve essere mostrata o meno?
    Ultima modifica di mzanella : 27-05-2016 alle ore 13.11.00 Motivo: messaggi precedenti cambiati durante la scrittura

  7. #7
    Guest

    Predefinito

    Allora facciao un pò di ordine sennnò non ci si capisce niente. Scusatemi ma sono un casinao di prima categoria. Ora ho sistemato tutto quanto ho creato una tabella "nazionalita" Quindi il listato nuvo è il seguente. Di seguto posto la tabella che si chiama "nazionalita":

    Tabella nazionalita:

    Codice PHP:
    CREATE TABLE nazionalita(

    idnazionalita INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    nazionalita VARCHAR(255) NOT NULL ) ENGINE = MYISAM ;
    Questo è il listato modificato e corretto. Non ci dovrebbero essere errori, spero:

    provainsnazionalita.php

    Codice PHP:
    <!DOCTYPE html>

    <html>
    <head>
    <meta charset="UTF-8">
    <title>Prova inserimento nazionalità</title>
    </head>
    <body>

    <form method="POST" autocomplete ="off" action="<?php $_SERVER['PHP_SELF'] ?>">

    <?php

    require_once("connetti.php");
    #require_once ("connettimysqli.php");

    $q=mysql_query("SELECT nazionalita FROM nazionalita ORDER BY nazionalita");
    $vuota=mysql_num_rows($q);

    if(
    $vuota > 0){//fa vedere la select solo se ci sono categorie e mostra solo il'input nuovacategoria, in pratica solo la prima volta
    echo "Nazionalità: <select name=\"nazionslità\">";
    echo
    "<option value=\"\">-seleziona-</option>";
    while(
    $riga=mysql_fetch_array($q)){
    echo
    "<option value=\"".$riga['nszionalità']."\">".$riga['nazionalità']."</option>";
    }
    //fine while
    echo "</select> ";
    }
    //fine if vuota

    ?>
    <p> <p> Nuova nazionalità da inserire: <input type='text' name='nuovanazionalita'> </p> </p>

    <div align ="center">
    <input type="submit" name="reg" value="Invio Iscrizione" />
    </div>
    </div>

    </form>
    <?php
    if(!empty($_POST)){

    $nazionalita = mysql_real_escape_string(trim ($_POST['nazionalita']));

    //verifica inserimento nuova categoria o nuovo componente
    //categoria
    if($nazionalita=="" && $nuovanazionalita !=""){//sto cercasndo di inserire una nuova nazionalita
    $q_cat=mysql_query("SELECT nazionalita FROM nazionalita WHERE nazionalita='$nuovanazionalita'");
    $esiste=mysql_num_rows($q_cat);
    if(
    $esiste==0){//non esiste quindi l'aggiungo
    $q_i=mysql_query("INSERT INTO nazionalita(nazionalita) VALUES('$nuovanazionalita')");
    $nazionalita=$nuovanazionalita;//questo è il valore che andro ad inesrire nella tabella nazionalita
    }else{//se esiste vuol dire che hai messo nel campo un valore che era nella selecct del form quindi
    $nazionalita=$nuovanazionalita;//questo è il valore che andro ad inesrire nella tabella nazionalitaa
    }
    }
    }
    ?>
    </body>
    </html>
    Vado a premere il tasto e non mi memorizza ciò che ho scritto es. "Italia".

    Dove sto sbagliando ???? E' possibile trasformarlo in mysqli ??? Grazie.

  8. #8
    LeZip non è connesso Utente Bannato
    Data registrazione
    12-02-2015
    Messaggi
    66

    Predefinito

    dipende da cosa vuoi ottenere..

  9. #9
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Innanzitutto attenzione agli errori sintattici. Qui e là ci sono dei "nszionalità" e "nazionalità" al posto di "nazionalità".
    Poi, usi $nuovanazionalita senza averla definita.
    Inoltre il numero di interrogazioni alla base di dati si può dimezzare.
    Infine, tanto vale scriverlo direttamente con mysqli_*, anziché fare prima una "prova" con mysql_* solo per poi fare la fatica di riconvertire.
    Magari anche i nomi degli identificatori più significativi possono aiutare.
    Infine, sempre meglio abituarsi ad usare i prepared statement.

    Suggerisco una riscrittura di questo tipo:
    Codice PHP:
    <?php
    // Connessione alla base di dati
    $link = mysqli_connect("localhost", "user", "password", "database");
    if (
    mysqli_connect_errno()) {
    echo
    "Connect failed: " . mysqli_connect_error();
    }


    // Legge tutte le nazionalità dalla base di dati, memorizzandole in un vettore
    $nazionalita = array();
    $query = "SELECT nazionalita FROM nazionalita ORDER BY nazionalita";
    $result = mysqli_query($link, $query);
    if (
    $result === false) {
    echo
    "SELECT failed: " . mysqli_error($link);
    }

    while (
    $row = mysqli_fetch_assoc($result)) {
    $nazionalita[] = $row['nazionalita'];
    }
    mysqli_free_result($result);



    // Aggiunge una nuova nazionalità alla base di dati, se non è già presente
    if (isset($_POST['nuovanazionalita'])) {
    $nuovanazionalita = mysql_real_escape_string($link, trim($_POST['nuovanazionalita']));

    // Procede con l'inserimento solo se la nuova nazionalità non è vuota e non è già presente
    if (!empty($nuovanazionalita) && !in_array($nuovanazionalita, $nazionalita) {
    $stmt = mysqli_prepare($link, "INSERT INTO nazionalita(nazionalita) VALUES(?)");
    mysqli_stmt_bind_param($stmt, "s", $nuovanazionalita);
    mysqli_stmt_execute($stmt);

    $nazionalita[] = $nuovanazionalita;
    sort($nazionalita);
    }
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Prova inserimento nazionalità</title>
    </head>
    <body>


    <form method="POST" autocomplete ="off" action="">
    <?php if (!empty($nazionalita)): ?>
    <select name="nazionalita">
    <option value="">-seleziona-</option>

    <?php foreach ($nazionalita as $entry): ?>
    <option value="<?= $entry ?>"><?= $entry ?></option>
    <?php endforeach; ?>

    </select>
    <?php endif; ?>

    <p>
    Nuova nazionalità da inserire: <input type='text' name='nuovanazionalita'>
    </p>

    <div align="center">
    <input type="submit" name="reg" value="Invio Iscrizione" />
    </div>
    </form>
    </body>
    </html>
    Nota: non ho modo di testare il codice, dunque può darsi che manchi qualche punto e virgola qua e là, o che ci siano altri errori di battitura (in ogni caso semplici da correggere).

  10. #10
    Guest

    Predefinito

    Grazie mzanella,

    Io l'avevo in mysql l'esempio precedente e non conoscendo bene mysqli non mi sono azzardato a ritoccarlo ma siccome poi va integrato con il form di prima deve essere tutto univoco.Cosa intendi con la parola "prepared statement" ?? Grazie di nuovo

  11. #11
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Cosa intendi con la parola "prepared statement" ??
    Per dirla in breve, anziché costruire "a mano" una query concatenando stringhe, si possono usare questi prepared statement, che fanno un certo numero di cose in automatico, in particolare permettono di evitare SQL injection.

  12. #12
    Guest

    Predefinito

    Ciao mzanella,

    Il tuo codice non ha nessun errore tranne una mancanza diuna parentesi graffe alla riga 36. Questo è l'errore riportato:

    Parse error: syntax error, unexpected '{' at line 36
    Ho visto ho contato le graffe e mi sembrano che ci siano tutte :( Comunque la riga 36 è la seguente:

    if (!empty($nuovanazionalita) && !in_array($nuovanazionalita, $nazionalita) {

  13. #13
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Ho visto ho contato le graffe e mi sembrano che ci siano tutte :( Comunque la riga 36 è la seguente:
    In realtà manca una parentesi tonda chiusa, dovrebbe essere:
    Codice PHP:
    if (!empty($nuovanazionalita) && !in_array($nuovanazionalita, $nazionalita)) {

  14. #14
    Guest

    Predefinito

    Secondo te mi conviene distinguere in tre tabelle una per la nazionalità, una per la città e una per la prov oppure sfruttare la tebella unica che ho creato per il form "utenti" ????

  15. #15
    Guest

    Predefinito

    Ciao,

    Il tuo programma funziona magnificamente. Ora devo capire come posso integrarlo con il form che sto facendo. Possono convivere tre insert nello stesso form ???? Mi spiego, anzicchè fare tre tabelle vorrei sfruttarne una però visto che qua abbiamo l'insert separato e nel form d'iscrizione è tutto unito ma manca nazionalita, citta e prov non dovrebbero interferire fra lo o sbaglio ???

  16. #16
    Guest

    Predefinito problema di errore con mysql_num_rows

    Salve a tutti,

    Veniamo al dunque e uniamo la prova che ho fatto al mio form, nell'inserire il campo input per la nazionalita se lo metto prima del php non mi compare la select cosa che odvrebbe comparire non ho fatto la prova inversa. Però nella memorizzazione si va a memorizzare la nazionalita su un rigo a parte e il resto nel db completo. invece a me serve che debba inserire insieme alle altre informazioni. Posto anche un immagine del risultato nel phpmyadmin.

    iscrizione.php

    Codice PHP:

    <!--Inizio e input con selettore nazionalità-->

    <?php if (!empty($nazionalita)): ?>
    <select name="nazionalita">
    <option value="">-seleziona-</option>

    <?php foreach ($nazionalita as $entry): ?>
    <option value="<?= $entry ?>"><?= $entry ?></option>
    <?php endforeach; ?>

    </select>
    <?php endif; ?>

    <p>
    Nuova nazionalità da inserire: <input type='text' name='nuovanazionalita'>
    </p>

    <?php
    require_once("connettimysqli.php");

    // Legge tutte le nazionalità dalla base di dati, memorizzandole in un vettore
    $nazionalita = array();
    $query = "SELECT nazionalita FROM utenti ORDER BY nazionalita";
    $result = mysqli_query($con, $query);
    if (
    $result === false) {
    echo
    "SELECT failed: " . mysqli_error($con);
    }

    while (
    $row = mysqli_fetch_assoc($result)) {
    $nazionalita[] = $row['nazionalita'];
    }
    mysqli_free_result($result);



    // Aggiunge una nuova nazionalità alla base di dati, se non è già presente
    if (isset($_POST['nuovanazionalita'])) {
    $nuovanazionalita = mysqli_real_escape_string($con, trim($_POST['nuovanazionalita']));

    // Procede con l'inserimento solo se la nuova nazionalità non è vuota e non è già presente
    if (!empty($nuovanazionalita) && !in_array($nuovanazionalita, $nazionalita)) {
    $stmt = mysqli_prepare($con, "INSERT INTO utenti(nazionalita) VALUES(?)");
    mysqli_stmt_bind_param($stmt, "s", $nuovanazionalita);
    mysqli_stmt_execute($stmt);

    $nazionalita[] = $nuovanazionalita;
    sort($nazionalita);
    }
    }
    ?>
    Come potete vedere ho dovuto richiamare la connessione al db sennò mi dava un sacco di errori. Quetso è ciò ch emi si presenta memorizzato:



    Spero che qualcuno mi possa risolvere tale problema. Grazie.

  17. #17
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,762

    Predefinito

    Se fai una INSERT, è normale che ti immette una nuova riga nel database.
    Se vuoi modificare una precedente, devi fare una UPDATE (però devi specificare con WHERE quale riga, altrimenti te le modifica tutte!). Altrimenti dovresti inserire la nazionalità quando inserisci l'utente con tutti gli altri suoi dati.

    Ciao!

  18. #18
    Guest

    Predefinito

    Vorrei fare nel secondo modo sarebbe possibile modificare quel codice ????

  19. #19
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,762

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Altrimenti dovresti inserire la nazionalità quando inserisci l'utente con tutti gli altri suoi dati.
    Citazione Originalmente inviato da fabiodefe Visualizza messaggio
    Vorrei fare nel secondo modo sarebbe possibile modificare quel codice ????
    In quel codice non stai inserendo l'utente, quindi è impossibile farlo lì. Come ti ho già scritto devi farlo nello stesso form di iscrizione (se è una iscrizione).

    Ciao!

  20. #20
    Guest

    Predefinito problema di errore con mysql_num_rows

    Salve a tutti,

    Spero che vada bene la prosecuzione. Ho un piccolo problema. Eseguendo questa query:

    Riga: 95

    $checknazionalita= $mysqli -> query("SELECT nazionalita FROM utenti WHERE nazionalita='$nazionalita'");
    Mi da il seguente errore:

    Fatal error: Call to a member function query() on null at line 95
    la riga 95 è quella sopra citata.

    Il codice completo è il seguente:

    Codice PHP:

    #$query = "SELECT nazionalita FROM utenti";

    $checknazionalita= $mysqli -> query("SELECT nazionalita FROM utenti WHERE nazionalita='$nazionalita'");

    $result = mysqli_query($con, $checknazionalita);
    $nazionalite = [];

    $vuota=mysqli_num_rows($checknazionalita);
    if($vuota > 0){
    while ($f = mysqli_fetch_assoc($result)){
    print_r($f);


    }
    }
    echo mysqli_connect_errno();

    ?>
    <select name="nazionalita">
    <option value="">Scegli nazionalità</option>
    <?php
    foreach($nazionalite as $key => $val){
    echo
    "<option>".$val."</option>";
    }
    I campi e il db esistono. Spero che qualcuno di voi ne venga a capo . Grazie. Gli esempi l'ho presi dal sito inglese per trasformare mysql in mysqli (speravo che andassero bene ma a quanto pare no).

  21. #21
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Stai mescolando la "versione" procedurale di mysqli con quella ad oggetti.
    In sintesi, ci sono due modi per usare mysqli, uno con il paradigma ad oggetti (quello che hai incontrato nel sito in inglese che hai visitato) e l'altro procedurale (che è più simile al vecchio mysql, gli esempi di codice che hai visto nei messaggi precedenti seguono quest'ultimo). I due non si possono mescolare, dunque bisogna sceglierne uno ed usare solo quello.
    Non cambia molto, di solito i metodi del paradigma ad oggetti si chiamano mysqli->qualcosa(argomenti), le funzioni della versione procedurale mysqli_qualcosa($connessione, argomenti).

    Riguardo al problema specifico, stai usando mysqli->query("SELECT...") al posto di mysqli_query($con, "SELECT...").

  22. #22
    Guest

    Predefinito

    Ecco ddove sta l'inghippo grazie mmzanella. E per quanto riguarda la seguente riga è giusta ??? (sicuramente sarà sbagliata anche quella:

    while ($f = mysqli_fetch_assoc($result)){

  23. #23
    Guest

    Predefinito problema di errore con mysql_num_rows

    Niente da fare, ho provato a seguire gli esempi ma mi sono incasinato sempre di più. Questo è lo spezzone di codice chsicuramente sarà un gran casino (scusate il termine). Spero che qualcuno me lo possa correggere da evere un esempio per le prossime volte valido per tutti. Grazie.

    iscrizione.php

    contrllo esistenza nazionalità:

    Codice PHP:

    #$query = "SELECT nazionalita FROM utenti";

    $checknazionalita= mysqli_query($con, "SELECT nazionalita FROM utenti WHERE nazionalita='$nazionalita'");

    $result = mysqli_query($con, $checknazionalita);
    $nazionalite = [];

    $vuota=mysqli_num_rows($con,$checknazionalita);
    if($vuota > 0){
    while ($f = mysqli_fetch_assoc($checknazionalità)){
    print_r($f);


    }
    }

    echo mysqli_connect_errno();

    ?>
    <select name="nazionalita">
    <option value="">Scegli nazionalità</option>
    <?php
    foreach($nazionalite as $key => $val){
    echo
    "<option>".$val."</option>";
    ?>
    gli errori sono i seguenti:

    Warning: mysqli_query() expects parameter 1 to be mysqli, null at line 94

    Warning: mysqli_query() expects parameter 1 to be mysqli, null at line 96

    Warning: mysqli_query() expects parameter 1 to be mysqli, null at line 99
    riga 94:

    Codice PHP:
    $checknazionalita= mysqli_query($con, "SELECT nazionalita FROM utenti WHERE nazionalita='$nazionalita'");
    riga 96

    Codice PHP:
    $result = mysqli_query($con, $checknazionalita);
    riga 99:

    Codice PHP:
    $vuota=mysqli_num_rows($con,$checknazionalita);
    Spero in voi grazie.

  24. #24
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Warning: mysqli_query() expects parameter 1 to be mysqli, null at line 94
    Warning: mysqli_query() expects parameter 1 to be mysqli, null at line 96
    Warning: mysqli_query() expects parameter 1 to be mysqli, null at line 99
    Sembra che $con non sia definito, o non sia inizializzato correttamente. Controllane l'inizializzazione, oppure mostrane il codice .

    Inoltre:
    Codice PHP:
    $checknazionalita= mysqli_query($con, "SELECT nazionalita FROM utenti WHERE nazionalita='$nazionalita'");
    $result = mysqli_query($con, $checknazionalita);
    La seconda query non ha senso, probabilmente intendevi toglierla per sostituirla con la prima.

  25. #25
    Guest

    Predefinito

    La query che inizia con check nazionalità deve essere sostituita con la prima di cui 'l'avevo messa come commento la variabile $con esiste su un file chiamato connessione mysqli. Php che probabilmente devo inserite come require_once ecc. vero ??? Se statuto la l'errore sono un cojone. Scusatemi
    Ultima modifica di fabiodefe : 29-05-2016 alle ore 21.03.35

  26. #26
    Guest

    Predefinito problema di errore con mysql_num_rows

    Salve a tutti,

    Gli errori sussistono sempre. Ho modificato alcune righe suggeritomi da mzanella (vedere post #24), ma sono cambiate solo le righe degli errori ossia questi sono i seguenti errori:

    Warning: mysqli_query() expects parameter 2 to be string, object at line 95

    Warning: mysqli_num_rows() expects exactly 1 parameter, 2 given at line 98 0
    Riga 95:

    Codice PHP:
    $result = mysqli_query($con, $checknazionalita);
    Riga 98:

    Codice PHP:
    $vuota=mysqli_num_rows($con,$checknazionalita);
    Questo è il listato completo:

    Codice PHP:
    <!DOCTYPE html>

    <html>
    <head>
    <meta charset="UTF-8">
    <title>Modulo Iscrizione</title>

    <style type="text/css">
    body {
    background-color:#333;
    color:#FFF;
    font-family:Comic Sans MS;
    font-size:20px;

    }
    #intestazione{
    width:100%;
    height:100px;
    position:absolute;
    font-family: Comic Sans MS;
    top:0px;
    left:0px;
    text-align: center;
    }
    #divhr {

    position:absolute;
    top: 100px;
    font-family:Comic Sans MS;
    }

    #messaggio {
    position: absolute;
    top: 480px;
    font-family:Comic Sans MS;

    }
    </style>

    <div id ="intestazione">
    <H1>BENVENUTI NEL MODULO D'ISCRIZIONE</H1>
    <hr>
    </div>

    <div id ="divhr">
    <form method="POST" autocomplete ="off" action="<?php $_SERVER['PHP_SELF'] ?>">
    <p> <p> <p>
    <label for =campo-cognome"> Cognome: </label> <input type ="text" name = "cognome" required />

    </p> </p> </p>
    <p> <p><label for =campo-nome"> Nome: </label> <input type ="text" name = "nome" required/> </p></p>

    Selezionare la data di nascita:
    <?php
    // formazione dei tre select:
    // giorno

    echo '<select name="giorno">';
    echo
    '<option value="">Scegli giorno: </option>';
    for(
    $i=1;$i<32;$i++){
    echo
    "<option value=\"" . $i . "\">" . $i . "</option>\n";
    }

    echo
    "</select> ";

    // mese

    echo '<select name="mese">';
    echo
    '<option value="">Scegli mese: </option>';
    for(
    $i=1;$i<13;$i++){
    echo
    "<option value=\"" . $i . "\">" . $i . "</option>\n";
    }

    echo
    "</select> ";

    // anno
    echo '<select name="anno">';
    echo
    '<option value="">Scegli anno: </option>';

    for(
    $i=1920;$i<2012;$i++){
    echo
    "<option value=\"" . $i . "\">" . $i . "</option>\n";
    }
    echo
    "</select>";

    //controlla l'inserimento della data che sia corretta
    if (!checkdate($input['mese'], $input['giorno'], $input['anno'])) {
    $errore = "Data non valida";
    }

    #Inizio e input con selettore nazionalità
    require_once("connettimysqli.php");
    #$query = "SELECT nazionalita FROM utenti";

    $checknazionalita= mysqli_query($con, "SELECT nazionalita FROM utenti WHERE nazionalita='$nazionalita'");
    $result = mysqli_query($con, $checknazionalita);
    $nazionalite = [];

    $vuota=mysqli_num_rows($con,$checknazionalita);
    if(
    $vuota > 0){
    while (
    $f = mysqli_fetch_assoc($checknazionalità)){
    print_r($f);


    }
    }

    echo
    mysqli_connect_errno();

    ?>
    <select name="nazionalita">
    <option value="">Scegli nazionalità</option>
    <?php
    foreach($nazionalite as $key => $val){
    echo
    "<option>".$val."</option>";
    ?>

    <p> <p><label for =campo-username"> Username: </label> <input type ="text" name = "username" required/> </p></p>

    <p> <p><label for =campo-email"> E-Mail: </label> <input type ="email" name = "email" required/> </p></p>

    <p> <p><label for =campo-ripemail"> Ripeti-Email: </label> <input type ="email" name = "ripemail" required/> </p></p>

    <p> <p><label for =campo-password"> Password: </label> <input type ="password" name = "password" required/> </p></p>

    <p> <p><label for =campo-rippassword"> Ripeti-password: </label> <input type ="password" name = "rippassword" required/> </p></p>


    <div align ="center">
    <input type="submit" name="reg" value="Invio Iscrizione" />
    </div>
    </div>

    </form>

    </head>
    <body>
    <?php


    require_once ("connettimysqli.php");
    require_once (
    "data.php");
    echo
    "</hr>";

    if(!empty(
    $_POST)){

    # Inizializzazioni variabili

    $id = mysqli_real_escape_string($con, $_POST['id']);
    $cognome = mysqli_real_escape_string($con, $_POST['cognome']);
    $nome = mysqli_real_escape_string($con, $_POST['nome']);
    $giorno = mysqli_real_escape_string($con, $_POST['giorno']);
    $mese = mysqli_real_escape_string($con, $_POST['mese']);
    $anno = mysqli_real_escape_string($con, $_POST['anno']);
    $nascita = sprintf("%04d%02d%02d", $anno, $mese, $giorno);
    $nazionalita = mysqli_real_escape_string($con, $_POST['nazionalita']);
    $citta = mysqli_real_escape_string($con, $_POST['citta']);
    $prov = mysqli_real_escape_string($con, $_POST['prov']);
    $username = mysqli_real_escape_string($con, $_POST['username']);
    $email = mysqli_real_escape_string($con, $_POST['email']);
    $ripemail = mysqli_real_escape_string($con, $_POST['ripemail']);
    $password = mysqli_real_escape_string($con, $_POST['password']);
    $rippassword = mysqli_real_escape_string($con, $_POST['rippassword']);



    // formazione dei tre select:

    echo '<div id ="messaggio">';

    #Inizamo a controllare il carattere inserito per l'email che sia corretto



    $query=("INSERT INTO utenti (cognome, nome, nascita, nazionalita, username, email, password) "
    . "VALUES('$cognome','$nome','$nascita','$nazionalita','$username','$email','$password')");
    $result=mysqli_query($con,$query);

    if(
    $result){
    echo(
    "<p> Inserimento avvenuto correttamente <p>");
    } else{
    echo(
    "Inserimento non eseguito. Errore: ".mysqli_error($con));
    }
    }
    }


    ?>

    </body>
    </html>
    Le inizializzazxioni delle variabili ci sono ma prima viene l'html sarà quello il problema ???? Spero di venirne a capo con l'aiuto vostro. Grazie.

  27. #27
    Guest

    Predefinito problema di errore con mysql_num_rows

    Visto che più di tot caratteri altavista non mi permette di srcivere di seguito vi mostro il file:

    connettimysqli.php

    Codice PHP:
    <?php
    $ip
    = $_SERVER['SERVER_ADDR'];

    if(
    substr($ip,-7,3) == '150'){

    $host = 'xxx.xxx.xxx.xxx';
    $user = 'xxx';
    $password = 'xxxx';
    $db = 'xxx';


    /* $con= new mysqli($host, $user, $password, $db); */

    $con=mysqli_connect($host, $user, $password, $db);



    if (!
    $con) {
    die (
    'Non riesco a connettermi: ' . mysqli_connect_errno());
    }

    $mysqli_db_selected = mysqli_select_db($con, $db);
    if (!
    $mysqli_db_selected) {
    die (
    "Errore nella selezione del database: " . mysqli_connect_errno());
    }
    else
    {

    echo
    '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';

    #echo "<h1>Ti sei connesso al database"." ". $db. " "."da Roma.... Complimenti"." "."Il tuo indirizzo ip del server è:"." ". $ip;
    echo"</h1>";


    }

    }


    else if(
    substr($ip,-7,3) == '168'){


    $host = 'xxx.xxx.xxx.xxx';
    $user = 'xxx';
    $password = 'xxx';
    $db = 'xxx';

    $con= new mysqli($host, $user, $password, $db);

    if (!
    $con) {
    die (
    'Non riesco a connettermi: ' . mysqli_connect_errno());
    }

    $mysqli_db_selected = mysqli_select_db($con, $db);
    if (!
    $mysqli_db_selected) {
    die (
    "Errore nella selezione del database: " . mysqli_connect_errno());
    }
    else
    {

    echo
    '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';


    #echo "<h1>Ti sei connesso al database"." ". $db. " "."da Anzio.... Complimenti"." "."Il tuo indirizzo ip del server è:"." ". $ip;

    echo"</h1>";
    }

    }
    ?>

    Alla sostituzione dell'host c'è il mio indirzzo ip del nas.

  28. #28
    Guest

    Predefinito problema di errore con mysql_num_rows

    Allora ho apportato delle modifche seguendo i vari esempi che sono presenti sia sulla guida ufficiale di mysql e sia in un sito inglese. Queste sono le modifiche apportate è solo na parte. Inutilre postare l'intero listato. Se vi occore per capire megliobastao chiedermelo.

    modifiche apportate:

    Codice PHP:
    $checknazionalita="SELECT nazionalita FROM utenti WHERE nazionalita='$nazionalita'";
    if (
    $result = mysqli_query($con, $checknazionalita)) {

    # $result = mysqli_query($con, $checknazionalita);
    #$nazionalite = [];

    $vuota=mysqli_num_rows($result);
    if(
    $vuota > 0){
    while (
    $f = mysqli_fetch_assoc($result)){
    print_r($f);


    }
    }
    }
    Quello che mi si presenta a video è il seguente risultato:

    Array ( [nazionalita] => ) Array ( [nazionalita] => ) Array ( [nazionalita] => ) Array ( [nazionalita] => ) Array ( [nazionalita] => ) Array ( [nazionalita] => ) Array ( [nazionalita] => ) Array ( [nazionalita] => ) Array ( [nazionalita] => ) Array ( [nazionalita] => ) Array ( [nazionalita] => ) Array ( [nazionalita] => ) Array ( [nazionalita] => ) 0
    E' come se ci fosse un array nvuoto. Ma l'array l'ho messo come commento, va reinserito in questo caso ???? Bohh sono nelle vostre mani grazie e scusate il disturbo.

  29. #29
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Allora, partiamo dalla query che stai effettuando:
    Codice PHP:
    $checknazionalita="SELECT nazionalita FROM utenti WHERE nazionalita='$nazionalita'";
    tradotta a parole significa "dalla tabella utenti, seleziona solo il campo nazionalità, ma solo quando questo vale esattamente $nazionalita".
    Ad esempio, se $nazionalita all'inizio ha valore "inglese", con quella interrogazione estrai dalla tabella un insieme di nazionalità degli utenti... ma solo di quelli inglesi. Alla fine quindi ottieni un vettore del tipo array(['nazionalita'] => "inglese", ['nazionalita'] => "inglese", ['nazionalita'] => "inglese", ['nazionalita'] => "inglese").
    Tu stai ottenendo qualcosa di molto simile, ma al posto di "inglese" hai una stringa vuota. Allora immagino che il $nazionalita all'inizio abbia valore null, dunque la tua query altro non è che: "dalla tabella utenti estrai tutte le nazionalità, ma solo degli utenti per cui la nazionalità è nulla". Questo spiega i valori nei vettori che hai stampato.

    Invece, mi sembra di capire, a te interessano tutte le nazionalità presenti nella tabella, quindi la query di cui hai bisogno è qualcosa come:
    Codice PHP:
    $checknazionalita="SELECT DISTINCT nazionalita FROM utenti ORDER BY nazionalita";
    $result = mysqli_query($con, $checknazionalita);
    if (
    $result === false) {
    echo
    "ERROR: " . mysqli_error($con);
    }
    La parola chiave DISTINCT serve a rimuovere i duplicati. Ad esempio, se nella tabella hai n utenti di nazionalità inglese, con SELECT DISTINCT la nazionalità inglese viene "conteggiata" una volta sola mentre, con una SELECT "normale", ti ritroveresti con n nazionalità uguali. Ho aggiunto anche un ORDER BY perché, probabilmente, vuoi stamparle in ordine alfabetico.

    Dopodiché, immagino tu voglia inserire tutte le nazionalità lette dalla tabella all'interno del vettore $nazionalite:
    Codice PHP:
    $nazionalite = array();
    while (
    $row = mysqli_fetch_assoc($result)) {
    $nazionalite[] = $row['nazionalita'];
    }
    in questo caso non c'è bisogno di controllare il numero di righe interessate con mysqli_num_rows perché, qualora il numero di righe fosse 0, il ciclo while non verrebbe mai eseguito (mysqli_fetch_assoc restituisce subito false), ed il vettore $nazionalite resta vuoto.

  30. #30
    Guest

    Predefinito

    Grazie della nani. Da solo non ci sarei mai riuscito. Lo so non sono bravo e quindi ad ogni minima difficoltá chiedo aiuto. Forse dovrei lasciarcperdere la programmazione mi sa che non fa x me. Te che ne pensi ???? I tuoi pareri m'interessano x capire. Grazie. Domani provo.

Pagina 1 di 2 12 UltimoUltimo

Regole di scrittura

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