Actionare involuntara a formularului

php

#1

Modulul de mai jos intentioneaza sa ia valorile date de un formular pe o pagina anterioara, sa verifice adresa utilizatorului (REMOTE_ADDR) fata de baza de date MySQL, si daca formularul nu a fost actionat de un numar de ori mai mare ca 2 de la adresa respectiva, sa initieze calcularea lui A. Daca a fost actionat de un numar mai mare de ori, userul e transferat la alta pagina.
Apoi A este comparat cu o valoare si returneaza unul din 2 mesaje.
Dupa asta, pe aceeasi pagina cu mesajul returnat, utilizatorul mai are posibilitatea sa mai actioneze formularul inca o data cu alte variante, rezultatul fiind dat pe pagina urmatoare.

Probema pe care o am este ca odata ce se intra pe instructiunile de mai jos, programul nu se opreste dupa “echo Felicitari”, ci merge in continuare si actioneaza formularul care urmeaza, fara sa astepte actionarea “Submit” din nou de catre utilizator. Programul merge bine si afiseaza “echo result+1” si campurile pentru formular, dar actioneaza formularul in mod automat, ducand apoi la o pagina care nu exista.

Cum fac ca dupa afisarea rezultatelor sa introduc o pauza, care sa necesite actionarea formularului pentru a merge mai departe?

<?php    
$con = mysqli_connect("host","user","passwd","database") or die ("<script language='javascript'>alert('Unable to connect to database')</script>");
$ip=$_SERVER['REMOTE_ADDR'];
$sql = "INSERT INTO IPaddress (submitIP) VALUES ('$ip')";
if ($con->query($sql) === TRUE) {
echo "New record created successfully<br/>";
$result = mysqli_query($con, 'SELECT `Auto_increment` FROM `IPaddress` WHERE `submitIP` = "' . mysqli_real_escape_string($con, $ip). '"') or die(mysqli_error($con));
echo $result+1;
}
$row = mysqli_fetch_assoc($result);
if($row > 3) {
?>
<html
<head>
<meta HTTP-EQUIV="REFRESH" content="0; url=http://pagina2.html">
</head>
</html>
<?php
} else {
calculeaza A;
if (A<2)
echo "Felicitari";
}else{
echo "Nu e bine";
}
?>
<html>
<body>
<form action="form2.html" method="POST">
etc
<input type="submit" value="Submit" name="submit2"></form>       
</body>
</html>

#2

m-am lamurit. E OK acuma


(Ionuț Staicu) #3

Nu ne spui și nouă? :smile:


#4

@iamntz :grinning: Da, problema era ca “$result = mysqli_query()” imi returneaza un array in loc de un numar. Resultatul afisat de “echo $result+1” imi returna practic iteratiile de la +1. Daca pun “echo $result” imi da eroare. Dar avand “$result+1” masca eroarea. Deci programul sarea direct la pagina2, de aia nu mai astepta sa calculeze form-ul de dupa. Daca elimin blocul de instructiuni cu “url=http://pagina2.html” , programul se opreste asa cum trebuie la formular si asteapta sa fie actionat"

Chestia e ca tot nu ma lamuresc cum sa fac ca "$result= mysqli_query() sa-mi returneze pur si simplu numarul de randuri. Am incercat si cu

$result = mysqli_query($con, "SELECT `Auto_increment`, `submitIP`, COUNT(*) AS `tries` FROM `IPaddress` WHERE submitIP ={$ip}")    

dar imi da $result tot sub forma de array. Am crezut ca COUNT se presupune ca produce un numar, dar vad ca nu e asa. Desi am vazut niste exemple identice care returneaza un numar, la mine nu se intampla chestia asta. Ori am omis niste " ’ pe undeva, ori problema e la cum interpreteaza instructiunile MySQL la hostul meu, ca am inteles ca mai sunt variatii.

Ai vreo idee?


(Vlad) #5
SELECT ( SELECT COUNT(*) FROM table) AS count1 FROM...

Dar nu vad cu ce te-ar ajuta sa stii numarul de randuri din tabel dar poate n-am inteles eu ce vrei sa faci.
Scriptul tau nu verifica daca IP-ul este deja in DB si nici nu face incrementare in DB.


#6

@noah Multumesc pentru solutie. Sincer nu am vazut nicaieri solutia asta. Eu asa m-am gandit, ca scriptul meu insereaza un rand nou cu adresa url a fiecarui user la fiecare accesare, dupa care “mysqli_query” returneaza randurile venite de la userul curent. Eu practic vreau doar numarul de randuri care contin adresa url a userului curent, ca sa compar cu numarul de accesari ale form-ului pe care vreau sa-l permit fiecarui user.
Intre timp am gasit si eu alta solutie la chestia asta, prin folosirea “mysqli_num_rows” in loc de “mysqli_fetch_assoc”. In felul asta imi returneaza exact ce vreau eu, numarul de accesari de la un anumit url. Am sa incerc si solutia ta, sa vad daca imi da acelasi rezultat.