php loop script ausführen mittels js

rernanded

Erfahrenes Mitglied
Hallo,
suche Idee wie ich einen Loop mittels js aufrufen kann - falls denn js dafür die beste Lösungsmöglichkeit ist.

Aufgabe: js soll mittels id das php script alle 10 sekunden aufrufen und zwar jeweils mit um 1 sich erhöhender id

1. Aufruf bei 1. Sekunde(bzw. bei vollständig geladener Seite) id = 1
2. Aufruf bei 11. Sekunde id = 2
3. Aufruf bei 21. Sekunde id = 3
usw.

MONI

PHP:
<?php
$servername = "localhost:3306";
$username = "";
$password = "";
$dbname = "";

$connection = new mysqli($servername, $username, $password, $dbname);

if ($connection->connect_error) {
     die("Connection failed: " . $connection->connect_error);
}

$id = $_POST['id'];

$sql = "SELECT * FROM tablename WHERE id='$id'";

$result = $connection->query($sql);

if ($result->num_rows > 0) {
    
    while($row = $result->fetch_assoc()) {
    echo "id:<br />".$row["id"]."<br />";
    echo "eins:<br />".$row["eins"]."<br />";
    echo "zwei:<br />".$row["zwei"]."<br />";
    echo "drei:<br />".$row["drei"]."<br />";
    echo "<hr>";

     }
} else {
     echo "Kein Ergebnis.";
}

$connection->close();
?>
 
Das kannst du mit Ajax machen.
Mit sertinterval rufst du mit Ajax dein Php Script auf und gibst ihn dann eine id mit die sich erhöht.
Javascript:
<script>
var time=10000;
var ende=20;
function php_aufrufen(id,ende){
       if(id<=ende){
           $.ajax({
               type: 'POST',
               url: 'php_script.php',
               data: {id:id},
               success: function(data){
                  setTimeout(function(){
                       id++;
                     console.log(data);
                     php_aufrufen(id,ende);
                    },time);
               },
               error:function(err){
                      console.log('Fehler beim aufrufen = '+err)            
               }
           });
       }
}
php_aufrufen(0,ende);
</script>

so ungefähr, ist jetzt ungetestet.
console.log(data) zeigt dir dann das an was im Php Script als echo ausgegeben wird
 
@ComFreek Yeap, ich würde ein mysqli_real_escape_string einsetzen. an welcher Stelle würdest Du vorschlagen?
Bitte lieber mit Prepared Statements arbeiten :)

echo "eins:<br />".$row["eins"]."<br />"; echo "zwei:<br />".$row["zwei"]."<br />"; echo "drei:<br />".$row["drei"]."<br />";
Je nachdem, was die Spalten enthalten können, hast du hier auch XSS als Sicherheitslücke. Am besten einfach immer htmlspecialchars draufwerfen, siehe PHP Doku dazu.
 
@basti1012

Sorry, Dein Vorschlag will nicht.
ich hab es mal so probiert (s.u.), klappt aber auch nicht, bin etwas ratlos.

HTML:
<script>
var time=10000;
var max=30;
function myFunction() {
if(id<=max){
$.ajax({
               type: 'POST',
               async: false,
               url: 'meine.php',
               data: {id},
               success: function(data){
                  setInterval(function(){
                       id++;
                     console.log(data);
                    myFunction();
                    },time);
        }
      }
    }
}
</script>
<button onclick="myFunction()">los</button><br /><br /><br />
 
Zuletzt bearbeitet:
Kuck dir mein Script an und deins, dann siehst du das du einiges geändert hast was so jetzt nicht mehr klappt
Kopiere das 1 zu1
HTML:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<button id="button">los</button>
<script>
var time=10000;
var ende=20;
function php_aufrufen(id,ende){
       if(id<=ende){
           $.ajax({
               type: 'POST',
               url: 'back.php',
               data: {id:id},
               success: function(data){
                  setTimeout(function(){
                       id++;
                     console.log(data);
                     php_aufrufen(id,ende);
                    },time);
               },
               error:function(err){
                      console.log('Fehler beim aufrufen = '+err)         
               }
           });
       }
}

document.getElementById('button').addEventListener('click',function(){
      php_aufrufen(0,ende);
})
</script>

Zum testen habe ich das Php Script genommen damit man auch sieht das es funktioniert
back.php
PHP:
<?php
if(isset($_POST['id'])){
     echo 'Id zurück zum test'. htmlspecialchars($_POST['id']);
}else{
     echo "So nicht";
}
?>

Dein problem wahr
1. data: {id}, // muss so sein {id:id} oder halt das was man mit geben will
2. setInterval // das wäre in den Fall eine tötliche Schleife für den Browser ( Absturz nach paar Minuten )
3. myFunction(); // da muss die id und max mit myFunction(id,max) , glaube nicht das es ohne geht in den fall
4. bei den klammern fehlt ein ) nach den }

Nimm an besten mein Script und wenn es geht ändere immer ein Teil und wenn das geht das nächste und so weiter.
Wenn du alles auf einmal änderst findest du den Fehler nicht mehr .
 
@basti1020
hier nochmals mein geändertes Ursprungsscript mit der Bitte mal damit zu testen, ich krieg es nämlich nicht hin. Testweise habe ich 30 Einträge/Datensätze in der Datenbank.


HTML:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<?php
$host = "localhost";
$port = "3306";
$username = "";
$password = "";
$dbname = "";

$pdo = new PDO("mysql:host=$host;port=$port;dbname=$dbname", "$username", "$password");

$id = $_POST['id'];

$statement = $pdo->prepare(" SELECT * FROM wow WHERE id = $id ");

$statement->execute();

$result = $statement->fetchAll();

         foreach ($result as $row) {
            echo $row["id"]."<br />".$row["wow"];
        }

?>
</body>
</html>
 
Zurück