-
Mi scusi, non volevo essere scortese.
Ho inserito il codice come mi ha detto
Codice PHP:
... foreach( $result->fetch_fields() as $index => $fieldData ) {
if ( $fieldData->table == $tablename && $fieldData->name == $fieldname ) {
return $resultData[$index];
}
}
return false;
}
error_reporting(E_ALL);
@session_start(); // start session if not started yet
if ($_SESSION['AntiSpamImage'] != $_REQUEST['anti_spam_code']) ...
Ora mi dà il seguente risultato:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /membri/paolin/sign-invio-prova.php on line 184
Notice: Undefined index: Id in /membri/paolin/sign-invio-prova.php on line 57
quest'ultima riga (Notice: Undefined index: Id...) viene ripetuta in tutta la pagina, ad occhio oltre cento volte direi;
in fondo compare la scritta "Grazie per aver firmato..." che dovrebbe comparire quando l'inserimento va a buon fine: naturalmente non ha inserito nulla.
Alla riga 184 c'è
Codice PHP:
$numero = mysqli_num_rows($result);
mentre alla 57 c'è
Codice PHP:
return $data[$field];
Grazie, cordiali saluti.
-
Alla riga 184 provi moficando così:
Codice PHP:
$stmt->close();
if($result) {$numero = mysqli_num_rows($result);}else {numero = 0;}
Alla riga 57 provi così:
Codice PHP:
return $data[$_GET[$field]];
Cordiali saluti.
-
Ho modificato come mi ha detto, ora dice:
Parse error: syntax error, unexpected '=' in /membri/paolin/sign-invio-prova.php on line 186
Alla riga 186 c'è
Codice PHP:
if($result) {$numero = mysqli_num_rows($result);}else {numero = 0;}
Cordiali saluti.
-
Ho ommesso il $ su "numero = 0", non me n'ero accorto.
Cordiali saluti.
-
Grazie, ho aggiunto il $ ma purtroppo mi ridà questo:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /membri/paolin/sign-invio-prova.php on line 186
Notice: Undefined index: Id in /membri/paolin/sign-invio-prova.php on line 58
Notice: Undefined index: in /membri/paolin/sign-invio-prova.php on line 58
Notice: Undefined index: Id in /membri/paolin/sign-invio-prova.php on line 58
Notice: Undefined index: in /membri/paolin/sign-invio-prova.php on line 58
Notice: Undefined index: Id in /membri/paolin/sign-invio-prova.php on line 58
Notice: Undefined index: in /membri/paolin/sign-invio-prova.php on line 58
... (ripetuto all'infinito)
line 186 c'è
Codice PHP:
if($result) {$numero = mysqli_num_rows($result);}else {$numero = 0;}
line 58 c'è
Codice PHP:
return $data[$_GET[$field]];
praticamente lo stesso errore del post #61
cordiali saluti
-
Pria delle errore alla linea 186
provi a modificare $result = $stmt->execute() così:
Codice PHP:
$result = $stmt->execute() ? $stmt->get_result() : false;
Cordiali saluti.
-
Fatto!
Ora mi dice solo:
Notice: Undefined index: Id in /membri/paolin/sign-invio-prova.php on line 58
Notice: Undefined index: in /membri/paolin/sign-invio-prova.php on line 58
Notice: Undefined index: Id in /membri/paolin/sign-invio-prova.php on line 58
Notice: Undefined index: in /membri/paolin/sign-invio-prova.php on line 58
Notice: Undefined index: Id in /membri/paolin/sign-invio-prova.php on line 58
Notice: Undefined index: in /membri/paolin/sign-invio-prova.php on line 58
Notice: Undefined index: Id in /membri/paolin/sign-invio-prova.php on line 58
Notice: Undefined index: in /membri/paolin/sign-invio-prova.php on line 58
....
cordiali saluti
-
Alla linea 58, modifichi return $data[$_GET[$field]]; così:
Codice PHP:
if(isset($data[$field])) {return $data[$field];}
Cordiali saluti.
-
Fatto.
Ora mi dice:
Notice: Undefined offset: 1 in /membri/paolin/sign-invio-prova.php on line 61
Notice: Undefined offset: 1 in /membri/paolin/sign-invio-prova.php on line 61
Notice: Undefined offset: 1 in /membri/paolin/sign-invio-prova.php on line 61
Notice: Undefined offset: 1 in /membri/paolin/sign-invio-prova.php on line 61
Notice: Undefined offset: 1 in /membri/paolin/sign-invio-prova.php on line 61
Notice: Undefined offset: 1 in /membri/paolin/sign-invio-prova.php on line 61
.....
Alla linea 61 c'è
Codice PHP:
list($tablename,$fieldname) = explode(".",$field);
Cordiali saluti
-
Alla linea 61, modifichi return list($tablename,$fieldname) = explode(".",$field); così:
Codice PHP:
if (isset($field)) {echo list($tablename,$fieldname) = explode(".",$field);}
Cordiali saluti.
-
Ho modificato così
Codice PHP:
function mysqli_result($result, $row, $field) {
$result->data_seek($row);
if ( strstr($field, ".") === false ) {
$data = $result->fetch_assoc();
if(isset($data[$field])) {return $data[$field];}
}
if (isset($field)) {echo list($tablename,$fieldname) = explode(".",$field);}
$resultData = $result->fetch_array(MYSQLI_NUM);
foreach( $result->fetch_fields() as $index => $fieldData ) {
if ( $fieldData->table == $tablename && $fieldData->name == $fieldname ) {
return $resultData[$index];
}
}
return false;
}
Ora mi dice:
Notice: Undefined offset: 1 in /membri/paolin/sign-invio-prova.php on line 61
Notice: Array to string conversion in /membri/paolin/sign-invio-prova.php on line 61
Array
Notice: Undefined offset: 1 in /membri/paolin/sign-invio-prova.php on line 61
Notice: Array to string conversion in /membri/paolin/sign-invio-prova.php on line 61
Array
Notice: Undefined offset: 1 in /membri/paolin/sign-invio-prova.php on line 61
Notice: Array to string conversion in /membri/paolin/sign-invio-prova.php on line 61
Array
....
Cordiali saluti.
-
Provi così:
Codice PHP:
function mysqli_result($result, $row, $field) {
$result->data_seek($row);
if ( strstr($field, ".") === false ) {
$data = $result->fetch_assoc();
if (isset($data[$field])) {return $data[$field];}
}
if (isset(explode(".",$field)) {echo list($tablename,$fieldname) = explode(".",$field);}
$resultData = $result->fetch_array(MYSQLI_NUM);
foreach( $result->fetch_fields() as $index => $fieldData ) {
if ( $fieldData->table == $tablename && $fieldData->name == $fieldname ) {
return $resultData[$index];
}
}
return false;
}
Eventualmente provi anche sostituendo la fiunzione con questa:
Codice PHP:
function mysqli_result($result,$row=0,$field=0){
$numrows = mysqli_num_rows($result);
if ($numrows && $row <= ($numrows-1) && $row >=0){
mysqli_data_seek($result,$row);
$resrow = (is_numeric($field)) ? mysqli_fetch_row($result) : mysqli_fetch_assoc($result);
if (isset($resrow[$field])){return $resrow[$field];}
}
return false;
}
Cordiali saluti.
-
Grazie, ho provato il primo codice e mi dà:
Fatal error: Cannot use isset() on the result of a function call (you can use "null !== func()" instead) in /membri/paolin/sign-invio-prova.php on line 55
alla linea 55 c'è
Codice PHP:
if (isset(explode(".",$field)) {echo list($tablename,$fieldname) = explode(".",$field);}
Ho provato a sostituire con "null !== func()" ma senza risultato.
Con il secondo codice sembra funzionare, non dà nessun errore, ma non inserisce nulla nel Guestbook.
Le posto l'intero codice per una più chiara comprensione:
Codice PHP:
<?php function detect_cyr_utf8($content)
{
return preg_match('/
[78]\d/', mb_encode_numericentity($content, array(0x0, 0x2FFFF, 0, 0xFFFF), 'UTF-8'));
}
function mysqli_result($result,$row=0,$field=0){
$numrows = mysqli_num_rows($result);
if ($numrows && $row <= ($numrows-1) && $row >=0){
mysqli_data_seek($result,$row);
$resrow = (is_numeric($field)) ? mysqli_fetch_row($result) : mysqli_fetch_assoc($result);
if (isset($resrow[$field])){return $resrow[$field];}
}
return false;
}
error_reporting(E_ALL);
@session_start(); // start session if not started yet
if ($_SESSION['AntiSpamImage'] != $_REQUEST['anti_spam_code']) {
// set antispam string to something random, in order to avoid reusing it once again
$_SESSION['AntiSpamImage'] = rand(1,9999999);
?>
<br> <img src='imm/stop.gif'><br>...
<?php
}
else {
// set antispam string to something random, in order to avoid reusing it once again
$_SESSION['AntiSpamImage'] = rand(1,9999999);
$nome=$_POST["fullname"];
$aaemail=$_POST["email"];
//$commento=htmlspecialchars ($_POST["comments"], ENT_QUOTES);
$commento=$_POST["comments"]; // l'uso di htmlspecialchars crea caratteri che spesso nei browser vengono visualizzati male
$localita=$_POST["location"];
$indirizzoip=$_SERVER['REMOTE_ADDR'];
//$tempo=getdate("d/m/Y H:i:s")); // non commntato da GraphOGLRisorse
//$tempo=getdate(); // non commntato da GraphOGLRisorse
//$tempo=getTimestamp(); // non commntato da GraphOGLRisorse
$tempo = date("Y-m-d H:i:s");
//$tempo = timestamp($current_date); // non commntato da GraphOGLRisorse
if (stristr($aaemail, 'smith'))
{
?>
<img src='imm/stop.gif'><br>...
<?php
}
else
{
if (empty($commento))
{
?>
<img src='imm/stop.gif'><br>...
<?php
}
else
{
$trovato=0;
$num_parole=0;
$stringhe= array('cialis', 'viagra', 'http','www','penis','girl');
while (($num_parole < count($stringhe)) and ($trovato==0))
{
If (stristr($commento, $stringhe[$num_parole])) $trovato=1;
$num_parole++;
}
if ($trovato==1)
{
?>
<img src='imm/stop.gif'><br>...
<?php
}
else
{
if (detect_cyr_utf8($commento))
{
?>
<img src='imm/stop.gif'><br>...
<?php
}
else
{
?>
<?php
$db_host = "localhost";
$db_user = "pinco";
$db_name = "my_pinco";
//$db = mysql_connect($db_host, $db_user);
$mysqli = mysqli_connect($db_host, $db_user, $db_name);
if ($mysqli == FALSE)
die ("Errore nella connessione.");
// imposto charset utf8
if (!mysqli_set_charset($mysqli, 'utf8')) {
die ("Error: Unable to set the character set.\n");
exit;
}
//$res = mysql_select_db($db_name);
$res = mysqli_select_db($mysqli, $db_name);
if ($res == FALSE)
die ("Errore nella selezione del DB.");
// query per vedere se c'è già un commento uguale
$stmt = $mysqli->prepare("SELECT * FROM guestbook WHERE Email=? AND Comments=?");
$stmt->bind_param("ss", $aaemail, $commento);
//$result = $stmt->execute();
$result = $stmt->execute() ? $stmt->get_result() : false;
//$numero = mysql_num_rows($result);
$stmt->close();
if($result) {$numero = mysqli_num_rows($result);}else {$numero = 0;}
//$stmt->close();
if ($numero>0){
// messaggio di errore
?>
<br> <img src='imm/stop.gif'>...
<?php
}
//else
//$query="SELECT * FROM guestbook";
//$risultati=mysql_query($query);
$risultati=mysqli_query($mysqli,"SELECT * FROM guestbook");
$num=mysqli_num_rows($risultati);
$i=0;
$valmax=0;
while ($i < $num) {
//$valore=mysql_result($risultati,$i,"Id");
$valore=mysqli_result($risultati,$i,"Id");
if ($valore>$valmax) {
$valmax=$valore;
}
$i++;
}
$ultimo=$valmax+1;
//$ultimo=mysql_numrows($risultati)+1; // non commntato da GraphOGLRisorse
// aggiungo record
$query="INSERT IGNORE INTO guestbook(Id, Name, Email, Comments, Location, DateSent, IPAddress) VALUES(?, ?, ?, ?, ?, ?, ?)";
$stmt2 = $mysqli->prepare($query);
$stmt2->bind_param("sssssss", $ultimo, $nome, $aaemail, $commento, $localita, $tempo, $indirizzoip);
$result = $stmt2->execute();
//$result = mysql_query($query);
//$result = mysqli_query($mysqli, $query);
// controllo l'esito
if (!$result) {
//die("Errore nella query $query: " . mysql_error());
die("Errore nella query $query: " . mysqli_error($mysqli));
}
// chiudo la connessione a MySQLi
//mysql_close();
mysqli_close($mysqli);
<?php
}
}
}
}
}
?>
Cordiali saluti
-
Nelle due query, dopo $stmt->close(); aggiunga echo $result.'<br>';
Serve solo al momento come verifica, per vedere cosa restituiscono.
Cordiali saluti.
-
Ho inserito così
Codice PHP:
$stmt = $mysqli->prepare("SELECT * FROM guestbook WHERE Email=? AND Comments=?");
$stmt->bind_param("ss", $aaemail, $commento);
//$result = $stmt->execute();
$result = $stmt->execute() ? $stmt->get_result() : false;
//$numero = mysql_num_rows($result);
$stmt->close(); echo $result.'<br>';
....
$stmt2 = $mysqli->prepare($query);
$stmt2->bind_param("sssssss", $ultimo, $nome, $aaemail, $commento, $localita, $tempo, $indirizzoip);
$result = $stmt2->execute();
//$result = mysql_query($query);
//$result = mysqli_query($mysqli, $query);
// controllo l'esito
if (!$result) {
//die("Errore nella query $query: " . mysql_error());
die("Errore nella query $query: " . mysqli_error($mysqli));
}
// chiudo la connessione a MySQLi
//mysql_close();
mysqli_close($mysqli); echo $result.'<br>';
e mi dà:
Catchable fatal error: Object of class mysqli_result could not be converted to string in /membri/paolin/sign-invio-prova.php on line 177
line 177 c'è
Codice PHP:
$stmt->close(); echo $result.'<br>';
Cordiali saluti
-
Annulli l'utima modifica.
Aggiunga questo alla fine della pagina prima del tag body:
Codice PHP:
<?php
// dati di connessione al prprio database MySQL
$db_host = 'localhost';
$db_user = 'xxxxx';
$db_name = 'my_xxxxx';
// connessione al DB utilizzando MySQLi
$mysqli = new mysqli($db_host, $db_user, null, $db_name);
// verifica di eventuali errori della connessione
if ($mysqli->connect_errno) {
die ("Connessione fallita: ". $mysqli->connect_error . ".");
exit();
}
$result = $mysqli->query("SELECT * FROM guestbook");
echo "<table><tr>";
echo "<th>ID</th><th>Nome</th><th>email</th><th>commento</th><th>localita</th><th>tempo</th><th>indirizzoip</th>";
echo "</tr>";
while($riga=$result->fetch_assoc()){
?>
<th><?php printf($riga['Id']);?></th>
<th><?php printf($riga['Name']);?></th>
<th><?php printf($riga['Email']);?></th>
<th><?php printf($riga['Comments']);?></th>
<th><?php printf($riga['Location']);?></th>
<th><?php printf($riga['DateSent']);?></th>
<th><?php printf($riga['IPAddress']);?></th>
<?php
}
echo "</table>";
// chiusura della connessione
$mysqli->close();
?>
Cordiali saluti.
-
Grazie per l'aiuto e il suo impegno.
Ho tolto i due echo $result.'<br>';
ho aggiunto a fine pagina, prima del tag "/body" il codice da lei indicatomi (sostituendo con le mie credenziali di connessione al db),
ora accade questo:
mi stampa a video
ID Nome email commento localita tempo indirizzoip
Notice: Undefined index: Id in /membri/paolin/sign-invio-prova.php on line 268
e di seguito il primo messaggio del 2002 inserito nel Guestbook,
però poi non visualizza tutti gli altri messaggi inseriti nel GB,
se poi vado su pannello AV in PhpMyAdmin, nella tabella "guestbook" NON ha inserito nulla.
Bisognerebbe che inserisse il messaggio nella tabella, la quale viene poi visualizzata dal file http://paolin.altervista.org/defaultx.php
Riepilogando: tramite la pagina http://paolin.altervista.org/sign-form.php avviene l'inserimento nel form, viene elaborato dal codice php del file che stiamo modificando (sign-invio.php) e visualizzato dal file http://paolin.altervista.org/defaultx.php
cordiali saluti
-
Allora, l'ultima parte che le ho dato, serve per visualizzare sul browser una tabella con quanto sta nel database.
Mi serviva solo come verifica.
L'id ho sbagliato io a includerlo nella tabella.
I messaggi probabilemnte vengono visulizzati tutti, ma affiancati perchè nella tabella ho dimenticato di inserire il comando a capo.
Comunque è concettulmente la stessa cosa di defaultx.php. Quindi può farne a meno.
Per fare una semplice verifica, aggiunga questo dopo la chiusura della query record (quella con INSERT IGNORE INTO guestbook).
Codice PHP:
// verifica funzionamento
echo "Righe generate: " .$result->affected_rows. "<br />";
echo "Ultimo ID inserito: " .$result->insert_id . "<br />";
Cordiali saluti.
-
Ho aggiunto il codice (senza togliere nulla), oltre a ciò che appariva l'ultima volta,
prima ora appare:
Notice: Trying to get property of non-object in /membri/paolin/sign-invio-prova.php on line 229
Righe generate:
Notice: Trying to get property of non-object in /membri/paolin/sign-invio-prova.php on line 230
Ultimo ID inserito:
Alle linee 229 e 230 c'è il codice aggiunto.
cordiali saluti
-
Provi in questo modo:
Codice PHP:
// verifica funzionamento
if($result){
if($result->num_rows > 0) {
echo "Righe generate: ".$mysqli->affected_rows."<br />";
echo "Ultimo ID inserito: ".$mysqli->insert_id ."<br />";
}
}
Cordiali saluti.
-
Mi dà
Parse error: syntax error, unexpected '}', expecting ',' or ';' in /membri/paolin/sign-invio-prova.php on line 233
poi ho inserito un ; dopo echo "Ultimo ID inserito: ".$mysqli->insert_id ."<br />"
e ora restituisce
ID Nome email commento localita tempo indirizzoip
Notice: Undefined index: Id in /membri/paolin/sign-invio-prova.php on line 276
Paolo
e tutti gli altri messaggi dal 2002 (come nel post #77)
alla linea 276 c'è
Codice PHP:
<th><?php printf($riga['Id']);?></th>
cordiali saluti
-
Per sbaglio ho messo un ! nell if() e un "};" nel blocco di verifica del messaggio precedente.
Cumunque ho corretto gli errori di scrittua nel mio messaggio precedente.
Per il momento modifichi così:
Codice PHP:
<?php
// dati di connessione al prprio database MySQL
$db_host = 'localhost';
$db_user = 'xxxxx';
$db_name = 'my_xxxxx';
// connessione al DB utilizzando MySQLi
$mysqli = new mysqli($db_host, $db_user, null, $db_name);
// verifica di eventuali errori della connessione
if ($mysqli->connect_errno) {
die ("Connessione fallita: ". $mysqli->connect_error . ".");
exit();
}
$result = $mysqli->query("SELECT * FROM guestbook");
echo "<table><tr>";
echo "<th>ID</th><th>Nome </th><th>email </th><th>commento </th><th>localita </th><th>tempo </th><th>indirizzoip</th>";
echo "</tr>";
while($riga=$result->fetch_assoc()){
?>
<!--<th><?php printf($riga['Id']);?></th>-->
<th><?php printf($riga['Name']);?></th>
<th><?php printf($riga['Email']);?></th>
<th><?php printf($riga['Comments']);?></th>
<th><?php printf($riga['Location']);?></th>
<th><?php printf($riga['DateSent']);?></th>
<th><?php printf($riga['IPAddress']);?></th><br>
<?php
}
echo "</table>";
// chiusura della connessione
$mysqli->close();
?>
Cordiali saluti.
-
Ho modificato l'ultimo codice, ho corretto la verifica del messaggio precedente
Ora mi dà:
Notice: Trying to get property of non-object in /membri/paolin/sign-invio-prova.php on line 230
Grazie per aver firmato il Libro
(poi, molto più sotto, a capo)
ID Nome email commento localita tempo indirizzoip
poi dal primo messaggio del 2002 inserito nel GB in avanti...
alla riga 230 c'è
Codice PHP:
if($result->num_rows > 0) {
Cordiali saluti
-
Lo modifichi così:
Codice PHP:
if($mysqli->num_rows > 0) {
Cordiai sauti.
-
Modificato.
Ora mi dice:
Notice: Undefined property: mysqli::$num_rows in /membri/paolin/sign-invio-prova.php on line 230
Alla linea 230 c'è il codice modificato.
Cordiali saluti
-
Allora, commenti la riga 230 e anche la relativa parentesi di chiusura.
Cordiai sauti.
-
Codice PHP:
// verifica funzionamento
if($result){
if($mysqli->num_rows > 0) {
echo "Righe generate: ".$mysqli->affected_rows."<br />";
echo "Ultimo ID inserito: ".$mysqli->insert_id ."<br />";
}
}
riga 230 è
if($mysqli->num_rows > 0) {
cordiali saluti
-
Si, l'avevo capito.
Intendevo questo:
Codice PHP:
// verifica funzionamento
if($result){
//if($mysqli->num_rows > 0) {
echo "Righe generate: ".$mysqli->affected_rows."<br />";
echo "Ultimo ID inserito: ".$mysqli->insert_id ."<br />";
//}
}
Volevo escludere quella parte.
Cordiai sauti.
-
Scusi, non avevo capito...
Ora mi dice:
Warning: main(): Property access is not allowed yet in /membri/paolin/sign-invio-prova.php on line 232
Righe generate:
Warning: main(): Couldn't fetch mysqli in /membri/paolin/sign-invio-prova.php on line 233
Ultimo ID inserito:
Grazie per aver firmato il Libro
poi, molto più sotto,
ID Nome email commento localita tempo indirizzoip
ecc...
Cordiali saluti
-
Scusi, mi stavo confondendo con i nomi delle variabili.
Così dovrebbe andare.
Codice PHP:
if($result){
if($stmt->num_rows > 0) {
echo "Righe generate: ".$stmt->affected_rows."<br />";
echo "Ultimo ID inserito: ".$stmt->insert_id ."<br />";
}
}
Cordiali saluti.