Jetzt wird aber das var_dump nur immer alle 1min 60sek angezeigt durch
(1 * 60) möchte ich es ja so machen, dass es immer angezeigt wird und nur immer nach dieser Zeit neu von der api abgerufen wird
Jetzt wird aber das var_dump nur immer alle 1min 60sek angezeigt durch
(1 * 60) möchte ich es ja so machen, dass es immer angezeigt wird und nur immer nach dieser Zeit neu von der api abgerufen wird
Mein Code sieht derzeit so aus:
<?php
error_reporting(-1);
ini_set('display_errors', true);
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "<div class='alert alert-success' role='alert'><p>Connection to server sucessfully</p></div>";
$redis->ping('hello');
$key = $redis->get('CALL::LAST');
if(empty($key) && time() - $key > (1 * 60)){
$url = "";
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL, $url);
$getdata = curl_exec($curl);
$Object = json_decode($getdata);
if(!is_null($Object)){
$ObjectMap = $Object->result;
$redis->set('CALL::LAST', time());
}else{
echo "null";
}
}
echo $ObjectMap ?? " Nichts gesetzt"
?>
Alles anzeigen
Ist das wirklich so schwer?
UNGETESTET:
PHPAlles anzeigen<?php error_reporting(E_ALL); ini_set("display_errors", true); $redis = new Redis(); $redis->connect('127.0.0.1', 6379) or die("Conection faild"); echo "<div class='alert alert-success' role='alert'><p>Connection to server sucessfully</p></div>"; $redis->ping('hello') or die ("Ping failed"); $key = $redis->get('CALL::LAST'); echo '$key = ' . $key . '<br><br>'; if(empty($key) && time() - $key > (1 * 60)){ echo 'In if<br><br>'; $url = "rest api"; $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_URL, $url); $getdata = curl_exec($curl); echo "<pre>"; var_dump($getdata); echo "</pre><br><br>"; $Object = json_decode($getdata); echo "<pre>"; var_dump($object); echo "</pre><br><br>"; if(!is_null($Object)) { echo '$object not NULL<br><br>'; $ObjectMap = $Object->result; echo "<pre>"; var_dump($ObjectMap); echo "</pre><br><br>"; $redis->set('CALL::LAST', time()); return $ObjectMap; } else echo "Object = NULL"; } ?>
Es kommt nur
Connection to server sucessfully
$key = 1606601240
raus
Dummerweise hast du Schritt 5 übersprungen.
Hallo
Ich habe ausversehen bei Schritt 5 keinen Haken gesetzt. Tut mir leid ...
Hallo m.scatello
Ich bin die Schritte durchgegangen wir wird jedoch immer noch nur Notice: Undefined variable: ObjectMap angezeigt.
Alles anzeigenIch auch nicht.
Du solltest die aber angewöhnen deinen Code richtig einzurücken, dann sieht besser welche Klammer wo hin muß.
Hast du mal versucht
Die Anführungs Striche weg zu machen ?
Andere Fehler kann ich nicht sehen weil es nicht mein Thema ist.
Ich habe auch in vermutung das dein return vorher dein $objectMap wieder zurück gibt und beim echo nix mehr da ist.
Hallo basti1012,
Ich habe es ohne Anführungsstriche versucht leider gibt es wieder zurück, dass die Variable nicht definiert ist. Trotzdem Danke für deine Antwort.
Hi,
Ich habe mal probiert mir einen Zwischenspeicher mit Redis für das Zwischenspeichern einer Rest API zu bauen. Nun habe ich das Problem wenn ich die Variable mit echo ausgeben möchte, dass zurückgegeben wird das diese undefiniert ist. Könnte jemand auf den Code schauen ob dort noch Fehler sind, da ich auch noch nicht viel mit Redis gearbeitet habe. Ich bedanke mich schonmal im Vorraus.
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "<div class='alert alert-success' role='alert'><p>Connection to server sucessfully</p></div>";
$redis->ping('hello');
$key = $redis->get('CALL::LAST');
if(empty($key) && time() - $key > (1 * 60)){
$url = "rest api";
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL, $url);
$getdata = curl_exec($curl);
$Object = json_decode($getdata);
if(!is_null($Object)){
$ObjectMap = $Object->result;
$redis->set('CALL::LAST', time());
return $ObjectMap;
}
}
echo "$ObjectMap";
?>
Alles anzeigen
So ich habe alles umgewandelt und sehe nun es wird keine sql injection mehr erkannt ich kann dennoch nochmal den Code schicken, wenn ihr diesen nochmal durchschauen wollt
Ja ich versuche jetzt mal alles in PDO umzuwandeln
Nein! Das ist gefährlich! mysqli_real_escape_string() bringt überhaupt nichts wenn du den damit behandelten Wert nicht in Anführungszeichen setzt: im Query müssen um $id dann Anführungszeichen stehen - das wurde dir aber auch schon in #3 geschrieben! Beschäftige dich erstmal mit Kontextwechseln damit du das eigentliche Problem überhaupt verstehst. Ich würde dir auch eher zu prepared statements raten und nicht die Querys von Hand zusammen bauen.
Die restlichen Fehler in den zwei Zeilen wurden ja schon teilweise angesprochen:
- das ».$id« gehört hinter die Klammer, so gibt das einen Query der nicht das macht was du erwartest (vom Syntax her zwar richtig, die Logik ist aber falsch)
- in $bdd steht eine PDO-Verbindung, damit kann eine mysqli-Funktion natürlich nichts anfangen - entscheide dich endlich für eine Variante und räum den Code auf (ich würde PDO nehmen)
- Vergiss »SELECT *« und schreibe *immer* alle Spalten hin die du brauchst
Erstmal Danke für deinen Beitrag. Ich werde nun versuchen alles in PDO umzuwandeln.
Das wurde mittlerweile mehrfach geschrieben, aber da Endrick93 beratungsresistent zu sein scheint, bin ich hier raus.
1. Ich bin ja dran das zu ändern
2. warum bist du jetzt raus. Was habe ich dir getan?
Ich weis nicht ob das so ganz stimmt
$id = mysqli_real_escape_string($bdd, $_GET['id']);
$s2 = $bdd->query("SELECT * FROM convoy_part WHERE user_convoy= .$id");
Alles anzeigenWir können ja mal oben anfangen.
PHP<?php require('connection/db1.php'); // Teilnehmerliste $s2 = $bdd->query("SELECT * FROM convoy_part WHERE user_convoy=".$_GET['id']); // Zählung der Datensätze include 'connection/sql1.php'; $users_r = mysqli_query($conn, "SELECT * FROM `convoy_part` WHERE user_convoy=".$_GET['id']); $users = mysqli_num_rows($users_r); ?>
2 mal connection include ?
Warum?
Wie sieht der Inhalt der beiden Datein aus ?
Warum 2 mal die gleiche Abfrage ?
Code$s2 = $bdd->query("SELECT * FROM convoy_part WHERE user_convoy=".$_GET['id']); $users_r = mysqli_query($conn, "SELECT * FROM `convoy_part` WHERE user_convoy=".$_GET['id']);
Das bitte ändern.
Hier hast du Sql injection.
Nutze hier mysqli_real_escape_string für dein $_GET['id']
Also zwei Abfragen bei der einen werden die Datensätze mit der ID gezählt und die andere ruft diese ab. -> Danke für den Hinweis diese könnte ich eigentlich zusammenführen
Nutze hier mysqli_real_escape_string für dein $_GET['id'] -> Wie genau soll ich das einsetzen?
*Zu den 2 mal include
db1.php
<?php
$bdd = new PDO('mysql:host=localhost;dbname=;charset=utf8', '', '');
?>
sql1.php
<?php
$servername = "localhost";
$username = "";
$password = "";
$database = "";
// Create connection
$conn = new mysqli($servername, $username, $password, $database);
// Check connection
if ($conn->connect_error) {
// die("Connection failed: " . $conn->connect_error);
}
?>
Ich habe nochmals den Code angepasst und auch die unnötigen $result = mysqli_query($conn, $qry); entfernt
Alles anzeigenIch denke mal der weiß nicht was genau PDO und mysqli ist.
PDO wäre hier
https://www.php.net/manual/de/book.pdo.php
mysqli -funktion hier
https://www.php.net/manual/de/book.mysqli.php
Was ist für dich jetzt besser ?
PDO ist wohl sicherer , gerade bei Anfänger die gerne mal das escapen vergessen.
Ich lese nochmal beides durch
Nein. ist es nicht. Warum sollten wir uns mit so einem Durcheinander auseinander setzen? Benutze konsequent PDO oder die mysqli*-Funktionen, aber nicht beides.
Nein
Ok Danke für deine Rückmeldung jeder sieht das ein bisschen anderst damit komme ich aber trotzdem klar. Nur müsstest du mir dabei ein bisschen helfen, da ich nicht ganz genau weis was du damit meinst und um das Thema nicht in die Länge zuziehen
Jo.
Man hat
SELECT * FROM überall in vielen Tutorials gesehen.
Deswegen haben das alle so übernommen (auch ich mal).
Mittlerweile habe auch ich mitbekommen (aus den PHP Forum) das man trotzdem alle Spaltennamen da auflisten soll und das (*) weglassen soll.
Ok. Aber gehört das auch zu den Fehlern die eine SQL Injection auslösen
Also wenn ich das richtig verstehe soll ich nicht SELECT * machen sondern SELECT user_convoy, date FROM convoy_part WHERE user_convoy = :convoy
Das ist doch immer noch ein Durcheinander. Teilweise PDO, teilweise mysqli*-Funktionen und der PHP-Teil ist immer noch nicht vernünftig eingerückt.
Und bevor ich es vergesse: http://net.co.at/doc/howto/docs/dclp-faq/q/q-sql-select.html
Ich denke ob es jetzt ein bisschen durcheinander ist erstmal egal. Erstmal müssen die Fehler raus damit man nichts mehr böses anstellen kann
*Zu der Liste.
Ich habe noch eine alte version mit der die Liste funktioniert, dennoch habe ich die befüchtung das darin auch ein SQL Injection Fehler ist
$s2 = $bdd->query("SELECT * FROM convoy_part WHERE user_convoy=".$_GET['id']);
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">User</th>
<th scope="col">Datum</th>
<th scope="col"><a class="btn btn-primary" href="convoy_user.php?id=<?php echo $user2['id']; ?>&action=part" role="button">Teilnehmen</a></th>
</tr>
</thead>
<tbody>
<?php
while($data = $s2->fetch()){
?>
<tr>
<th scope="row"><?php echo $data['id']; ?></th>
<td><?php echo $data['name']; ?></td>
<td><?php echo $data['date']; ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
Alles anzeigen
HTML-Seminar.de - mit Videos zum schnellen Lernen, wie man eine Website selbst erstellt.